vit-bhopal-vtop-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VTOP_BASE_URL | No | Base URL for the VTOP server. | https://vtop.vitbhopal.ac.in/vtop |
| VTOP_PASSWORD | Yes | Your VTOP password. | |
| VTOP_USERNAME | Yes | Your VTOP registration number (username). | |
| VTOP_PROXY_URL | No | Residential proxy URL. Useful to avoid Google reCAPTCHA when running from datacentre IPs. | |
| VTOP_CAPTCHA_DIR | No | Directory where captcha JPEG files are written. Defaults to %TEMP%\vtop-mcp-captcha\ on Windows. | |
| VTOP_CAPTCHA_OPEN | No | Set to "1" to make the server open the captcha image in a viewer automatically. Experimental; for local single-user use only. |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_captchaA | Step 1 of login: fetch a CAPTCHA image from VTOP. Returns the image AND saves it to a file. CRITICAL - never invent the characters. If no image is rendered above, you cannot read the captcha: do NOT guess. Open |
| loginA | Step 2 of login: submit credentials + the captcha you just OCR'd. Username/password are optional — if VTOP_USERNAME and VTOP_PASSWORD are set as env vars on the MCP server, omit them and the server uses the stored values. Only ask the user for credentials if the server reports they're not configured. Failures return structuredContent.error with a |
| session_statusA | Report the current VTOP session state: whether a session is active, the registration number, whether credentials are configured, and (with |
| get_semestersA | Get list of available semesters (id + name). IMPORTANT ORDERING: VTOP returns these NEWEST-FIRST -- index 0 is the current (in-progress) term and the LAST element is the OLDEST. To reach the most recent COMPLETED term use index 1, not the last element; taking the last element silently returns the student's first semester. Most data tools accept the semesterId, but they also default to the current semester if omitted — so you usually don't need to call this unless the user asks about a specific past semester. On failure the response carries structuredContent.error.code; if it is NOT_AUTHENTICATED, follow the error's |
| logoutA | Logout from VTOP and clear the session. |
| get_attendanceA | Get attendance records for all courses (attended/total/percentage per course). If the response contains NOT_AUTHENTICATED, immediately call get_captcha then login then retry this tool. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if login replies that credentials are missing, ask the user for their VTOP username and password and call login again with them. semesterId is optional; omit for current semester. Requires login. |
| get_attendance_detailA | Per-class attendance for one course: every posted session with its date and outcome (Present / Absent / On Duty). Ask 'was I present on 2026-10-12 in BCSE302L?' with courseCode + date; omit date to list all posted sessions. A date with no row means VTOP posted nothing for it — NOT POSTED, never absent. If the response contains NOT_AUTHENTICATED, call get_captcha then login then retry. Requires login. |
| get_timetableA | Get class timetable: registered courses with slots, venues, faculty and credits, plus the actual weekly schedule. Each course carries a |
| get_marksA | Get internal marks/assessment scores: per component the raw marks, max marks, weightage (the marks that component contributes to the internal total), max weightage, class average and status. Use get_internal_totals instead when you want the TOTAL for each subject rather than the component breakdown. semesterId is optional; omit for current semester. If the response contains NOT_AUTHENTICATED, follow the error's |
| get_internal_totalsA | TOTAL internal marks for every subject, out of the 100-mark course scale (internal assessment 40 = lab/class 35 + attendance 5; CAT-I 15 + CAT-II 15 = 30; Term End Examination 30). ORDER MATTERS when reporting: give every subject with its full component breakdown FIRST, then the totals at the END. For each course: |
| get_exam_scheduleA | Get exam schedule (CAT1/CAT2/FAT dates, timings, venues, seat numbers, row/col). If the response contains NOT_AUTHENTICATED, immediately call get_captcha then login then retry this tool. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if login replies that credentials are missing, ask the user for their VTOP username and password and call login again with them. semesterId is optional; omit for current semester. Requires login. |
| get_grade_historyA | Get cumulative grade history (CGPA, total earned credits, per-semester GPA + courses + grades, grouped by exam month). If the response contains NOT_AUTHENTICATED, immediately call get_captcha then login then retry this tool. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if login replies that credentials are missing, ask the user for their VTOP username and password and call login again with them. Requires login. |
| get_semester_gradesA | Get grades for a specific semester (course-wise letter grades + GPA). IMPORTANT: for a semester still in progress VTOP publishes no results, and this tool then returns |
| get_profileA | Get student profile (name, registration number, application number, program, branch, school, email, phone, blood group). If the response contains NOT_AUTHENTICATED, immediately call get_captcha then login then retry this tool. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if login replies that credentials are missing, ask the user for their VTOP username and password and call login again with them. Requires login. |
| get_curriculum_progressA | Get degree progress: total credits earned vs required (and remaining), per-category breakdown (Foundation Core, Discipline Core, Discipline Electives, Open Electives, Projects/Internship, etc.), per-basket completion (HSM Elective, Foreign Language, Extra-curricular, ...), CGPA, and grade-letter counts across all semesters. Use this for any 'how many credits left?', 'how close am I to graduating?', 'which baskets do I still need?', or 'how many of each grade have I gotten?' questions. If the response contains NOT_AUTHENTICATED, immediately call get_captcha then login then retry this tool. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if login replies that credentials are missing, ask the user for their VTOP username and password and call login again with them. Requires login. |
| calculate_attendanceA | Attendance / bunk calculator. Per course: current %, whether you're safe (strictly above 74.0% by default — 74.0 is debarred; override via targetPercent), how many more classes you can skip ('bunkBuffer'), and how many to attend to recover ('classesToRecover'). For the key real use case — 'I'm at the line; if I skip today can I still make 75% by the time attendance closes?' — pass |
| get_today_classesA | List the classes scheduled for today (or a given date) with their time and venue, accounting for the academic calendar — returns a holiday/no-class result on non-instructional days, and follows the correct day-order on working Saturdays (e.g. a Saturday running the Thursday timetable). Pass |
| get_calendarA | Look up the academic calendar: holidays, events (e.g. TechnoVIT), working Saturdays / day-orders, and which days are instructional. Use |
| get_semester_infoA | Term bounds for a semester: id, name, first/last instructional day from the academic calendar, instructional-day totals, days remaining, and whether teaching is over. When teachingOver is true, no more classes can occur — attendance figures are final (locked), not projectable. Use this to answer 'when does my semester end?' or 'how many teaching days are left?'. Requires login. |
| check_pass_eligibilityA | Answer 'will I pass this course?' for every subject, using VIT Bhopal's actual pass rules rather than guessing. ALWAYS quote BOTH scales when asked what to score. Each CAT is a 50-mark paper needing 20, which is worth 6 of the 15 that CAT carries on the 100-point course scale. The TEE (FAT) is a 100-mark paper worth 30 of 100, and must reach 40 - worth 12 of those 30. So the canonical answer is '20/50 in each CAT, worth 6 of 15 each, and 40/100 in the TEE, worth 12 of 30'. Rules applied: passing is 80 raw marks out of 200 (CAT-I 20 + CAT-II 20 + TEE 40), equivalently CAT-I + CAT-II + TEE >= 80 raw. The TEE's own end goal is 40 of 100, and whatever the two CATs fall SHORT of 40 BETWEEN THEM is added to it - this is net, so a CAT above 20 offsets one below it (10 and 10 needs the TEE at 60, but 30 and 10 needs only 40). There is no re-test. Attendance must be >= 75.0% exactly to sit any exam. READ |
| get_student_profileA | Full student profile: the five accordion sections of VTOP's profile page (personal, educational, family, proctor, hostel information), exactly as VTOP groups them with verbatim values. Use this instead of get_profile when you need anything beyond name/programme/branch/email/phone — date of birth, addresses, board/school, parents, proctor contact, hostel block and room. Privacy: this returns sensitive PII verbatim — keep it in the student's own session, don't paste it elsewhere. If the response contains NOT_AUTHENTICATED, immediately call get_captcha then login then retry this tool. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if login replies that credentials are missing, ask the user for their VTOP username and password and call login again with them. Requires login. |
| get_acknowledgmentsA | Admission document checklist: which joining documents VTOP shows as Submitted, Not Applicable, or Not Submitted (e.g. mark lists, transfer/migration/conduct certificates, affidavits). A 'Not Submitted' line is actionable — it names a document the student still owes. Read-only. Requires login. |
| get_proctor_detailsA | Proctor (faculty mentor) contact details: faculty id, name, designation, school, department, cabin, email, intercom and mobile. Same data as the proctor section of get_student_profile, via the standalone proctor page. Read-only. Requires login. |
| get_fee_receiptsA | Fee payment receipts: receipt number, date, amount and campus for every payment VTOP has on record. Pass receiptNo (from a previous call) to get that receipt's detail breakdown instead of the list. Amounts are as printed; no currency conversion is applied. Read-only. Requires login. |
| get_curriculum_basketsA | Programme curriculum baskets: every category (Programme Core, Programme Elective, University Core/Electives, …) with its courses — code, title, type, version, L/T/P/J and credits. Each row also carries vtopMarkedCompleted, VTOP's own completion marking, reported verbatim. Use get_pending_subjects when you want completed-vs-left rather than the raw baskets. Read-only. Requires login. |
| get_course_basketA | Which curriculum basket a course belongs to: pass a course code (e.g. 'CSD3002') or a title fragment (e.g. 'salesforce') and get back every matching catalogue course with its basket (Programme Core, Programme Elective, …), credits and completion state. Works for courses you have never taken — it reads the programme catalogue, not your records. Read-only. Requires login. |
| get_pending_subjectsA | Subjects still to complete: the curriculum baskets minus grade-history passes, with names and credits. Completion is decided ONLY by course code against the latest grade on record (a pass is any grade except F; N never counts as a pass) — period labels are never compared, because timetable labels are instructional semesters while grade-history labels are result-publication months. VTOP's own row marking is reported alongside, and any disagreement lands in discrepancies rather than being resolved silently. For elective baskets only N of M credits are required, so every uncompleted basket course is listed and the category totals say how far short. Read-only. Requires login. |
| get_leave_type_rulesA | Diagnostic: ask VTOP what rules apply to each hostel leave type (max days, limits, required fields) by triggering the same request the leave-type dropdown makes when you change the selection. READ-ONLY - this never submits a leave application. It exists because the day limits are server-side rules that are otherwise only discoverable by submitting and being rejected (e.g. HOME TURN caps at 14 days). Omit leaveCode to probe every type. Returns the raw text VTOP replies with for each, so limits can be read directly rather than guessed. |
| get_leave_typesA | List the hostel leave types VTOP currently offers, read from the live leave form (so a newly added or retired type is reflected rather than assumed). Use the CODE, not the label. Also states the 6 PM in-time rule: it applies to OG1 (Day Outing) only, and 18:00 itself is allowed. Requires login. |
| get_leave_statusA | Get hostel leave applications and their approval status: leave id, type, place, from/to, status (reported verbatim, e.g. REQUEST RAISED / PROCTOR APPROVAL PENDING / REQUEST APPROVED), approver remarks, and gate-pass OUT/IN flags where VTOP publishes them. Read-only. Requires login. |
| get_leave_historyA | Full hostel leave history: every leave application on record — id, type, place, reason, from/to, status, approver remarks, and gate-pass OUT/IN state. Use this for 'what leaves have I taken?' or past-leave questions; use get_leave_status for the current state. Statuses are reported exactly as VTOP prints them. Read-only. Requires login. |
| apply_leaveA | Apply for hostel leave on VTOP. THIS WRITES TO VTOP and creates a real request for your proctor, so it is deliberately two-step. Call 1 (preview): pass the details with confirm OMITTED or false. Nothing is sent. You get back the normalised values, every rule that fired, any classes the leave would make you miss, and a previewToken. Call 2 (submit): repeat the SAME details plus confirm=true and the previewToken. The token is server-signed, single-use and expires after 10 minutes, so if anything changed since the preview the submission is refused and you must preview again. Always show the user the preview and get their agreement before calling with confirm=true. Never invent a previewToken or set confirm=true on a first call. Rules enforced before submitting: OG1 (Day Outing) must return by 18:00 inclusive; dates must be ISO YYYY-MM-DD and not in the past; to-date cannot precede from-date; visiting place is required and capped at 150 characters; reason is required. Times are normalised, so '6:00 PM' becomes '18:00'. Requires login. |
| cancel_leaveA | Withdraw a hostel leave application on VTOP. THIS WRITES TO VTOP, so it is deliberately two-step like apply_leave. Call 1 (preview): pass leaveId with confirm OMITTED or false. Nothing is withdrawn. You get back the leave's current record — type, dates, and approval status exactly as VTOP prints it — plus whether VTOP publishes a withdraw control for it, and a previewToken. Call 2 (withdraw): repeat the SAME leaveId plus confirm=true and the previewToken. The token is bound to this exact leave id and caller. Always show the user the preview — including the approval state — and get their agreement before calling with confirm=true. An already-approved leave may no longer offer a withdraw control; the preview says so. Never invent a previewToken or set confirm=true on a first call. Requires login. |
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 33 tools
Most tools target clearly distinct resources and actions, and the descriptions proactively resolve near-overlaps (e.g. get_profile vs get_student_profile, get_marks vs get_internal_totals, get_leave_status vs get_leave_history, get_semesters vs get_semester_info). A few clusters remain somewhat confusable (the four curriculum tools and four marks/grades tools), but the descriptions generally steer correctly.
The set is uniformly snake_case with predictable verb_noun naming (get_*, apply_leave, cancel_leave, calculate_attendance, check_pass_eligibility). The only deviations are the verb-less auth tools (login, logout, session_status), which are reasonable given their role.
33 tools is heavy and sits in the over-large range, with some genuine redundancy (get_profile/get_student_profile, get_marks/get_internal_totals, three overlapping curriculum tools). However, the portal's breadth (auth, attendance, marks, curriculum, profile, fees, hostel leave, exams) justifies a large surface more than most.
Coverage is broad and lifecycle-aware: read access across attendance, marks, grades, curriculum, profile, fees and exams, plus a full two-step apply/cancel leave flow and a full auth flow. Only minor gaps exist (write operations for functions outside hostel leave, no exam re-evaluation/registration), which agents can work around.