# İTÜ MCP

This MCP server connects İTÜ services to an AI assistant. Use it to check courses, grades, assignments, schedules, and library records.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 14
- Author: yatuk
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/yatuk/itu-mcp
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/itu-mcp

## What it does

İTÜ MCP lets an assistant read Ninova, OBS, Portal, Moodle, course websites, İTÜ Mail, the library catalogue, and an archive of past courses. You can ask about upcoming work, grades, registration status, timetable details, open seats, announcements, or library holdings. It can also create an `.ics` calendar file and watch for a seat to become available.

The server runs on your computer and is read-only by default. Uploading an assignment and saving a registration draft require confirmation. Private records need İTÜ credentials; the password stays on the machine and is sent only to İTÜ’s login page. Python 3.11 or newer and `uvx` are required.

Claude Code adds the server with `claude mcp add`; setup commands are also provided for Codex, Cursor, GitHub Copilot, and Gemini CLI. The project is unofficial, so access still depends on İTÜ services and your account.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `NINOVA_USERNAME`, `NINOVA_PASSWORD`, `NINOVA_MAIL_USERNAME`, `NINOVA_MAIL_PASSWORD`, `NINOVA_LIBRARY_NAME`, `NINOVA_LIBRARY_ID`, `NINOVA_LIBRARY_PIN` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env NINOVA_USERNAME=<NINOVA_USERNAME> --env NINOVA_PASSWORD=<NINOVA_PASSWORD> --env NINOVA_MAIL_USERNAME=<NINOVA_MAIL_USERNAME> --env NINOVA_MAIL_PASSWORD=<NINOVA_MAIL_PASSWORD> --env NINOVA_LIBRARY_NAME=<NINOVA_LIBRARY_NAME> --transport stdio itu-mcp -- uvx itu-mcp
```
Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from itu-mcp <command>

### Codex

**Platform CLI**
```bash
codex mcp add itu-mcp --env NINOVA_USERNAME=<NINOVA_USERNAME> --env NINOVA_PASSWORD=<NINOVA_PASSWORD> --env NINOVA_MAIL_USERNAME=<NINOVA_MAIL_USERNAME> --env NINOVA_MAIL_PASSWORD=<NINOVA_MAIL_PASSWORD> --env NINOVA_LIBRARY_NAME=<NINOVA_LIBRARY_NAME> -- uvx itu-mcp
```
Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from itu-mcp <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "itu-mcp": {
            "command": "uvx",
            "args": [
                "itu-mcp"
            ],
            "env": {
                "NINOVA_USERNAME": "<NINOVA_USERNAME>",
                "NINOVA_PASSWORD": "<NINOVA_PASSWORD>",
                "NINOVA_MAIL_USERNAME": "<NINOVA_MAIL_USERNAME>",
                "NINOVA_MAIL_PASSWORD": "<NINOVA_MAIL_PASSWORD>",
                "NINOVA_LIBRARY_NAME": "<NINOVA_LIBRARY_NAME>"
            }
        }
    }
}
```
Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from itu-mcp <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "itu-mcp": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "itu-mcp"
            ],
            "env": {
                "NINOVA_USERNAME": "<NINOVA_USERNAME>",
                "NINOVA_PASSWORD": "<NINOVA_PASSWORD>",
                "NINOVA_MAIL_USERNAME": "<NINOVA_MAIL_USERNAME>",
                "NINOVA_MAIL_PASSWORD": "<NINOVA_MAIL_PASSWORD>",
                "NINOVA_LIBRARY_NAME": "<NINOVA_LIBRARY_NAME>"
            }
        }
    }
}
```
Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from itu-mcp <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e NINOVA_USERNAME=<NINOVA_USERNAME> -e NINOVA_PASSWORD=<NINOVA_PASSWORD> -e NINOVA_MAIL_USERNAME=<NINOVA_MAIL_USERNAME> -e NINOVA_MAIL_PASSWORD=<NINOVA_MAIL_PASSWORD> -e NINOVA_LIBRARY_NAME=<NINOVA_LIBRARY_NAME> itu-mcp uvx itu-mcp
```
Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from itu-mcp <command>

## When to use it
- check upcoming assignment deadlines
- review grades and graduation progress
- find a course section with open seats
- look up schedules and course announcements
- search the İTÜ library catalogue

## Example prompts
- List my upcoming Ninova assignments and their due dates.
- Check my OBS grades and calculate the GPA for the grades I provide.
- Find open sections for `MAT 210E` and create an `.ics` calendar file.

## Similar
- [dx-cli](https://affpapa.org/en/nevibecode/skills/dx-cli.md) — skill · 1100 installs
- [kpi-dashboard-design](https://affpapa.org/en/nevibecode/skills/aj-geddes-kpi-dashboard-design.md) — skill · 520 installs
- [executive-dashboard-generator](https://affpapa.org/en/nevibecode/skills/executive-dashboard-generator.md) — skill · 409 installs
- [fantasy-lineup-optimizer](https://affpapa.org/en/nevibecode/skills/fantasy-lineup-optimizer.md) — skill · 395 installs
- [airtable](https://affpapa.org/en/nevibecode/skills/membrane-airtable.md) — skill · 374 installs
- [aa-executive-briefing](https://affpapa.org/en/nevibecode/skills/aa-executive-briefing.md) — skill · 329 installs

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
