Everything follows from that. Your portal password sits in an environment variable that a local process reads on every call, nothing is stored between calls, and the whole thing depends on the SABIS page markup staying where it is — a redesign upstream breaks the read. It is unaffiliated with the university, so treat it as a personal convenience rather than a supported integration.
An unofficial MCP server for SABIS, the Sakarya University student information system. There is no grades API, so it logs in with Puppeteer and reads the page: one tool, one answer, live from the portal each time rather than from a cached copy.
- One tool, `get-grades`, which takes no parameters — the credentials come from the environment
- The academic year and semester the results belong to, so a returned transcript is not ambiguous about which term it covers
- Per course: the course code and name, the group, and each assessment broken out by type with its weight as a percentage and the mark received
- The final letter grade for each course where one has been published
A valid Sakarya University student account. The server reads two environment variables, `USERNAME` and `PASSWORD`, either from an `.env` file in the project directory or from the `env` block of your MCP client config. Node.js 18+ and TypeScript 5.8+. The package is `sabis-mcp-server` (1.0.0 in package.json); clone, `npm install`, `npm run build`, then run `build/index.js` with `node`. On Linux, Puppeteer needs the Chromium system libraries installed before the browser will start.
