Ninova MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NINOVA_BASE_URL | No | Base URL for Ninova | https://ninova.itu.edu.tr |
| NINOVA_ENV_FILE | No | Absolute path to .env file | |
| NINOVA_PASSWORD | Yes | Your ITU Ninova password | |
| NINOVA_USERNAME | Yes | Your ITU Ninova username | |
| NINOVA_STATE_DIR | No | Absolute path to state directory | |
| NINOVA_REMOTE_HOST | No | Remote HTTP server host | 0.0.0.0 |
| NINOVA_REMOTE_PORT | No | Remote HTTP server port | 8000 |
| NINOVA_ALLOWED_HOSTS | No | Comma-separated allowed hosts | |
| NINOVA_ALLOWED_ORIGINS | No | Comma-separated allowed origins | |
| NINOVA_PUBLIC_BASE_URL | No | Public base URL for remote server | |
| NINOVA_REMOTE_MCP_PATH | No | Secret path for remote MCP endpoint | |
| NINOVA_DISABLE_PLAYWRIGHT_FALLBACK | No | Set to '1' to disable Playwright fallback |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_statusA | Check whether Ninova credentials are configured and whether a fresh session can be created. |
| refresh_sessionA | Force a new login with NINOVA_USERNAME and NINOVA_PASSWORD. |
| get_dashboardA | Read the Ninova dashboard and summarize courses, recent announcements, assignments, and messages. |
| list_coursesA | List all discovered Ninova courses from the dashboard. |
| get_coursesA | Return all courses visible in the Ninova dashboard. |
| get_course_announcementsC | Return announcements for a specific Ninova course. |
| get_course_class_filesC | List files and folders under the Ninova 'Sınıf Dosyaları' section for a course. |
| get_course_lesson_filesB | List files and folders under the Ninova 'Ders Dosyaları' section for a course. |
| get_course_assignmentsC | Return a course's assignment list together with each assignment's full detail page. |
| get_course_infoC | Return structured information from a course's 'Sınıf Bilgileri' page. |
| get_course_sectionsC | List the direct course routes exposed on the Ninova course home page. |
| get_course_gradesB | Read the Ninova 'Notlar' page for a course. |
| get_course_message_boardC | Read the Ninova 'Mesaj Panosu' page for a course. |
| get_course_attendanceC | Read the Ninova 'Yoklama' page for a course. |
| get_course_remote_learningC | Read the Ninova 'Uzaktan Eğitim' page for a course. |
| get_course_overviewB | Return a combined view of a course's sections, announcements, assignments, files, grades, message board, attendance, and remote learning routes. |
| get_dashboard_announcementsC | Return the announcements listed under the Ninova dashboard's aggregated announcements page. |
| get_dashboard_assignmentsC | Return the assignments listed under the Ninova dashboard's aggregated assignments page, including full details. |
| sync_all_coursesA | Fetch all visible courses, store a tracking snapshot, and return newly detected changes since the previous sync. |
| get_updatesC | Read the stored Ninova tracking history and return recent detected changes. |
| get_upcoming_deadlinesC | Return assignments whose submission deadline is approaching based on the stored tracking snapshot. |
| read_pageC | Fetch any Ninova page and return a structured summary of text, headings, links, tables, and attachments. |
| crawl_courseB | Inventory pages and downloadable resources inside a Ninova course tree. |
| download_resourceB | Download a Ninova file or other authenticated resource to disk. |
| snapshot_pageB | Save a structured snapshot of a Ninova page for later comparison. |
| diff_snapshotC | Compare the current state of a Ninova page against a previously stored snapshot. |
| obs_auth_statusA | Check whether the ITU account can sign in to OBS (obs.itu.edu.tr) via girisv3 single sign-on. |
| obs_refresh_sessionB | Force a new OBS login and issue a fresh API token. |
| obs_get_profileB | Return the student's personal details, student number, faculty, department, advisors, and academic programs. |
| obs_list_semestersA | List every academic semester available for this student, with the internal semester id and term code. |
| obs_get_graduation_progressB | Return 'Mezuniyetime Ne Kaldı': the course plan requirements, credits earned vs. required, GPA and internship requirements, every completed course, and every course still missing. |
| obs_get_academic_standingB | Return the semester-by-semester GPA, semester GPA, credit, and class-level history. |
| obs_get_semester_statusB | Return the academic status snapshot (class level, credits, GPA) for one semester. |
| obs_get_gradesA | Return the final letter grades for one semester, with grade points and pass/fail flags. |
| obs_get_interim_gradesB | Return published in-term grades (midterm, quizzes, final) for a semester's courses, each with the class mean, standard deviation, the student's rank, and the component weight — enough to estimate a letter grade before it is posted. |
| obs_get_course_historyC | Return every graded course across every semester, plus pass/fail counts and the list of failed courses. |
| obs_get_registered_coursesB | Return the courses the student is registered to for one semester, with CRN, place, and time. |
| obs_get_scheduleB | Return the weekly class schedule for one semester, sorted by day and start time. |
| obs_get_exam_scheduleC | Return the final exam dates, times, and rooms for one semester. |
| obs_get_attendanceA | Return the attendance record for one registered class, identified by its OBS class id. |
| obs_get_registration_statusA | Return whether course registration is currently open for the student, per semester. |
| obs_get_internshipsA | Return the student's recorded internships. |
| obs_get_announcementsC | Return announcements published in OBS. |
| obs_get_transcriptB | Download the official transcript preview PDF from OBS and save it to disk. |
| obs_check_prerequisitesB | Decide which courses the student may register for, by evaluating each course's published prerequisite expression against their own passed courses, expanded through the course-plan equivalences that cover renamed course codes. Prerequisites reflect the programme's current definitions even for an older plan. Defaults to every course still required for graduation. |
| obs_get_registration_optionsB | For every course still required for graduation: which codes satisfy it (including renamed equivalents), whether any of them is offered this term with CRNs and meeting times, and whether the prerequisites are met. The single call to drive course-registration planning. |
| obs_project_gpaA | Project the cumulative GPA under hypothetical grades, e.g. ["YZV 201E:CC", "ING 201A:BB"]. Models ITU's rule that only the last attempt of a course counts and that equivalent course codes are the same course. Reports whether the reconstruction still matches the GPA OBS itself reports, so a silent model drift is visible. |
| obs_get_elective_poolB | Return every course that can fill one elective slot of the student's course plan, by group id. |
| obs_get_elective_optionsA | For every elective slot the student has not yet filled: the pool of eligible courses, which of them run this term with CRNs and times, and whether the prerequisites are met. |
| obs_api_getA | Read any /api/ogrenci/... OBS endpoint directly and return the raw JSON. Read-only escape hatch. |
| obs_public_active_termA | Return the term whose course schedule is currently published on the public OBS pages, with its term code. This is usually the upcoming term, not the one registration still calls current. No login required. |
| obs_public_get_prerequisitesA | Return the published prerequisite expression and minimum completed credits for every course in a branch. These reflect the programme's current definitions, not any one course plan. No login required. |
| obs_public_get_equivalencesA | Return which courses count in place of a plan course, for one course plan and branch. This is how renamed course codes are reconciled across cohorts. No login required. |
| obs_public_list_plansA | List the course plans published for a programme, with their plan ids. No login required. |
| obs_public_registration_termB | Return the term the registration system reports as current, which lags the published schedule. No login required. |
| obs_public_list_branchesA | List every course branch code (BLG, YZV, MAT, ...) published for a program level. No login required. |
| obs_public_get_scheduleA | Return every published section for a course branch: CRN, meeting days and times, instructor, room, quota, and remaining seats. No login required. |
| obs_public_find_coursesB | Look up several courses at once by code and return their published sections. No login required. |
| obs_public_check_conflictsA | Check a candidate set of sections for time clashes and return the resulting weekly timetable. Each selection is {code, crn}; the CRN can be omitted when a course has only one section. |
| hocametre_search_instructorsA | Search notkutusu.com's public 'hocametre' instructor ratings by (partial) instructor name and return matching profiles with their slugs. No login required; the same person may appear as several duplicate profiles. |
| hocametre_get_instructorA | Return one instructor profile's anonymous student ratings (note sharing, helpfulness, homework load, attendance strictness, teaching skills; each 1-5 with vote counts) and, optionally, the newest student comments. No login required. |
| hocametre_lookup_instructorsA | Resolve several instructor names (as printed in the OBS schedule) to their hocametre ratings. Returns every matching profile, most-voted first, plus a vote-weighted 'combined' score because the same instructor is often split across duplicate profiles. No login required. |
| hocametre_rate_course_sectionsA | For each given course code, list every section published in the public OBS schedule for the upcoming term (CRN, times, room, quota, remaining seats) together with its instructor's hocametre ratings, so sections of the same course can be compared by instructor. No login required. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 63 tools
The server mixes three domains (Ninova LMS, OBS student records, and public hocametre ratings) with many overlapping tools: obs_get_registered_courses vs obs_get_schedule vs obs_get_registration_options, get_course_* vs crawl_course vs read_page, and auth_status vs obs_auth_status vs refresh_session vs obs_refresh_session. Several tools have similar purposes (e.g., get_dashboard_announcements vs get_course_announcements, obs_get_elective_pool vs obs_get_elective_options) and the distinction between Ninova and OBS is not obvious from names alone.
There is a consistent verb_noun pattern within each domain (list_courses, crawl_course, download_resource; obs_get_*, obs_public_*; get_course_*), but the three domains use different prefixes and styles: bare verbs (crawl_course, download_resource), obs_* and obs_public_* with get_/list_/check_/find_ verbs, and get_* for Ninova. The naming is readable but the mixed prefixes and inconsistent verb choices (list vs get vs crawl vs read) create moderate inconsistency.
63 tools is far beyond the typical well-scoped MCP server. While the server covers three distinct domains (Ninova LMS, OBS student portal, public hocametre), the count is excessive and many tools are narrow page-readers (get_course_announcements, get_course_class_files, get_course_lesson_files, get_course_info, get_course_sections, get_course_grades, get_course_message_board, get_course_attendance, get_course_remote_learning) that could be consolidated.
For the apparent domains, the coverage is quite thorough: Ninova has course listing, file download, announcements, assignments, grades, attendance, and change tracking; OBS has profile, grades, schedule, registration, prerequisites, electives, GPA projection, and an API escape hatch; public data has schedules, prerequisites, equivalences, and instructor ratings. Minor gaps exist (e.g., no OBS course registration action, no hocametre comment posting) but the read-only/planning focus is well covered.