VTOP Bhopal MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VTOP Bhopal MCPCan I skip tomorrow's Analog class and still stay above 75%?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VTOP Bhopal MCP
Ask your AI assistant about your VIT Bhopal VTOP account: attendance, marks, timetable, exams, grades, the academic calendar, and "how many classes can I still skip?".
This is an MCP server. Once it's connected to Claude Code, Claude Desktop, Cursor or any other MCP client, you can just ask:
"What's my attendance?" "Which classes do I have on Monday?" "Can I skip any more Analog classes before the last instructional day?" "When is my Chemistry FAT, and where?" "What GPA do I need next semester to reach an 8 CGPA?"
The assistant logs in to VTOP for you (it reads the captcha itself), fetches the page, and answers in plain language.
It's a fork of VtopMCP, which was built for VIT Chennai. VIT Bhopal's VTOP looks similar but differs in many places, so this fork reworks the endpoints and parsers for Bhopal and has been tested against the live Bhopal portal.
Contents
Related MCP server: FAST-NUCES Flex Student Portal MCP Server
What it can do
Tool | What you get |
| Attended / total / percentage per course |
| Bunk calculator: how many classes you can still skip (or must attend) to stay above 75%. Give it a date and it projects real classes up to that day using your timetable and the academic calendar. |
| Classes for today or any date, with times and rooms. Knows about holidays and Saturdays that follow another weekday's timetable. |
| Registered courses with slots, venues, faculty and credits |
| CAT and other internal-assessment marks with weightage |
| CAT-1, CAT-2 and FAT dates, sessions, times, venues and seats |
| Grades and GPA for one semester |
| CGPA, credits, and every course grouped by exam month |
| Credits earned vs required, by category and basket |
| Current CGPA, GPA for a set of grades, projected CGPA, GPA needed for a target |
| On-Duty days used this semester vs the event-OD limit (see note) |
| Academic calendar: holidays, exams, events, instructional days |
| Name, registration number, programme and branch, school |
| All your semesters and their IDs |
| Used by the assistant to sign in and out |
Every per-semester tool picks the current semester automatically, so you rarely need to name one.
Quick start
You need Node.js 20.6 or newer (node -v to check) and git.
git clone https://github.com/divyarthjain/vtop-bhopal-mcp.git
cd vtop-bhopal-mcp
npm install
npm run buildSave your VTOP login (optional, recommended)
Create a file called .env in the project folder:
VTOP_USERNAME=your-registration-number
VTOP_PASSWORD=your-vtop-passwordThen make it readable only by you:
chmod 600 .env.env is in .gitignore, so it never gets committed. If you skip this step, the assistant asks for your username and password in the chat the first time it needs them.
Connect it to your assistant
Replace /path/to/vtop-bhopal-mcp with where you cloned it (run pwd inside the folder to see it).
Claude Code
claude mcp add vtop-bhopal -s user -- node --env-file=/path/to/vtop-bhopal-mcp/.env /path/to/vtop-bhopal-mcp/dist/index.jsCheck it's connected:
claude mcp list
# vtop-bhopal: ... - ✔ ConnectedStart a new session and ask "what's my attendance?".
Claude Desktop
Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"vtop-bhopal": {
"command": "node",
"args": [
"--env-file=/path/to/vtop-bhopal-mcp/.env",
"/path/to/vtop-bhopal-mcp/dist/index.js"
]
}
}
}Fully quit and reopen Claude Desktop.
Cursor, Windsurf, Cline, Zed and others
Use the same command and args as the Claude Desktop example in your client's MCP config file.
Didn't create a
.env? Drop the--env-file=…argument. The assistant will ask for your login in the chat instead.
How login works
The assistant calls
get_captcha. VTOP shows a small text captcha, which the assistant reads from the image.It calls
loginwith that captcha (plus your saved username and password).It fetches what you asked for.
Things to know:
Sessions last about an hour. VTOP signs every session out roughly 60 minutes after login, however active you are. When that happens the assistant simply logs in again, and you may see it read a new captcha.
Sometimes VTOP shows a Google reCAPTCHA instead of the text captcha. The server reloads the login page a few times until the text captcha appears, so this is usually invisible to you.
A misread captcha isn't a problem. The assistant fetches a new one and tries again.
Privacy and security
Your login only goes to VTOP. The server runs on your own computer and talks directly to
vtop.vitbhopal.ac.in. It never sends your username or password anywhere else.Nothing is stored except what you choose. Session cookies live in memory and vanish when the server stops. Your password is stored only in your own
.envfile, if you create one.Your assistant sees your data. Whatever the tools return (marks, attendance and so on) goes to the AI assistant you connected, the same as anything else you ask it about.
The test scripts save raw VTOP pages to
test-output/. Those pages contain your personal data, which is why that folder is git-ignored. Don't share it..envis plain text. Keep itchmod 600and don't commit it.
What's different from the Chennai version
VIT Bhopal's VTOP runs on the same platform as Chennai's but differs in the details. This fork changes:
Area | Chennai (upstream) | Bhopal (this fork) |
Portal |
|
|
Semester list |
|
|
Attendance | separate code / title / slot columns | combined "Course Detail" and "Class Detail" cells; header row has no |
Per-class attendance (OD) |
|
|
Exam schedule | header row first | an extra "General (Semester)" row above the header |
Semester grades | single Credits column | Credits split into L / P / J / C, plus Grading Type and Grand Total |
Grade history | grouped by exam month | same, but course codes like |
Profile branch | "Branch" field | taken from the grade-history header (the profile page only has the Class 12 stream) |
Calendar | one entry per day | every student group listed per day; only the "General" entry is used. Saturdays marked "Activities Friday" follow Friday's timetable. |
OD limit | 40 hours per semester | event-OD days (see note) |
The Bhopal-specific layouts are covered by offline test fixtures (synthetic data only) in scripts/fixtures.ts.
Troubleshooting
The assistant doesn't see the VTOP tools. Start a new session after adding the server; tools load at startup. In Claude Code, claude mcp list should show ✔ Connected.
node: bad option: --env-file. Your Node is older than 20.6. Update Node, or drop the --env-file argument and log in through the chat.
"Invalid username or password". Check .env for typos and stray spaces around =. Try logging in on the VTOP website to be sure.
Login keeps failing on the captcha. It's usually a misread; the assistant retries. If VTOP keeps serving the Google reCAPTCHA, wait a few minutes and try again.
timeout of 30000ms exceeded. VTOP is slow (common late at night or on result days). Add VTOP_TIMEOUT_MS=60000 to your .env.
A tool returns empty data while you can see it on the website. VTOP's pages change from time to time. Please open an issue with the tool name and what you expected. Don't paste raw pages or screenshots that show personal details.
Development
npm install
npm run build # compile to dist/
npm run test:parser # offline parser checks (Chennai + Bhopal fixtures)
npm run test:tools # offline tool checks with a fake VTOP clientLive checks against the real portal (needs your login in .env; you type the captcha):
npm run test:e2e # core tools, parser level
VTOP_MCP_TOOLS=1 npm run test:e2e # every tool through the real MCP server
VTOP_MENU_DUMP=1 npm run test:e2e # list VTOP's menu pages and save them
VTOP_DUMP_HTML=1 npm run test:e2e # also save raw HTML to test-output/Useful environment variables:
Variable | Default | Purpose |
| none | Auto-login. Without them the assistant asks in chat. |
|
| Portal address |
|
| Per-request timeout |
The upstream HTTP / ChatGPT-connector mode (dist/http.js) is still included but hasn't been tested on Bhopal.
Limitations
Unofficial. Not affiliated with or endorsed by VIT Bhopal. It reads the same pages your browser does; if VTOP changes them, parts may break until updated.
Read-only. It only signs in and reads pages. It never registers courses or changes anything on VTOP, and fee and payment pages are never opened.
OD limit is unconfirmed.
calculate_odcounts distinct OD days against 8, based on students' understanding that about 8–9 event ODs are allowed and DSW-approved ODs are unlimited. VTOP doesn't mark which ODs were DSW-approved, so all OD days are counted. Check the official rule with your school or the DSW office, and if you have a source, please open an issue.Bunk calculator uses 75%, treating 74.x% as safe, as upstream does. Check your own course rules.
Tested on a B.Tech account (Fall Semester 2026-27). Other programmes may see different layouts.
Credits and license
Original project: VtopMCP by Vikranth Jagdish (MIT License), itself based on how the android-vtop-chennai app talks to VTOP.
This fork is released under the Apache License 2.0. Code from the original project remains under its MIT terms; see NOTICE and LICENSE-MIT-upstream.
Available Tools
17 toolscalculate_attendanceARead-onlyIdempotent
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 untilDate (the attendance-closing date; ASK THE USER for it) and bunkDates (the days you'd skip, e.g. today's date). Using the timetable + academic calendar (holidays, working Saturdays / day-orders) it returns per course: upcomingSessions until the deadline, ifAttendAllPercent/ifSkipAllPercent, maxSkippableInRange, mustAttendInRange, canBeSafeByDeadline, and — when bunkDates is given — plannedBunk (your final % and whether you're still safe if you skip exactly those days and attend everything else). Also returns a perDay breakdown of which classes fall on each upcoming day. If the response contains NOT_AUTHENTICATED, call get_captcha then login then retry. login auto-uses VTOP_USERNAME/VTOP_PASSWORD env vars if set; if it reports credentials missing, ask the user for them. Requires login.
| Name | Required | Description | Default |
|---|---|---|---|
| bunkDates | No | Dates (ISO YYYY-MM-DD) you plan to SKIP — e.g. today. Requires untilDate. For each course the tool reports whether you'd still be safe by the closing date if you skip exactly these days and attend everything else (`plannedBunk`). | |
| untilDate | No | Attendance-closing date as ISO YYYY-MM-DD (e.g. a CAT-2 cutoff). When set, the tool projects every class from today to this date using the timetable grid + academic calendar (working days, holidays, working Saturdays / day-orders). Ask the user for this date if they want a deadline-aware answer. | |
| courseCode | No | Limit to one course code (e.g. 'BCSE302L'), matched case-insensitively. Omit for all courses. | |
| semesterId | No | Semester ID (e.g. 'CH20252605'). If omitted, uses the current semester. | |
| targetPercent | No | Attendance % to target. Default 74 — VIT requires 75% but 74.x rounds up to 75. | |
| includeUntilDate | No | Whether classes ON the closing date are counted. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safe read-only profile, and the description goes well beyond them: it discloses the login requirement, the exact error-recovery sequence, credential sourcing (VTOP_USERNAME/VTOP_PASSWORD), and the fact that projections use the timetable grid plus academic calendar including holidays and working Saturdays. That is real behavioral context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the headline use case are front-loaded, and the long middle sentence is dense with return-field names rather than filler. It is somewhat verbose and repeats the login/targetPercent points that the schema also carries, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the return-value burden: it enumerates upcomingSessions, ifAttendAllPercent, ifSkipAllPercent, maxSkippableInRange, mustAttendInRange, canBeSafeByDeadline, plannedBunk, and perDay. Authentication, defaults, and optional-parameter interactions are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains the targetPercent default rationale (74.x rounds to 75), that bunkDates requires untilDate, and frames the untilDate/bunkDates pairing as the primary use case rather than just restating field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource framing ('Attendance / bunk calculator') and enumerates exactly what it computes per course (current %, bunkBuffer, classesToRecover). It is clearly distinguished from the sibling get_attendance, which fetches raw data while this one computes projections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the 'key real use case' verbatim and gives the exact condition for passing untilDate and bunkDates ('I'm at the line; if I skip today can I still make 75%...'), including the instruction to ASK THE USER for the closing date. The authentication path (NOT_AUTHENTICATED -> get_captcha -> login -> retry, env var fallback) is spelled out explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_gpaARead-onlyIdempotent
GPA / CGPA / percentage calculator on VIT's 10-point scale (S=10 A=9 B=8 C=7 D=6 E=5 F=0; percentage = CGPA×10). It works from the LETTER GRADES VTOP already awarded — whether those were decided by relative or absolute grading doesn't matter, the grade→point scale is the same for every course. With no arguments it reports your current CGPA, percentage, total credits, and each completed semester's GPA. Pass courses (credits + grade for each) to compute that set's GPA and your projected CGPA — for 'what-if' scenarios where you supply expected grades (the most reliable way to forecast). Pass targetCgpa (+ plannedCredits) for the GPA needed to reach that CGPA. Pass semesterId (no courses) to compute one stored semester's GPA. (To estimate grades from current MARKS, use predict_grades instead.) If the response contains NOT_AUTHENTICATED, call get_captcha then login then retry. Requires login.
| Name | Required | Description | Default |
|---|---|---|---|
| courses | No | Explicit courses (credits + expected/actual grade) to compute a GPA from and project your CGPA — use for 'what-if' grade scenarios. | |
| semesterId | No | When `courses` is omitted, compute this semester's GPA from VTOP. Omit for current semester. | |
| targetCgpa | No | If set, compute the GPA needed over `plannedCredits` to reach this CGPA. | |
| currentCgpa | No | Override the base CGPA for projection (defaults to your real CGPA). | |
| currentCredits | No | Override base completed credits for projection (defaults to real). | |
| plannedCredits | No | Upcoming-semester credits, used with `targetCgpa` (defaults to the credits in `courses`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely useful behavior: it requires login and prescribes the exact recovery flow (get_captcha → login → retry) on NOT_AUTHENTICATED. It further explains that relative vs absolute grading is irrelevant because the grade→point mapping is fixed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scale, followed by mode rules, so an agent gets the essentials immediately. It is dense and long, packing several parenthetical asides into one paragraph, but nearly every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing return values (current CGPA, percentage, total credits, per-semester GPA) and the auth failure path. For a 6-param tool with zero required params, the coverage of modes, params, and error handling is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents every parameter and the baseline is 3. The description still adds value by spelling out parameter interactions—courses drives projection, targetCgpa pairs with plannedCredits, semesterId is used only when courses is omitted—and flags courses as the most reliable forecasting path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (GPA/CGPA/percentage calculator) and pins down the exact scale and formula. It explicitly distinguishes itself from the sibling predict_grades by clarifying it works from already-awarded letter grades, so an agent can tell the two apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit mode-selection rules: no args → current CGPA; courses → what-if/projection; targetCgpa+plannedCredits → required GPA; semesterId → stored semester. It also names the alternative tool (predict_grades) and the condition that selects it, so nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_odARead-onlyIdempotent
Count your On-Duty (OD) days this semester from the per-class attendance detail and check them against VIT Bhopal's event-OD limit (~8; DSW-approved ODs don't count but VTOP can't tell them apart, so all are counted). Returns distinct OD days with dates, OD classes per course, days remaining, and whether you're over. Always pass on the returned "note" about the rule being unconfirmed. This reads each course's attendance detail, so it makes several requests. If the response contains NOT_AUTHENTICATED, call get_captcha then login then retry. Requires login.
| Name | Required | Description | Default |
|---|---|---|---|
| courseCode | No | Limit to one course code (e.g. 'BCSE302L'). Omit to total OD across all courses. | |
| semesterId | No | Semester ID. If omitted, uses the current semester. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it discloses that the tool makes several requests (per-course attendance detail), that the OD rule is unconfirmed and DSW-approved ODs cannot be distinguished, that a 'note' must always be surfaced, and it names the auth-failure token and recovery sequence. The annotations cover safety, but this description carries the real behavioral burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the OD-limit caveat are front-loaded, followed by returns and the auth flow. It is dense but every sentence carries actionable information; only the parenthetical about DSW-approved ODs is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the return payload (distinct OD days with dates, OD classes per course, days remaining, over-limit flag) and the mandatory 'note'. Combined with the auth-error handling, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so courseCode and semesterId are already fully documented in the schema. The description implies per-course versus all-course aggregation ('OD classes per course') but adds no format or constraint detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Count your On-Duty (OD) days this semester') plus the data source ('per-class attendance detail') and the comparison it performs against the event-OD limit. This clearly separates it from the sibling calculate_attendance, which handles percentage-based attendance rather than OD day counting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete operating context: requires login, and an explicit recovery path (if NOT_AUTHENTICATED, call get_captcha then login then retry) that names the exact sibling tools to use. It does not, however, state when to prefer this over calculate_attendance or when OD counting is not applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attendanceARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| semesterId | No | Semester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description layers on the auth requirement, the exact error token to watch for, the ordered retry sequence, and how credentials are sourced. This is exactly the operational context an agent needs and cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and output shape, then appends the recovery procedure in a logical order with no filler sentences. It is dense in one block, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the returned per-course fields, and it fully covers the authentication failure path. Only minor gaps remain, such as whether other error states exist or whether results are cached.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional parameter is already documented in the schema. The description's note that semesterId is optional and defaults to the current semester restates the schema rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get attendance records for all courses') and even previews the payload shape (attended/total/percentage per course), so an agent knows exactly what it returns. It does not, however, differentiate itself from the sibling calculate_attendance, leaving ambiguity about which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete recovery path for the NOT_AUTHENTICATED case (get_captcha -> login -> retry) and explains the credential fallback to VTOP_USERNAME/VTOP_PASSWORD env vars, then to asking the user. It also clarifies that semesterId may be omitted. The gap is that it never says when to prefer this over calculate_attendance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarARead-onlyIdempotent
Look up the academic calendar: holidays, events (e.g. TechnoVIT), working Saturdays / day-orders, and which days are instructional. Use query to find a named event/holiday (e.g. 'technovit', 'pongal'), month ('YYYY-MM') to list a month, or holidaysOnly for just the no-class days; with no filter it returns the semester's notable days (holidays + working-Saturday day-orders). Festivals/holidays belong to the term they fall in, so if a query finds nothing, call get_semesters and retry with that semester's id. If the response contains NOT_AUTHENTICATED, call get_captcha then login then retry. Requires login.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Restrict to one month as 'YYYY-MM' (e.g. '2026-01'). | |
| query | No | Case-insensitive search of event/holiday names (e.g. 'technovit', 'pongal'). | |
| semesterId | No | Semester ID. Omit for current semester. Festivals/holidays appear in the term they fall in (e.g. TechnoVIT is a Fall-term event), so to find a specific event you may need that semester's id — use get_semesters. | |
| holidaysOnly | No | Return only non-instructional (holiday / no-class) days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, and the description adds substantial context beyond them: it requires login, discloses the NOT_AUTHENTICATED recovery flow, and explains the semester-scoping behavior of festivals (with a fallback to get_semesters). This is meaningful operational context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the parameter guidance, then the fallback/auth caveats in priority order. It is information-dense and free of filler, though the long multi-clause sentences are slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers defaults, parameter intent, semester-scoping edge cases, and the auth error path. An agent has everything required to call it correctly and recover from the common failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantic value: it explains the default behavior with no filter, how query/month/holidaysOnly differ in intent, and why semesterId may be needed to locate a term-bound event.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Look up the academic calendar') and enumerates exactly what it contains: holidays, events, working Saturdays/day-orders, and instructional days. This scope is clearly distinguishable from siblings like get_timetable or get_exam_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly maps each parameter to an intent (query for named events, month for a month listing, holidaysOnly for no-class days) and describes the no-filter default. It also names concrete alternatives and recovery paths: get_semesters when a query finds nothing, and get_captcha/login on NOT_AUTHENTICATED.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_captchaA
Step 1 of login: fetch a CAPTCHA image from VTOP. Returns the image so you (the model) can OCR it. After this, immediately call login with the captcha text you read — do NOT ask the user to read it for you. The user only needs to be asked for credentials if VTOP_USERNAME / VTOP_PASSWORD are not set as env vars on the server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructiveHint=false, openWorldHint=true), so the bar is lower, yet the description adds real behavioral context: it returns an image intended for the model to OCR, and it discloses the credential/env-var dependency. It stops short of describing failure modes (e.g., what happens if OCR fails or the captcha expires), which a login-flow tool could reasonably include.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the 'Step 1 of login' frame, and each sentence carries actionable instruction (what it returns, what to do next, when to involve the user). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining the return value (an image for OCR) and the downstream handoff to `login`. For a parameterless, single-step tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is nothing to disambiguate; baseline for 0 params is 4. No misleading parameter guidance is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (CAPTCHA image from VTOP), and frames it as 'Step 1 of login'. It distinguishes itself from the large sibling list (get_marks, login, etc.) by naming `login` as the required follow-up, so an agent knows exactly where this fits in the flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (step 1 of login), what to do immediately after (call `login` with the OCR'd text), and a clear negative instruction (do NOT ask the user to read the captcha). It even scopes when user credentials are needed. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_curriculum_progressARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them by disclosing the authentication requirement, the exact NOT_AUTHENTICATED recovery chain (get_captcha → login → retry), and the VTOP_USERNAME/VTOP_PASSWORD env-var fallback. This is precisely the kind of operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return contents are front-loaded, and the sentences each carry information (scope, example questions, auth recovery). The auth narrative is somewhat long and slightly run-on, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of return-value disclosure and does so by enumerating the reported sections (credits, categories, baskets, CGPA, grade counts). Combined with the auth-failure handling, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies and there is nothing param-level to disambiguate. The description correctly spends no space on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (get degree progress) and enumerates exactly what is returned: credits earned vs required, per-category and per-basket breakdown, CGPA, and grade-letter counts. It is clearly distinguishable from siblings like get_curriculum_baskets or get_pending_subjects, which cover narrower slices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete user-question triggers ('how many credits left?', 'how close am I to graduating?', 'which baskets do I still need?') that make the intended use unambiguous. It does not name an alternative tool or state when NOT to use it, so it falls short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exam_scheduleARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| semesterId | No | Semester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description adds real behavioral value by disclosing the login prerequisite, the NOT_AUTHENTICATED error contract, and the env-var credential fallback. It stops short of describing the response shape or behavior for an invalid semesterId.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what is returned, then the auth-recovery flow, then the parameter note — a logical order with no filler sentences. It is dense but slightly run-on, packing three separate auth steps into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool with no output schema, the description covers the returned fields, the auth requirement, and the failure-recovery path. An agent has everything needed to call it correctly without inspecting other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents semesterId including the 'omit for current semester' default. The description's 'semesterId is optional; omit for current semester' repeats the schema rather than adding format or validation detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (get) plus resource (exam schedule) with an explicit enumeration of the payload: CAT1/CAT2/FAT dates, timings, venues, seat numbers, row/col. This clearly separates it from siblings like get_timetable, get_marks, and get_calendar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete recovery path when the response contains NOT_AUTHENTICATED (call get_captcha, then login, then retry) and explains the credential fallback. It does not, however, contrast this tool with near-neighbors such as get_timetable or get_calendar, so sibling selection is left to the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grade_historyARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds genuinely new behavioral context: the auth prerequisite, the exact NOT_AUTHENTICATED sentinel in the response, the env vars login consumes, and the user-prompt fallback when credentials are missing. That is precisely the kind of auth and error-contract detail the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and returned payload are front-loaded in the first sentence, followed by the recovery procedure in priority order. The credential sentence is slightly dense but each sentence carries actionable instruction with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema and a covered annotation set, the description compensates by describing the returned content itself and the full auth/retry loop. An agent has everything it needs to call this tool and recover from the expected failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is no parameter semantics for the description to elaborate. It correctly avoids inventing arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource and then enumerates the returned scope (CGPA, total earned credits, per-semester GPA + courses + grades grouped by exam month), which implicitly separates it from siblings like get_semester_grades or get_marks. It stops short of naming an alternative explicitly, so it does not quite reach the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides strong conditional guidance for the failure path (NOT_AUTHENTICATED -> get_captcha -> login -> retry) and the credential fallback, and states the login prerequisite outright. It never says when to prefer this tool over get_semester_grades or get_marks, so selection guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marksARead-onlyIdempotent
Get internal marks/assessment scores (component-wise marks, weightage, status). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| semesterId | No | Semester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds meaningful context: it discloses the NOT_AUTHENTICATED sentinel, the login prerequisite, the env-var credential fallback, and what to do if credentials are missing. It does not describe rate limits or detailed return structure, but far exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The authentication flow instructions are front-loaded and actionable, but the sentence structure is dense and repetitive—it explains 'login' behavior at length within a tool that primarily fetches marks. The core purpose is stated first, but roughly half the text is about authentication mechanics better suited to the login tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with full schema coverage and no output schema, the description is sufficiently complete: it names the resource, the optional param behavior, and the auth recovery path. It could benefit from clarifying how this differs from sibling grade tools, but nothing essential to invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents semesterId including format and default behavior. The description merely restates that semesterId is optional and can be omitted for current semester, which aligns exactly with the schema description without adding new syntax or edge-case detail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get internal marks/assessment scores') and even enumerates the returned fields (component-wise marks, weightage, status). It distinguishes the resource from siblings like get_grade_history and get_semester_grades implicitly, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use context for the auth-recovery flow (call get_captcha then login then retry on NOT_AUTHENTICATED), which routes the agent to specific alternatives. It also notes semesterId is optional and to omit for current semester. However, it does not differentiate this tool from grade-related siblings like get_grade_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds meaningful non-obvious behavior: the NOT_AUTHENTICATED recovery sequence and the credential-resolution order (env vars then user prompt). It doesn't cover pagination or error shapes, but the auth-recovery chain is the critical operational detail and it is fully disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its fields, then the recovery procedure. Every sentence carries operational weight. It is dense but not redundant; the auth instructions are necessarily multi-step and cannot be shortened without losing the retry chain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description's field enumeration stands in for it and does so adequately. The auth prerequisite and recovery path are spelled out. Complete enough to call correctly; the only omission is the shape of the profile object beyond field names, which is minor for a simple profile fetch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the schema has nothing to say; baseline is 4. The description correctly signals that no arguments are needed and instead spends its budget on the auth flow, which is the only variable that affects invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (student profile), then enumerates exactly what fields are returned. Distinguishable from the sibling get_student_profile by name and scope, and the field list makes the return contract concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Requires login' and gives a full conditional playbook: on NOT_AUTHENTICATED, call get_captcha then login then retry. It even specifies the fallback when env credentials are missing (ask the user). This is a rare, complete when/when-not/alternative prescription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_semester_gradesARead-onlyIdempotent
Get grades for a specific semester (course-wise grades + GPA). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| semesterId | No | Semester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive and open-world, and the description adds substantial context beyond them: the NOT_AUTHENTICATED response contract, the get_captcha → login → retry sequence, and the env-var credential fallback with user-prompt escalation. This is rich, actionable behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and the remaining sentences cover auth behavior that genuinely aids correct invocation. It is somewhat verbose with the auth flow spelled out inline, but each sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the return contents (course-wise grades + GPA) and the special NOT_AUTHENTICATED signal, and it fully covers the auth prerequisites and recovery. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself already documents semesterId including the 'omit for current semester' behavior. The description restates this ('semesterId is optional; omit for current semester') but adds no format syntax beyond the schema's example, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scope: 'Get grades for a specific semester (course-wise grades + GPA)'. An agent can tell this returns per-course grades plus GPA for one semester. However it does not distinguish itself from the very close siblings get_grade_history and calculate_gpa, leaving overlap to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational context ('semesterId is optional; omit for current semester', 'Requires login') and a full retry flow. But it never says when to prefer this over get_grade_history or calculate_gpa, so routing among siblings is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_semestersARead-onlyIdempotent
Get list of available semesters (id + name). 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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (read-only, idempotent, open-world, non-destructive). The description adds crucial behavioral context beyond that: authentication is required, NOT_AUTHENTICATED triggers a get_captcha → login → retry flow, and login can use environment variables or prompt for credentials. This is information an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: first sentence states the purpose and return shape, second gives usage guidance, third and fourth handle the auth recovery flow. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a zero-parameter, read-only, idempotent tool with no output schema, the description covers everything an agent needs: what it returns, when to call it, and the full authentication error-handling path. It is complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description appropriately doesn't invent parameter details, and the absence of filtering options is clear from the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get list of available semesters (id + name)'. It also explains how this tool relates to sibling data tools by noting they default to the current semester, so an agent can tell it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it ('unless the user asks about a specific past semester') and when it can be skipped ('usually don't need to call this'). It also provides a clear recovery workflow for NOT_AUTHENTICATED and missing credentials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timetableARead-onlyIdempotent
Get class timetable/schedule (courses, slots, venues, faculty, credits). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| semesterId | No | Semester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare safety traits (readOnly, idempotent, openWorld), but the description surfaces the real behavioral burden: the tool requires an authenticated session, can return a NOT_AUTHENTICATED sentinel, and defines the full retry/login choreography plus credential sourcing. This is meaningful context an agent cannot derive from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns, then the authentication handling, which is the right priority order. It is somewhat dense and reads as a run-on chain of imperatives ('get_captcha then login then retry this tool'), but every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly enumerates the returned fields, and it fully covers the auth lifecycle and the sole optional parameter's default. An agent has everything needed to call the tool and recover from the primary failure mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself documents semesterId, its example format, and the omit-for-current-default behavior. The description only restates 'semesterId is optional; omit for current semester,' adding no syntax or semantic value beyond the structured field, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('class timetable/schedule') and enumerates the payload contents (courses, slots, venues, faculty, credits). This cleanly separates it from siblings like get_exam_schedule, get_today_classes, and get_calendar, which an agent could otherwise confuse with a general timetable call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance: omit semesterId for the current semester, and the exact recovery sequence (get_captcha -> login -> retry) when NOT_AUTHENTICATED appears, including the env-var fallback and when to prompt the user. It does not explicitly contrast with sibling schedule tools such as get_today_classes, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_today_classesARead-onlyIdempotent
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 date (ISO YYYY-MM-DD) to check another day. If the response contains NOT_AUTHENTICATED, call get_captcha then login then retry. Requires login.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ISO date YYYY-MM-DD to look up. If omitted, uses today (IST). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond annotations: returns a holiday/no-class result on non-instructional days, follows working-Saturday day-order rules, and specifies the NOT_AUTHENTICATED recovery sequence (get_captcha → login → retry). These are non-obvious runtime behaviors an agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the primary purpose, then layers calendar edge cases and auth recovery in a compact run of sentences. Slightly dense but every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with no output schema, the description covers purpose, edge cases (holidays, working Saturdays), auth failure handling, and parameter usage. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description clarifies the format ('ISO YYYY-MM-DD') and adds the default behavior ('or a given date', 'today'), marginally enriching what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (classes scheduled for today) with scope qualifiers including time and venue. Distinguishes itself from the sibling get_timetable by being date-scoped ('today') rather than a general timetable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context for when to use (today's classes, or another day via the date param) and explains the auth-recovery flow. Does not explicitly contrast with get_timetable, but the 'today' framing makes the intended use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| captcha | Yes | Captcha solution from the get_captcha tool | |
| password | No | VTOP password. Optional — if the MCP server has VTOP_PASSWORD set as an env var, omit this and the server will use the stored value. Do not ask the user for credentials if they're already configured. | |
| username | No | VTOP username / registration number. Optional — if the MCP server has VTOP_USERNAME set as an env var, omit this and the server will use the stored value. Do not ask the user for credentials if they're already configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only and open-world, so the description does not need to establish that it mutates remote state. It adds real behavioral context beyond the annotations: server-side env-var credential fallback and a defined error path ('server reports they're not configured'). It stops short of describing what a successful login yields (session/token) or how a failed captcha is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the step identity and the required action, followed by the credential-optional rule. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a small, fully documented parameter set, the description covers the inputs and the credential-resolution behavior adequately. It leaves the return value and post-login session semantics unstated, which is a minor gap for an authentication tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all three parameters, including the env-var fallback for username and password. The description adds only the cross-tool hint that the captcha comes from the OCR step, which is marginal beyond what the schema's 'Captcha solution from the get_captcha tool' already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('submit credentials + the captcha') and explicitly frames itself as 'Step 2 of login', which cleanly separates it from the sibling get_captcha (step 1). An agent can identify the tool's role in the flow without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: omit credentials when VTOP_USERNAME/VTOP_PASSWORD are set on the server, and only prompt the user if the server reports they are missing. It does not address the re-login case (e.g., what to do if a session already exists), which is the one remaining when-to-use gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutA
Logout from VTOP and clear the session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false; the description adds the meaningful behavioral detail that the session is cleared, which is the key side effect. It stops short of stating auth requirements or that subsequent calls will fail, but this is solid added context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence front-loads the action and its effect. There is no filler or redundant restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema session tool, the definition covers what the tool does and its side effect. It could add a note that the session must exist or that later calls will fail, but nothing essential for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema-side burden is nil and the baseline of 4 applies. Nothing about parameters needs explaining.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (logout) and resource (VTOP session) with the added effect of clearing the session. It is clearly distinguishable from the many read-only siblings and from 'login', though it does not explicitly name a sibling to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intent of 'logout' implies its own usage context, so an agent can infer when to call it. However, there is no explicit guidance about prerequisites (an active session) or what to expect if no session exists, and no alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.5- First observed
calculate_attendance - First observed
calculate_gpa - First observed
calculate_od - First observed
get_attendance - First observed
get_calendar - First observed
get_captcha - First observed
get_curriculum_progress - First observed
get_exam_schedule - First observed
get_grade_history - First observed
get_marks - First observed
get_profile - First observed
get_semester_grades - First observed
get_semesters - First observed
get_timetable - First observed
get_today_classes - First observed
login - First observed
logout
TDQS
Scored across 17 tools
Most tools have clearly distinct purposes (attendance, timetable, marks, exam schedule, profile, calendar). There is mild overlap among the grade-related tools (get_grade_history, get_semester_grades, get_curriculum_progress, calculate_gpa) and attendance tools (get_attendance vs calculate_attendance), but descriptions differentiate raw data vs. computed/aggregated views adequately.
Dominant pattern is verb_noun with get_* (get_attendance, get_timetable, get_marks, get_profile, etc.) and calculate_* (calculate_gpa, calculate_attendance, calculate_od), which is predictable. The auth tools login/logout/get_captcha deviate slightly by being bare verbs, but overall it is coherent.
17 tools is on the heavier side but each maps to a distinct academic concern (auth flow, grades, attendance, timetable, calendar, calculators, profile). Nothing feels redundant enough to trim, though it approaches the upper bound for a single-portal server.
The surface covers the core student lifecycle well: authentication, profile, attendance, marks, grades, exam schedule, timetable, academic calendar, and GPA/attendance calculators. Missing operations like course registration or fee/hostel details are outside the apparent scope, so coverage is strong with only minor gaps.
Maintenance
Related MCP Connectors
Your life dashboard for AI: tasks, habits, goals, budgets, workouts, nutrition, journal, notes.
Let your AI agent operate any website through a real, logged-in browser session.
- VitalliOAuthapp.vitalli
Your own health records from Vora, Still, Stackwell and Joiva in your AI assistant (OAuth).
1 Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI-powered natural language queries about BIT Information Portal (BIP) data by integrating with BIP APIs through session management. Uses Google Gemini to intelligently route questions to appropriate endpoints and generate contextual answers about students, departments, courses, faculty, and achievements.ISC
- FlicenseNot gradedqualityCmaintenanceConnects AI assistants to the FAST-NUCES Flex Student Portal, enabling students to query their academic data including attendance, marks, transcript, and fee reports through natural language conversations.6-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access PSG College of Technology e-campus portal data including CA marks, attendance records, timetable schedules, and course information through natural language queries.4MIT
- FlicenseNot gradedqualityCmaintenanceEnables an AI assistant to help students by providing tools for math calculations, attendance tracking, marks analysis, reading PDF notes, searching lecture notes, and checking college regulations.-