MCP server for VIT Chennai's VTOP student portal (tested on vtopcc.vit.ac.in only) — read attendance, marks, timetable, exam schedule, grades, and curriculum progress from any MCP client (Claude Desktop, Claude Code, Cursor, ...).
VtopMCP demonstrates solid tool design with 16 well-named, verb-prefixed tools (get_*, calculate_*) covering a cohesive student portal domain. All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas are present and typed for all tools. However, output schemas are not documented in the visible code, tool-test.ts shows fixture parsing but no explicit schema declarations in tool registration. Parameter descriptions are generally good but some lack format/constraint details (e.g., semesterId format, date ISO format not always explicit). Error handling is basic, no recovery guidance or actionable error messages visible. Tool composition is strong: tools chain well (get_semesters → get_attendance with semesterId), and parameter naming is consistent (semesterId, courseCode, targetPercent). Security is good: credentials handled via env vars (VTOP_USERNAME, VTOP_PASSWORD), not exposed as params. Overall: solid mid-tier implementation with room for output schema documentation and richer error guidance.
Calculate attendance safety (current %, buffer to bunk, classes to recover) with optional deadline projection and planned-bunk scenarios.
Calculate GPA/CGPA: current semester or explicit courses, with optional what-if scenarios and target-CGPA projection.
Calculate on-duty (OD) hours: total across all courses, per-course breakdown, remaining quota, and over-limit flag.
Fetch attendance records for all courses in a semester (attended/total/percentage by course).
Query the academic calendar (holidays, instructional days, working Saturdays, special events) with optional filtering by month, name, or holiday-only.
Fetch the VTOP login captcha image (base64 data URL). Call this before login to get the captcha text from the user.
Output schemas not documented. Tool-test.ts shows fixture parsing (e.g., p.name, p.registrationNumber) but no explicit return-type schemas in tool registration. LLMs cannot plan downstream calls without knowing response structure.
Parameter format constraints not always explicit. semesterId described as 'e.g. AP2024251' but no regex/pattern declared. ISO date params (untilDate, bunkDates) lack explicit format declaration in descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Fetch curriculum progress (credits earned/required by distribution type and basket, grade distribution).
Fetch exam schedule (exam type, date, time, venue, seat number) for a semester.
Fetch complete grade history across all semesters (CGPA, per-semester GPA, all grades).
Fetch marks/scores for all courses in a semester (CAT, FAT, lab, project components).
Fetch the student's profile (name, registration number, branch, email, etc.).
Fetch grades (letter grade, credits, GPA) for a specific semester.
List all semesters available to the logged-in student.
Fetch the weekly timetable (courses, slots, venues, faculty, timings) for a semester.
List all classes scheduled for a given date (or today if omitted), in slot order, with course codes, venues, timings.
Log in to VTOP with username, password, and captcha. Stores the session in the client for subsequent tool calls.
Error handling lacks recovery guidance. No visible error messages that tell LLMs what to do next (e.g., 'Session expired. Call login() again.'). Errors are likely raw exceptions without actionable context.
calculate_attendance has complex parameter interdependencies (untilDate required for bunkDates, plannedBunk only meaningful with untilDate) but these are not explicitly documented as mutual constraints in parameter descriptions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in tool registration. All tools are read-only but this is not formally declared, limiting client-side safety optimizations.