metu-sais-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@metu-sais-mcpWhat's my current GPA and class schedule?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
METU SAIS API & MCP Server
A modern Model Context Protocol (MCP) server and FastAPI service for Middle East Technical University (METU / ODTÜ) Student Affairs Information System (SAIS / student.metu.edu.tr).
Connects your AI assistants (such as OpenCode, Claude Desktop, and Cursor) directly to METU SAIS with real authentication and structured data parsing.
Features
SSO Authentication: Handles the real METU SSO login flow (
/sso/backend/request/user/signin) and session token validation.Proxy Scraper & HTML Parser: Automatically establishes authenticated proxy sessions (
/proxy/Student_Information/) and parses student records into structured JSON.MCP Server (MCP 2.x SDK): Exposes typed tools over standard I/O (stdio).
FastAPI REST Service: Alternative HTTP REST backend for integrations.
Privacy & Security: Zero credential logging or exposure. Credentials stay local in your git-ignored
.envfile.
Related MCP server: SABIS MCP Server
Available MCP Tools
Tool | Description |
| Fetches student ID, name, department, semester, GPA/CGPA, academic status, and advisor. |
| Fetches weekly class schedule (days, hours, course codes, course names, classrooms, instructors). |
| Fetches academic transcript across all semesters with courses, credits, grades, and semester GPA statistics. |
| Fetches active portal announcements. |
| Creates an in-memory connection record. |
| Lists all saved connection records. |
Installation & Setup
1. Prerequisites
Python >= 3.11
uv (recommended) or
pip
2. Install Dependencies
# Using uv (recommended)
uv sync
# Or using pip
pip install -e .3. Configure Credentials
Copy .env.example to .env and enter your METU credentials:
cp .env.example .envEdit .env:
SAIS_USERNAME=your_metu_username
SAIS_PASSWORD=your_metu_password
LOCALE=tr
PORT=8300.env is listed in .gitignore and will never be committed.
Using with OpenCode
An opencode.json is already included in this repository.
Project-Level Usage
When starting OpenCode inside this repository:
opencodeOpenCode will automatically connect to the metu-sais MCP server.
Global Usage (Any Directory)
To use METU SAIS tools across any project in OpenCode, add the server to ~/.config/opencode/opencode.jsonc:
{
"mcp": {
"metu-sais": {
"type": "local",
"command": [
"uv",
"--directory",
"/absolute/path/to/metu-sais-mcp",
"run",
"metu-sais-mcp"
],
"enabled": true
}
}
}Verify Connection
opencode mcp listYou should see:
● ✓ metu-sais connectedRunning the MCP Server Standalone
You can run the MCP server directly over standard I/O:
uv run metu-sais-mcpRunning the REST API
To start the FastAPI server:
uv run uvicorn api.main:app --port 8300 --reloadInteractive API documentation will be available at:
Swagger UI: http://localhost:8300/docs
Health check: http://localhost:8300/healthz
REST Endpoints
GET /api/sais/info— Student informationGET /api/sais/schedule— Class scheduleGET /api/sais/transcript— Transcript historyGET /api/sais/announcements— Portal announcementsGET|POST|PUT|DELETE /api/connections— Connection management CRUD
Testing
Run the automated test suite with pytest:
uv run pytest -vThe test suite includes:
Unit tests for HTML parsers (
parse_student_info,parse_schedule,parse_transcript,parse_announcements).MCP tool registration and tool calling tests.
FastAPI REST endpoint tests.
Live integration tests against METU SAIS when credentials are configured.
Project Structure
├── sais/
│ ├── connector.py # Core SAIS authentication, proxy scraping, and HTML parsers
│ └── connections.py # Shared in-memory connection store
├── sais_mcp/
│ └── server.py # MCP stdio server definition and tool registrations
├── api/
│ └── main.py # FastAPI REST API wrapper
├── tests/
│ ├── test_connector.py # Scraper and HTML parser tests
│ ├── test_mcp_server.py# MCP server tests
│ └── test_api.py # FastAPI tests
├── .env.example # Environment variable template
├── opencode.json # OpenCode MCP configuration
├── pyproject.toml # Package dependencies and CLI entrypoints
└── README.md # Project documentationLicense
MIT License.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceAn MCP server that enables AI agents to authenticate with and interact with Open eClass platform instances, supporting UoA's SSO authentication system for retrieving course information and performing basic platform operations.48
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to securely retrieve academic grades and course information from Sakarya University's SABIS student information system through automated web scraping.2ISC
- FlicenseNot gradedqualityDmaintenanceConnects AI assistants to the FAST-NUCES Flex Student Portal, enabling students to query their academic data including attendance, marks, transcript, and fee reports through natural language conversations.5
- FlicenseNot gradedqualityDmaintenanceEnables students to securely access and manage their academic data from Isparta University's OBS system, including grades, transcripts, announcements, and course information through natural language queries.1
Related MCP Connectors
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Connect e-commerce and marketing data to AI assistants via MCP.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/atesahmet0/metu-sais-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server