İTÜ Ninova ve OBS hesabını Claude, Cursor, Codex ve diğer MCP istemcilerine bağla
NinovaLMS |
OBSÖğrenci portalı |
MCPClaude · Cursor · Codex |
| Dersler · dosyalar · ödevler duyurular · teslim tarihleri |
Kayıt · notlar transkript · danışman · staj |
Doğal dilde sor (TR / EN) |
İTÜ MCP bilgisayarında çalışır ve kendi İTÜ hesabını yapay zeka asistanlarına bağlar. Kimlik bilgilerinle (genelde ad@itu.edu.tr) giriş yapar, Ninova ve OBS üzerinden veri okur, Model Context Protocol üzerinden yapılandırılmış araçlar sunar.
| İhtiyacın | İTÜ MCP cevabı |
|---|---|
| "Bu hafta hangi ödevlerin teslimi var?" | Ninova ödev ve teslim tarihi araçları |
| "X dersinin notları / yoklaması?" | OBS ara not, harf notu ve yoklama |
| "Transkript / danışman / staj?" | OBS profil, danışman, staj, transkript PDF |
| "PDF özetle" | İndirme + read_resource_text (PDF/DOCX) |
| "Ödev yükle" | İsteğe bağlı yükleme, confirm=true şart |
Önce yerel. Şifren cihazda kalır; yalnızca İTÜ giriş / Ninova / OBS adreslerine gönderilir. Üçüncü taraf bir sunucuya kimlik bilgisi depolanmaz.
İTÜ ile resmi bağlantısı yoktur. Yalnızca kendi hesabınla kullan.
Claude Desktop üzerinden doğal dilde soru sorma örnekleri:
OBS: dönem kayıtlı dersler ve program
Ninova: son duyurular ve mesaj panosu özeti
flowchart LR
subgraph istemciler["MCP İstemcileri"]
claude["Claude Desktop"]
claude_code["Claude Code"]
cursor["Cursor"]
codex["Codex"]
end
subgraph sunucu["itu-mcp (Python 3.11+)"]
mcp["MCP Sunucu<br/>(FastMCP · stdio / HTTP)"]
ninova_client["NinovaClient<br/>SSO · HTML parse"]
obs_client["ObsClient<br/>JWT · JSON API"]
obs_public["ObsPublicClient<br/>kimliksiz · HTML/JSON"]
state["Durum<br/>çerez · anlık görüntü · indirme"]
end
subgraph itu["İTÜ Sunucuları"]
ninova["ninova.itu.edu.tr<br/>(LMS · HTML)"]
giris["girisv3.itu.edu.tr<br/>(İTÜ SSO giriş)"]
obs["obs.itu.edu.tr<br/>(öğrenci JSON API)"]
obs_pub["obs.itu.edu.tr/public<br/>(açık katalog · program)"]
end
istemciler -->|"MCP araçları"| mcp
mcp --> ninova_client
mcp --> obs_client
mcp --> obs_public
ninova_client --> giris
ninova_client --> ninova
obs_client --> giris
obs_client --> obs
obs_public --> obs_pub
ninova_client --> state
obs_client --> state
obs_public --> state
| Katman | Rol |
|---|---|
| MCP sunucu | Araç listesi, sade yanıtlar, CLI (--check-auth, --list-tools) |
| Ninova istemcisi | Oturum + HTML ayrıştırma (duyuru, dosya, ödev, yükleme formu) |
| OBS istemcisi | SSO → /ogrenci/auth/jwt → /api/ogrenci/... |
| OBS public istemcisi | Kimliksiz → /public/DersProgram, /public/DersBilgi, /public/GenelTanimlamalar/... |
| Durum | İsteğe bağlı çerez önbelleği, izleme anlık görüntüleri, indirmeler (~/.ninova_state) |
pipx install itu-mcp
# veya: pip install --user itu-mcp
# kaynaktan:
# git clone https://github.com/yatuk/itu-mcp.git
# cd itu-mcp && pip install -e .cp .env.example .env
# NINOVA_USERNAME=ad.soyad@itu.edu.tr
# NINOVA_PASSWORD=********Kullanıcı adı genelde İTÜ e-posta adresindir; yalnızca yerel kısım değil.
itu-mcp --version
itu-mcp --check-auth
itu-mcp --list-toolsClaude Code
claude mcp add itu itu-mcp \
-e NINOVA_USERNAME=ad.soyad@itu.edu.tr \
-e NINOVA_PASSWORD=sifrenCodex CLI
codex mcp add itu \
--env NINOVA_USERNAME=ad.soyad@itu.edu.tr \
--env NINOVA_PASSWORD=sifren \
-- itu-mcpClaude Desktop / Cursor: docs/installation.md ve examples/ klasörüne bak.
Bitti. İstemciyi yeniden başlat ve sor: "Ninova'daki derslerimi listele" veya "OBS'te bu dönem kayıtlı derslerim?"
- "Bu hafta hangi ödevlerimin teslimi var?"
- "EEF 211E sınıf dosyalarındaki PDF'i oku."
- "OBS'te 2025-2026 Bahar kayıtlı derslerim neler?"
- "CEN 354E ara notlarım?"
- "Danışmanım kim? Staj bilgilerimi göster."
- "Transkript PDF indir."
- "BLG bölümünde bu dönem hangi dersler açılmış, kontenjan durumu ne?"✨
- "BLG 223E'yi almak için önce hangi dersleri almam lazım?"✨
✨ Kimlik gerektirmez — .env olmadan da çalışır.
| Ninova (LMS) oturum gerekir |
OBS (portal) oturum gerekir |
OBS Public kimlik gerekmez ✨ |
auth_status · list_coursesget_course_* · sync_all_coursesget_upcoming_deadlinesread_resource_text · submit_assignment
|
obs_auth_status · obs_get_profileobs_list_registered_coursesobs_get_course_grades · obs_get_attendanceobs_get_advisor · obs_download_transcriptobs_get_schedule · obs_get_internships
|
obs_search_coursesobs_get_course_prerequisitesget_public_course_scheduleget_public_course_prerequisites
|
Tam araç listesi, Docker, uzak HTTP, ortam değişkenleri: docs/advanced.md.
| Yap | Yapma |
|---|---|
| Yalnızca kendi İTÜ hesabını kullan | .env veya çerezleri commit etme |
| Yerel stdio MCP tercih et | Uzak MCP URL / API anahtarını paylaşma |
submit_assignment yalnızca confirm=true ile |
Önizlemeyi okumadan ödev yükleme |
Uzak kurulumda NINOVA_REMOTE_API_KEY kullan |
Gizli path ve anahtar olmadan public açma |
Ayrıntılar: docs/security.md.
OBS profil araçları TCKN / telefonu varsayılan olarak gizler (include_sensitive=true ile açılır).
export NINOVA_COURSE_CACHE_TTL_SECONDS=60
export NINOVA_REQUEST_DELAY_MS=120
export NINOVA_SESSION_PERSIST=1
export NINOVA_COMPACT_DEFAULT=0
export NINOVA_ALLOW_UPLOADS=1
export NINOVA_OBS_BASE_URL=https://obs.itu.edu.tr
export NINOVA_OBS_PUBLIC_CACHE_TTL_SECONDS=3600
export NINOVA_PUBLIC_SCHEDULE_CACHE_TTL_SECONDS=60.env.example ve docs/advanced.md dosyalarına bak.
git clone https://github.com/yatuk/itu-mcp.git
cd itu-mcp
python -m venv .venv
# Windows: .venv\Scripts\activate
source .venv/bin/activate
pip install -e ".[playwright]"
python -m unittest discover -s tests -v| Kaynak | URL |
|---|---|
| Kurulum | docs/installation.md |
| Gelişmiş / araçlar | docs/advanced.md |
| Güvenlik | docs/security.md |
| Değişiklik günlüğü | CHANGELOG.md |
| Sorunlar | github.com/yatuk/itu-mcp/issues |
Bu proje, Hikmet Gultekin tarafından yazılan orijinal ninova-mcp çalışmasının üzerine kurulmuştur. İlk açık kaynak, kimlik bilgisiyle çalışan İTÜ Ninova MCP sunucusudur (LMS giriş, HTML ayrıştırma, izleme, .mcpb paketleme).
İTÜ MCP bu temeli genişletir: OBS öğrenci portalı API'leri, PDF metin okuma, güvenli ödev yükleme, oturum kalıcılığı, uzak API anahtarı ve bu depo altında yeniden paketleme.
MIT. İstanbul Teknik Üniversitesi ile resmi bağlantısı yoktur.
