Skip to main content
Glama

VTOP MCP Server for VIT Bhopal

Ask your AI assistant anything about your VIT Bhopal VTOP account — attendance, marks, timetable, exams, grades, pass eligibility, hostel leave — in plain language.

License: Apache 2.0 Node 20.6+ MCP vtop-bhopal-mcp MCP server – quality and maintenance score on Glama

An MCP server. Connect it to OpenCode, Claude Code, Claude Desktop, Cursor or anything else that speaks MCP, then just ask. It signs in to VTOP, reads the page, and answers.

⚠️ Exactly two tools write to your account

Of the 35 tools, 33 are strictly read-only. Two are not: apply_leave submits a real hostel leave application for your proctor, and cancel_leave withdraws one. Those are the only writes.

Neither can fire by accident. Both are two-step — a preview call validates and returns a single-use token without sending anything, and a confirm call must repeat the identical target and that token. Change anything in between and it's refused. Both declare readOnlyHint: false so a compliant client prompts rather than auto-approving.

Details in docs/hostel-leave.md.


What it looks like

"How many more classes can I skip and still hold 75%?"

You can skip 4 more classes in CSD3002 and still finish at 75.4%. At 5 you'd drop to 74.1%. Last chance is 28 Oct.

Course

Attended

Can skip

Lowest safe %

CSD3002 Secure Software

34/46

4

75.4%

MAT2001 Differential Equations

21/22

1

77.8%

"When is my Database FAT, where, and which seat?"

CSD5003 Database Management Systems — FAT Sat 24 Oct 2026, Morning session, 09:30–11:00 Venue: AB1-305 · Seat B14 · Hall ticket required

"Apply for a day outing on the 20th, Sehore, 9am to 6pm, family function"

Preview only — nothing has been sent. Confirm to apply.

✓ Day Outing (OG1), returns 18:00 — exactly on the deadline, allowed ✓ 5 classes missed (Sat 24 Oct is the FAT, unaffected) ✓ Visiting place "Sehore" (6 chars), reason provided

previewToken: a3f9c1d8e2b40756 Reply "confirm" and I'll submit it unchanged.

"Is my leave approved yet?"

L9000001 · WINTER VACATION · Home 30 Oct 17:00 → 15 Nov 21:00 (17 days) Status: PROCTOR APPROVAL PENDING — raised, not yet actioned. Gate Pass OUT/IN not issued.


Related MCP server: mcp-student-assistance

Install

Needs Node.js 20.6 or newer (node -v) and git.

git clone https://github.com/CipherxHub/vtop-bhopal-mcp.git
cd vtop-bhopal-mcp
npm install
npm run build

dist/ is not committed, so the build step is required.

Prefer hosted? Use it straight from Glama — no clone or build needed:

vtop-bhopal-mcp MCP server – quality and maintenance score on Glama

Your credentials

Create a .env in the project folder with your own VTOP login (full details, including the Windows equivalent of chmod 600, are in Connect it):

VTOP_USERNAME=your-registration-number
VTOP_PASSWORD=your-vtop-password

It's gitignored and never committed. If you skip this, the assistant asks you in the chat the first time it needs them.

See .env.example for the full list of optional settings.


Connect it

Three steps for every client: build the server, create the .env, paste the config. Replace /path/to/vtop-bhopal-mcp with where you cloned it. In JSON files, use forward slashes (D:/vtop-bhopal-mcp/…) — backslashes need escaping and are the commonest reason a pasted config silently fails.

1. Build

git clone https://github.com/CipherxHub/vtop-bhopal-mcp.git
cd vtop-bhopal-mcp
npm install        # run ON the machine that will use it — see note below
npm run build

dist/ is not committed, so the build step is required. Never copy node_modules/ between machines: sharp ships a platform-specific native binary, so an install copied from Windows will not start on macOS/Linux (and vice versa). npm install on the target machine is the fix.

2. Credentials

Create a .env in the project folder with your own VTOP login:

VTOP_USERNAME=your-registration-number
VTOP_PASSWORD=your-vtop-password

It's gitignored and never committed. Then lock it down: chmod 600 .env on macOS/Linux. That command is a no-op on Windows — use this instead so other local users cannot read your password:

icacls .env /inheritance:r /grant:r "$env:USERNAME:(F)" "BUILTIN\Administrators:(F)" "NT AUTHORITY\SYSTEM:(F)"

If you skip the .env, the assistant asks you in the chat the first time it needs credentials. See .env.example for the full list of optional settings.

Where each client reads settings from. The server never reads a .env by itself — something has to hand it the variables. For every client below except Codex, that something is Node's --env-file= flag in the pasted command, so the .env you just made is what gets loaded. Codex is the exception: it has no --env-file mechanism, so credentials (and VTOP_CAPTCHA_OPEN) go in its own config file's env block instead. A .env sitting next to the server is silently ignored by Codex.

3. Paste the config

OpenCode — global config, so it works in every project:

OS

File

Windows

C:\Users\<you>\.config\opencode\opencode.jsonc

macOS / Linux

~/.config/opencode/opencode.jsonc

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "vtop": {
        "type": "local",
        "command": [
          "node",
          "--env-file=/path/to/vtop-bhopal-mcp/.env",
          "/path/to/vtop-bhopal-mcp/dist/index.js"
        ]
      }
    }
  }
}

Then opencode service restart, start a new chat (tools load at session start), and check with opencode mcp list — you want ✓ vtop connected.

Codex CLI — easiest via its own command (it writes the file for you):

codex mcp add vtop `
  --env VTOP_USERNAME=your-registration-number `
  --env VTOP_PASSWORD=your-vtop-password `
  --env VTOP_BASE_URL=https://vtop.vitbhopal.ac.in/vtop `
  -- node D:/vtop-bhopal-mcp/dist/index.js

That lands in C:\Users\<you>\.codex\config.toml on Windows (~/.codex/config.toml on macOS/Linux) as:

[mcp_servers.vtop]
command = "node"
args = ['D:/vtop-bhopal-mcp/dist/index.js']

[mcp_servers.vtop.env]
VTOP_BASE_URL = "https://vtop.vitbhopal.ac.in/vtop"
VTOP_USERNAME = "your-registration-number"
VTOP_PASSWORD = "your-vtop-password"

Check with codex mcp list. Quit Codex completely (all windows — the background process holds the old server open), relaunch, and start a new chat. Optional safety guard — prompt before every login:

[mcp_servers.vtop.tools.login]
approval_mode = "approve"

Claude Code:

claude mcp add vtop -s user -- node --env-file=/path/to/vtop-bhopal-mcp/.env /path/to/vtop-bhopal-mcp/dist/index.js

Check with claude mcp list, then start a new chat.

Claude Desktop — same command + args shape in its config file:

OS

File

Windows

%APPDATA%\Claude\claude_desktop_config.json

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "vtop": {
      "command": "node",
      "args": ["--env-file=/path/to/vtop-bhopal-mcp/.env", "/path/to/vtop-bhopal-mcp/dist/index.js"]
    }
  }
}

Restart Claude Desktop after editing.

Cursor — global ~/.cursor/mcp.json, or <project>/.cursor/mcp.json for one workspace. Same mcpServers shape as Claude Desktop above.

VS Code — workspace file .vscode/mcp.json (top-level key is servers here, not mcpServers), or run MCP: Open User Configuration from the command palette for all workspaces:

{
  "servers": {
    "vtop": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/vtop-bhopal-mcp/dist/index.js"],
      "envFile": "/path/to/vtop-bhopal-mcp/.env"
    }
  }
}

VS Code reads envFile natively, so no --env-file flag is needed. Check with MCP: List Servers.

Antigravity — global ~/.gemini/config/mcp_config.json, or .agents/mcp_config.json inside one workspace (or open the agent panel … → MCP Servers → Manage MCP Servers → View raw config):

{
  "mcpServers": {
    "vtop": {
      "command": "node",
      "args": ["/path/to/vtop-bhopal-mcp/dist/index.js"],
      "env": {
        "VTOP_USERNAME": "your-registration-number",
        "VTOP_PASSWORD": "your-vtop-password",
        "VTOP_BASE_URL": "https://vtop.vitbhopal.ac.in/vtop"
      }
    }
  }
}

Troubleshooting

Every entry below was hit on a real machine during testing — symptom, cause, fix.

1. ✗ vtop failed the moment you add it. Node exits on a missing --env-file instead of ignoring it. Create the .env first, or drop the --env-file=… argument until the file exists.

2. Request timed out (OpenCode), log says unknown message ID. You set cwd on the server entry. It connects from some directories and times out from others. Remove cwd — the server resolves every path absolutely, so it buys nothing.

3. opencode mcp add rejects --env-file (Unrecognized flag). As of v2.0.28 the CLI cannot pass it even after --. Hand-edit the JSON instead, exactly as shown above.

4. The captcha image is not visible. Some clients drop MCP image content blocks (confirmed: Codex's TUI, OpenCode's plain TUI). get_captcha always writes the JPEG to disk and returns the absolute path as captchaFile (default %TEMP%\vtop-mcp-captcha\, override with VTOP_CAPTCHA_DIR), so open that file and read it. Never let the model guess the characters — a wrong guess is a real failed login attempt, and VTOP locks accounts after repeated failures. Hands-free option (experimental branch): VTOP_CAPTCHA_OPEN=1 makes the server open the image in a viewer the moment it is written. Put it in the .env for clients launched with --env-file, or in Codex's [mcp_servers.vtop.env] block. Local single-user use only — on a shared connector every call would pop a window on whoever is at the keyboard.

5. INVALID_CAPTCHA over and over. The image expires in 30–60 seconds, and a slow round trip can outlast it. Ask for a fresh captcha and answer fast. After three consecutive rejections the server stops you itself and asks for a human — that is the safety stop working, not a bug. Do not hammer retries: repeated failures escalate VTOP's risk scoring toward MAX_LOGIN_ATTEMPTS, which needs a browser reset.

6. UPSTREAM: Request failed with status code 404 on get_captcha, especially right after logout. Fixed on this branch: logout() used to keep the dead session cookie, and VTOP 404s a /login that carries it. Update, rebuild, restart your client. If you are on main without the fix, restarting the client process also clears it.

7. RECAPTCHA_REQUIRED — VTOP shows Google reCAPTCHA instead of the image. VTOP's risk score for your IP/session is high (common after several rapid logins). Wait a while before retrying. A residential proxy via VTOP_PROXY_URL also helps; datacentre IPs reliably trigger it.

8. npm run test:all fails on openssl / native modules. The suite needs openssl for its local HTTPS mock — on Windows that comes with Git for Windows. And sharp compiles per platform: always run npm install on the machine itself, never copy node_modules across.

9. Config change not picked up / stale tool list. MCP servers start with the client session. New chat after any config edit; full client restart after config.toml / Desktop JSON edits; opencode service restart for OpenCode. A stale server process also pins old code — rebuilding dist/ does nothing to a process that already loaded it, so kill leftovers after every rebuild.

10. apply_leave, cancel_leave and approvals. Of the 35 tools, 33 are read-only. apply_leave submits a real hostel leave application to your proctor and cancel_leave withdraws one — both two-step (preview returns a token, confirm repeats the identical target plus that token), but live writes all the same. Keep approval prompts on for them (and for login) in clients that support them, and never share a .env or a config.toml holding someone else's credentials: the account behind them is the one VTOP sees.


Tools at a glance

Tool

What it does

🎓

get_attendance

Attended / total / percentage per course

🎓

get_attendance_detail

Per-class present/absent per day, or NOT POSTED

🎓

calculate_attendance

How many classes you can still skip (or must attend) to hold 75%

🎓

get_today_classes

Today's classes — times and rooms, holiday-aware

🎓

get_timetable

Registered courses, slots, venues, faculty, credits

📝

get_marks

CAT and internal-assessment marks with weightage

📝

get_internal_totals

Marks banked per course, plus everything still to come

📝

get_exam_schedule

CAT-1, CAT-2, FAT — dates, sessions, venues, seats

📝

check_pass_eligibility

What you must score to pass, in both scales

📊

get_semester_grades

Grades and GPA for one semester

📊

get_grade_history

CGPA, credits, courses grouped by exam month

📊

get_curriculum_progress

Credits earned vs required, by category

📊

get_course_basket

Which basket a course is in, and its credits

🔍

search_faculty

Faculty directory search with detail cards (department, email, cabin)

📄

get_course_syllabus

Downloads a course's syllabus PDF, returns the saved file path

🗓

get_calendar

Holidays, exams, events, instructional days

🗓

get_semester_info

Term bounds, days left, teaching-over flag

🗓

get_semesters

All your semesters and their IDs

🗓

get_profile

Name, registration number, programme, branch, plus photo file

🏠

get_leave_types

Leave types VTOP currently offers

🏠

get_leave_status

Your leave applications and approval status

🔐

session_status

Whether you're logged in and whether VTOP agrees

🔐

get_captcha · login · logout

Signing in and out

⚠️

apply_leave

Submits a real leave application — two-step, see above

⚠️

cancel_leave

Withdraws an applied leave — two-step, see above

🔍

get_leave_type_rules

Probes VTOP for per-type rules. Never submits

Full reference, including arguments and return shapes: docs/tools.md.

Two things it deliberately won't do

No grade or GPA predictor. VIT awards letter grades relatively — against the class average and its spread — and VTOP exposes neither. Any prediction would be you supplying a guess and getting a guess back. get_grade_history reports the grades VTOP actually awarded; check_pass_eligibility reports the thresholds the published pass rules impose. Nothing extrapolates.

Read the percentages in get_internal_totals carefully. VTOP omits components that haven't happened yet rather than showing them as zero, and the internal scale isn't a constant 50. Marks scored are exact; percentages are a lower bound. The tool repeats this note on every call.


Docs

docs/tools.md

All 35 tools — arguments, returns, read/write

docs/hostel-leave.md

Leave types, rules, the two-step confirmation

docs/http-connector.md

Hosting it remotely, and its security model

docs/errors.md

Error codes, recovery paths, troubleshooting

docs/bhopal-vtop.md

How Bhopal's markup and endpoints actually behave

docs/development.md

Architecture, tests, adding a tool

docs/provenance.md

What came from where, with line counts

CONTRIBUTING.md

Fixture hygiene — synthetic data only


Privacy

  • Your login only goes to VTOP. The server runs on your machine and talks directly to vtop.vitbhopal.ac.in. It never sends your credentials anywhere else.

  • Nothing is stored. Session cookies live in memory and vanish when the server stops. Your password stays in your own .env, if you create one.

  • Your assistant sees your data. Whatever the tools return goes to the AI client you connected — the same as anything else you ask it.

  • This repo contains no student data. No registration numbers, no marks, no CGPA, no leave ids. npm run test:privacy enforces that on every file, and it will fail the build if real data ever appears.


Limitations

  • Unofficial. Not affiliated with or endorsed by VIT Bhopal. It reads the same pages your browser does — if VTOP changes them, parts break until updated.

  • Two tools write. See docs/hostel-leave.md. Everything else only reads; it never registers courses, changes marks, or touches fee and payment pages.

  • Leave duration limits are partly unknown. VTOP enforces them server-side and publishes none. Only Home Town ≤ 14 days is confirmed. Guessing the rest would block valid requests, so it isn't attempted.

  • Exam overlap is a warning, not a block. A clash is sometimes unavoidable and isn't this tool's decision to make.

  • Bunk calculator assumes 75%. Check your own course rules.

  • The HTTP connector is tested, including a live login. 20 offline checks cover routing, auth, CORS, the MCP transport and page content; it refuses every unauthenticated request; and a full register → captcha → login → real-data pass was run against VTOP on 13 Oct 2026. What remains untested is the network path — whether VTOP serves a Google reCAPTCHA to your host's IP range, which is a property of where you deploy. Recipe and security notes: docs/http-connector.md.


Provenance

Built on earlier work, with each layer credited and sized:

Layer

Author

Licence

Scale

Original architecture and most parsers

Vikranth Jagdish

MIT

~43% inherited

Bhopal parser adaptations

divyarthjain

Apache-2.0

~247 lines, 5 files

Leave, pass rules, errors, cache

CipherxHub

Apache-2.0

~2,563 new lines

Behavioural reference only (no code copied): android-vtop-chennai, GPL-3.0.

Full detail, including why only one MIT notice is reproduced: docs/provenance.md. Licence texts: LICENSE, NOTICE, LICENSE-MIT-upstream.

Not affiliated with or endorsed by VIT Bhopal University.

Available Tools

33 tools
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonYesReason for the leave. Keep it specific.
toTimeYesReturn time, same format as fromTime. For OG1 (Day Outing) it must be 18:00 or earlier - 18:00 itself is allowed, 18:01 is refused.
confirmNoLeave this unset/false for the first call: nothing is submitted, and you get back a preview plus a previewToken. Re-call with confirm=true and the SAME fields and token to actually submit. Never set confirm=true on the first call.
fromTimeYesDeparture time. 24-hour HH:MM is safest, but '6:00 PM', '1800' and '8.30' are all normalised automatically.
leaveCodeYesLeave type CODE, not the label. SO=Special Outing, WP=With Parent Leave, EP=Official Leaves, SV=Summer Vacation, WV=Winter Vacation, HT1=Home Town, LG1=Local Guardian, EY1=Emergency Leave, OG1=Day Outing. Use get_leave_types if unsure.
leaveToDateYesReturn date as ISO YYYY-MM-DD.
previewTokenNoThe token returned by the preview call. Required with confirm=true. It is checked against these exact field values, so editing any field after previewing invalidates it — re-run the preview.
leaveFromDateYesDeparture date as ISO YYYY-MM-DD. Must not be in the past.
visitingPlaceYesWhere you are going. Max 150 characters.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses that this writes to VTOP, that the previewToken is server-signed, single-use and expires after 10 minutes, that a changed field invalidates it, and that login is required. The annotations (readOnlyHint=false, idempotentHint=false) are consistent with this and the description adds the full write-token lifecycle the agent cannot infer elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the critical fact (this writes and creates a real request), then organised as Call 1 / Call 2 followed by enforced rules. Sentences are dense but each carries an operational fact; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 describes what the preview returns (normalised values, fired rules, missed classes, previewToken) and the failure mode on a stale token. For a high-stakes write tool needing auth and human confirmation, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description still adds value by stating rules not present in the schema, such as to-date not preceding from-date, and by summarising the OG1 18:00-inclusive cutoff and 150-char cap in prose. Most of the individual field detail (leave codes, time normalisation, token semantics) duplicates the schema, which keeps this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apply for hostel leave on VTOP') and immediately distinguishes itself from the sibling write path by declaring it creates a real request. An agent can tell it apart from cancel_leave, get_leave_status, and get_leave_history without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly spells out the two-call protocol (preview vs submit), when to use each, the requirement to show the user the preview and get agreement, and the rule to never set confirm=true on a first call. It also routes the agent to get_leave_types when the leave code is unknown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_attendanceA
Read-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) or toTermEnd: true to project to the last instructional day of the term automatically, plus 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bunkDatesNoDates (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`).
toTermEndNoProject to the last instructional day of the semester (from the academic calendar) instead of passing untilDate yourself. Answers 'how many of my remaining classes must I attend to hold the target?' — holidays and working Saturdays are excluded automatically.
untilDateNoAttendance-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.
courseCodeNoLimit to one course code (e.g. 'BCSE302L'), matched case-insensitively. Omit for all courses.
semesterIdNoSemester ID (e.g. 'CH20252605'). If omitted, uses the current semester.
targetPercentNoAttendance % to target. Default 74 — VIT requires 75% but 74.x rounds up to 75.
includeUntilDateNoWhether classes ON the closing date are counted. Default true.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses the login requirement, the NOT_AUTHENTICATED error token and its recovery sequence, credential sourcing via VTOP_USERNAME/VTOP_PASSWORD, and the fact that projections use the timetable grid plus academic calendar (holidays, working Saturdays). No contradiction with the readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then prerequisites, then the output contract. It is dense and long, and the long inventory of return-field names makes it feel encyclopedic, but with no output schema each of those field names is carrying needed payload, so the length is largely justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-param, 7-parameter analytical tool with no output schema, the description supplies the missing return-value documentation (upcomingSessions, ifAttendAllPercent, maxSkippableInRange, plannedBunk, perDay), the auth lifecycle, and the deadline-projection mechanics. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description earns an extra point by explaining cross-parameter semantics the schema does not — bunkDates requires untilDate, toTermEnd is an alternative to supplying untilDate, and the targetPercent default of 74 exists because VIT's 75% threshold rounds up from 74.x.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource pairing ('Attendance / bunk calculator') that instantly separates it from the sibling fetchers get_attendance and get_attendance_detail. It then enumerates the exact derived quantities it produces (current %, bunkBuffer, classesToRecover), so an agent knows this computes rather than retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the key use case ('I'm at the line; if I skip today can I still make 75%?') and the parameter combination that serves it (untilDate or toTermEnd, plus bunkDates). It also states the prerequisite (requires login) and the exact recovery path when auth fails (NOT_AUTHENTICATED -> get_captcha -> login -> retry), including the env-var fallback.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_leaveA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoLeave this unset/false for the first call: nothing is withdrawn, and you get back the leave's current status plus a previewToken. Re-call with confirm=true and the SAME leaveId and token to actually withdraw. Never set confirm=true on the first call.
leaveIdYesThe leave id to withdraw, e.g. 'L9000001' (see get_leave_status).
previewTokenNoThe token returned by the preview call. Required with confirm=true. It is bound to this exact leave id and caller, so a different id or a forged token invalidates it — re-run the preview.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=false, but the description adds substantial context beyond them: the two-step safety design, that the previewToken is bound to the exact leave id and caller, that an approved leave may lack a withdraw control, and that login is required. This is rich 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with the write warning, then the call sequence, then the caution. It is on the long side and some token-binding detail repeats across description and schema, but nearly every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 what the preview returns (type, dates, approval status, withdraw-control availability, previewToken). Combined with annotations covering the mutation profile, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself already documents confirm's two-step semantics and the token's binding to leave id/caller. The description reinforces but largely repeats that, so the baseline 3 applies with no meaningful addition beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Withdraw a hostel leave application on VTOP' — and immediately distinguishes itself from the sibling apply_leave and the read-only get_leave_status. An agent can tell exactly what this does versus the other leave tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines the two-call protocol, when to use each call (preview vs. confirm=true), what NOT to do ('Never invent a previewToken or set confirm=true on a first call'), and the user-agreement prerequisite. Alternatives and exclusions are named directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_pass_eligibilityA
Read-onlyIdempotent

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 teeRequiredRaw AS THE ANSWER to 'what do I need in the TEE'. Do NOT present totalIfTeeClearedAtMinimum as a requirement - it is an OUTCOME: the course total you would finish with by scoring exactly the TEE minimum, i.e. bankedSoFar + teeRequiredMarks. The attendance marks are excluded from it because they are a projection awarded only after the last instructional day. Working-day and class counts come from the academic calendar and timetable, so holidays and day-order Saturdays are accounted for. If the calendar cannot be read, upcomingClasses is null and calendarAvailable is false with a calendarNote explaining why - that means UNKNOWN, not zero. semesterId is optional; omit for current semester. Requires login.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds substantial extra context: a 60-second cache with a bypass flag, a login requirement, an explicit no-retest rule, and a failure mode where an unreadable calendar yields nulls plus calendarAvailable=false rather than zeros. That is well beyond what the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, but the body is long and repetitive, re-deriving pass arithmetic (20/50, 6 of 15, 40/100, 12 of 30) and restating the canonical answer. Since the tool computes the result, much of this domain detail and the scripted user-facing phrasing could be trimmed without losing invocation guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains two key output fields and their semantics (teeRequiredRaw as the answer, totalIfTeeClearedAtMinimum as an outcome), plus null-handling. It still omits the overall response shape (per-subject structure, other fields), but is largely complete for a complex domain tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, and the description's line 'semesterId is optional; omit for current semester' merely repeats the schema. The refresh/cache framing adds a little interpretive value but no syntax or format detail beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and outcome ('Answer "will I pass this course?" for every subject') and anchors the scope to VIT Bhopal pass rules. It is clearly distinguishable from siblings like get_marks, get_internal_totals, and calculate_attendance, which return raw data rather than a pass verdict.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context (answering a pass/fail question with real rules) and even directs the agent to specific output fields for specific user questions ('READ teeRequiredRaw AS THE ANSWER'). It also warns against misusing totalIfTeeClearedAtMinimum. However, it never names an alternative tool or explicitly states when to use a sibling instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_acknowledgmentsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description redundantly confirms 'Read-only.' However, it adds genuinely new context the annotations lack: the tool requires login, and it discloses the exact shape of returned values (Submitted / Not Applicable / Not Submitted) along with the actionable interpretation of 'Not Submitted'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool returns before the interpretation and the login prerequisite. Little waste; the parenthetical document examples are useful rather than padding, though 'Read-only' partly duplicates the annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry the return-value burden and it does — it names the three status values and what a 'Not Submitted' entry means. The auth prerequisite is stated. Minor gaps remain around whether the list is scoped to the logged-in student only and whether it can be paginated or filtered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; there are no parameter semantics to document or mis-document. The description correctly implies no filtering inputs are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (admission/joining document checklist) and its exact scope: which VTOP documents are Submitted, Not Applicable, or Not Submitted. It enumerates the kinds of documents covered (mark lists, transfer/migration/conduct certificates, affidavits), so it is unmistakably distinct from siblings like get_fee_receipts or get_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the note that a 'Not Submitted' line is actionable tells the agent what the output means, but there is no explicit when-to-call or when-not-to-call guidance and no named alternative. For a no-param lookup with no close siblings this is adequate, not strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_attendanceA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A3.9/5.0
Behavior4/5

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 adds genuinely useful context: an auth requirement, an env-var credential fallback, and the explicit error-retry sequence. Caching behavior lives in the schema rather than here, which is a minor omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, with the multi-step recovery instructions following. Dense and mostly waste-free, though the credential-fallback sentence is fairly long for an edge case.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 describing the return shape (per-course attended/total/percentage). Auth prerequisites and the error path are covered; only pagination/cache specifics are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented in the schema. The description only restates that semesterId is optional and defaults to the current semester, adding no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and clarifies scope ('for all courses') plus the returned shape (attended/total/percentage per course), which implicitly separates it from get_attendance_detail and calculate_attendance. It never names those siblings, so differentiation is inferable rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete recovery workflow (on NOT_AUTHENTICATED call get_captcha then login then retry) and states that semesterId is optional and omitting it uses the current semester. It does not compare against the sibling attendance tools, so the agent must infer which tool to prefer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_attendance_detailA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoISO date YYYY-MM-DD to check. Omit to list every posted session for the course.
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
courseCodeYesCourse code, e.g. 'BCSE302L' (case-insensitive).
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/destructive annotations, it discloses the crucial interpretation rule that a date with no row means NOT POSTED and never absent, plus the auth-required prerequisite and the recovery sequence for NOT_AUTHENTICATED. These are genuine behavioral facts an agent cannot derive from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by usage, then edge-case semantics, then auth. Each sentence carries information, though the density makes it slightly more crowded than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does explain the outcome values and the NOT POSTED convention, and it covers the auth prerequisite and cache behavior (via the refresh param, documented in the schema). It is complete enough to call the tool correctly, though it could say more about failure or error outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents courseCode, date, refresh and semesterId in detail. The description largely restates the date-omission behavior the schema already states, adding only the NOT POSTED interpretation, so it does not meaningfully exceed the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: per-class attendance for one course, returning every posted session with its date and outcome (Present / Absent / On Duty). This clearly distinguishes it from a coarse attendance summary. It does not explicitly name sibling tools like get_attendance or calculate_attendance, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete worked query ('was I present on 2026-10-12 in BCSE302L?'), states when to include the date versus omit it, and describes the NOT_AUTHENTICATED recovery flow (get_captcha then login then retry). What is missing is explicit routing against sibling attendance tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_calendarA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoRestrict to one month as 'YYYY-MM' (e.g. '2026-01').
queryNoCase-insensitive search of event/holiday names (e.g. 'technovit', 'pongal').
classGroupNoWhose calendar: COMB (combined, the default), ALL (General), FS (Freshers), FT (Fast Track) and programme variants. VTOP publishes the list per semester; anything unrecognised returns whatever VTOP serves for it.
semesterIdNoSemester 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.
holidaysOnlyNoReturn only non-instructional (holiday / no-class) days.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, but the description adds substantive behavior beyond them: a login prerequisite, the NOT_AUTHENTICATED sentinel and its recovery chain, the term-scoped nature of festivals, and what the unfiltered default returns. These are non-obvious runtime traits 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: resource and contents first, then per-filter usage, then recovery paths. Slight redundancy where the semesterId term-scoping explanation is repeated between description and schema, but every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 default return set and the NOT_AUTHENTICATED error sentinel. Combined with 100% schema coverage and annotations, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the per-parameter baseline is 3. The description goes further by explaining cross-parameter behavior not in the schema — the default result when no filter is supplied, and the term-scoping that governs query/semesterId — which genuinely aids correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific resource (academic calendar) and enumerates its contents: holidays, events, working Saturdays/day-orders, and instructional days. It also names a sibling (get_semesters) for the term-scoping case, so the agent can distinguish it without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly maps each filter to an intent (query for a named event, month for a listing, holidaysOnly for no-class days, no filter for notable days) and gives a concrete fallback: if query finds nothing, call get_semesters and retry. It also prescribes the exact recovery path on NOT_AUTHENTICATED (get_captcha then login then retry).

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 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 captchaFile from the response and read that, or ask the user to open it and tell you the characters. A guess is always wrong and counts as a real failed login attempt against the student's account. After reading it, immediately call login — the image is only valid for 30-60 seconds. Failures come back as structuredContent.error.code (e.g. RECAPTCHA_REQUIRED, CAPTCHA_NOT_FOUND) with an ordered recovery plan.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations say readOnlyHint=false, and the description explains exactly why: it saves the image to a file. It adds genuinely new behavioral context beyond annotations — a 30-60 second validity window tied to the next `login` call, plus structured failure modes (structuredContent.error.code such as RECAPTCHA_REQUIRED, CAPTCHA_NOT_FOUND) with an ordered recovery plan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the essential purpose and the critical 'don't guess' rule, and every sentence carries actionable weight. It runs long, but the length is justified by the anti-guessing safety warning and the error-code/recovery detail; no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return-value burden and does so: it explains that the response contains an image plus a saved file and structured error codes. Combined with the timing and sequencing guidance, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4. The description usefully references a response field (`captchaFile`) the caller must consume, but does not elaborate further since there is nothing to document on the input side.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('fetch a CAPTCHA image from VTOP') and explicitly positions it as 'Step 1 of login', making its role in the flow unambiguous. It also discloses the side effect of saving the image to a file, so an agent can distinguish it from the sibling `login` and other read-only getters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (immediately before `login`), what to do instead when the image isn't readable (open `captchaFile` or ask the user), and a hard prohibition ('never invent the characters', 'do NOT guess'). It even names the consequence of misuse (counts as a real failed login).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_course_basketA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCourse code or title fragment to look up, e.g. 'CSD3002' or 'salesforce'.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds real context beyond that: it requires login, and it queries the programme catalogue rather than the caller's enrolment records, which shapes expectations about which courses can be returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then input forms, then scope caveat, then auth note. No filler and nothing repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return burden and does so: basket name, credits and completion state are all named. Input forms, scope (catalogue not personal records) and login requirement are covered, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is already exemplified there, so the baseline is 3. The description adds genuine meaning: a title fragment matches potentially many catalogue courses, so 'get back every matching catalogue course' clarifies the partial-match, multi-result nature of the lookup rather than the one-code-one-result assumption.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Which curriculum basket a course belongs to') and immediately illustrates both accepted input forms. A reader can distinguish it from the plural sibling get_curriculum_baskets (which lists baskets) without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use context: 'Works for courses you have never taken — it reads the programme catalogue, not your records,' which tells the agent this is catalogue lookup rather than a personal-record query. It does not, however, explicitly name the alternative tools (get_curriculum_baskets, get_curriculum_progress) or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_curriculum_basketsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's 'Read-only' is redundant. It does add two things beyond the structured data: the authentication requirement ('Requires login') and the data-provenance caveat that vtopMarkedCompleted is VTOP's own marking reported verbatim, which prevents the agent from treating it as a computed value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool returns, then the routing alternative, then two short operational flags. The field enumeration in sentence one is long but earned, since there is no output schema to document the return shape. No filler or restated platitudes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 describing returns and it does so concretely, plus it flags the login prerequisite. It stops short of mentioning pagination, volume, or failure behaviour, which an agent calling a full programme-wide curriculum query would benefit from knowing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description instead spends its budget on describing the returned shape, which is the right trade for a parameterless query tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('Programme curriculum baskets') and enumerates exactly what each category/course row contains (code, title, type, version, L/T/P/J, credits), so the agent knows precisely what comes back. It distinguishes itself from one near-neighbour by naming get_pending_subjects, but never addresses the confusingly similar sibling get_course_basket, which is the most likely source of mis-selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance: use get_pending_subjects when you want completed-vs-left rather than the raw baskets. That gives a clear condition plus an alternative. It does not, however, tell the agent when to prefer this over get_course_basket, leaving the closest sibling unresolved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_curriculum_progressA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_scheduleA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the NOT_AUTHENTICATED → get_captcha → login → retry sequence, the fact that login auto-uses VTOP_USERNAME/VTOP_PASSWORD, and the fallback of asking the user for credentials. It omits return-format/pagination detail, but the enumerated fields largely cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the returned data, then the auth fallback chain. Every sentence carries operational weight (what it returns, auth requirement, recovery steps), though the auth instructions are dense enough that the description runs long for a read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 listing the returned fields, and it fully covers the auth prerequisite and failure handling. Nothing an agent needs to invoke it correctly is missing, aside from minor detail on pagination or empty-result behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (refresh, semesterId) are already fully documented in the schema, including cache behavior. The description's note that semesterId is optional and omitted for the current semester only echoes the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get exam schedule) and enumerates exactly what it returns: CAT1/CAT2/FAT dates, timings, venues, seat numbers, row/col. This is clearly distinguishable from sibling read tools like get_marks, get_timetable, and get_semester_grades.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditions: 'semesterId is optional; omit for current semester' and 'Requires login,' plus an explicit recovery path when auth fails. It doesn't name alternative tools for overlapping needs, but for a single-purpose lookup the when-to-use guidance is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fee_receiptsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
receiptNoNoA receipt number from a previous get_fee_receipts call, to fetch that receipt's detail breakdown instead of the list. Omit for the full list.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real context beyond them: it requires login, amounts are as printed, and no currency conversion applies. A useful addition to an otherwise well-annotated read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and its fields, then usage, then caveats. Tight overall, though 'Read-only.' slightly duplicates the readOnlyHint annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param read tool with no output schema, the description compensates by naming the returned fields and the auth requirement. Complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents receiptNo including its 'omit for full list' semantics. The description restates but adds little beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (fee payment receipts) and enumerates the exact fields returned (receipt number, date, amount, campus). No sibling tool covers fee receipts, so the agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes the two modes: omit receiptNo for the full list, pass it to get a single receipt's detail breakdown. This gives clear conditional usage, though there are no true alternatives to steer away from.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_grade_historyA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_internal_totalsA
Read-onlyIdempotent

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: scoredSoFar (exact), percentOfScale, and outstanding - components VTOP has not published yet, since it omits them rather than showing zero. Your marks can only rise. Where the attendance component is still outstanding, attendanceForecast projects what your current attendance is worth out of 5 — remember these marks are only awarded after the last instructional day, so it is a projection, not a settled score. outstanding means no mark is published yet: usually the faculty has not entered it, which is not the same as the component being unconducted. The letter grade is awarded RELATIVELY against the class average, so the 100 total does not map directly to an S/A/B. semesterId is optional; omit for current semester. Requires login.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already covering the read-only/idempotent profile, the description adds substantial behavior: it explains that VTOP omits unpublished components rather than zeroing them, that 'outstanding' does not mean unconducted, that attendanceForecast is a projection paid only after the last instructional day, that grades are relative to class average, and that login is required. This is exactly the kind of domain-specific caveat 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is dense and front-loaded on the totals concept, but the ordering directive and the inline component arithmetic (40 = 35+5, CAT-I 15 + CAT-II 15, etc.) make it longer than necessary and push operational caveats into a single run-on block. It is information-rich but not tightly structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return-value burden and does so thoroughly, defining scoredSoFar, percentOfScale, outstanding, and attendanceForecast and explaining the edge cases behind them. An agent has enough to interpret the response and to call the tool correctly with no required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in structured form. The description restates that semesterId is optional and defaults to the current semester, which duplicates the schema rather than adding syntax or format detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('TOTAL internal marks for every subject') and pins down the aggregation being performed, which separates it conceptually from raw-mark siblings like get_marks. However, it never names or explicitly differentiates itself from get_marks or get_semester_grades, so the agent must infer which sibling to prefer from context alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the reader learns the tool returns totals and should order output a certain way, and that semesterId may be omitted. There is no statement of when to call this versus get_marks or get_semester_grades, and no when-not conditions. The 'refresh' trigger lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leave_historyA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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 two pieces of non-obvious context: statuses are reported verbatim as VTOP prints them (no normalization) and that authentication is required. It does not discuss result size or pagination for a full-history tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope, followed by the field enumeration, usage triggers, and the status/login caveats. Dense but every element earns its place; the long field list is slightly padded but serves as a return-value preview absent an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description compensates by naming the returned fields, the exact status representation, the auth requirement, and the sibling boundary. An agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema baseline is 4 and there is nothing to disambiguate. The field list in the description describes outputs, not inputs, which is fine and not counted against it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Full hostel leave history') and enumerates the record fields returned (id, type, place, reason, from/to, status, approver remarks, gate-pass state). It explicitly distinguishes itself from the sibling get_leave_status, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete triggers ('what leaves have I taken?', past-leave questions) and names the alternative tool plus the condition that selects it (get_leave_status for current state). This is explicit when-to-use/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leave_statusA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description's 'Read-only' adds little. It does add valuable behavioral context: 'Requires login' and the caveat that gate-pass flags are only present 'where VTOP publishes them,' disclosing nullable fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-structured sentence lists fields and ends with read-only and auth notes. Front-loaded with the core purpose and no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 describing returns and does so thoroughly, including verbatim status values and conditional gate-pass fields. It lacks explicit routing to alternatives, but is otherwise complete for a no-arg read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so baseline is 4. The description correctly documents that no input is required and instead details the return shape, which is the relevant information for a no-arg tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get hostel leave applications + approval status) and enumerates exactly what fields are returned. It is clearly distinguishable from siblings like get_leave_history and apply_leave.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it returns current leave applications with status, which positions it against get_leave_history and get_leave_type_rules, but it never explicitly states when to use this versus those alternatives. Usage is only weakly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leave_type_rulesA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
leaveCodeNoA single code to probe (SO, WP, EP, SV, WV, HT1, LG1, EY1, OG1). Omit for all.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces them with a concrete guarantee ('this never submits a leave application'). It adds genuinely new context beyond annotations: the call mimics the dropdown's network request, and the return is unstructured raw text ('e.g. HOME TURN caps at 14 days'), which tells the agent to expect unparsed output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with 'Diagnostic:' so the agent's role for the call is immediately clear, and each sentence carries distinct information (purpose, safety, rationale, return shape). Slightly padded by the parenthetical example and the 'read directly rather than guessed' flourish, but no dead weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one optional param, no output schema, and rich annotations, the description covers the key unknowns: it discloses that the output is raw unparsed text and why the tool exists. Remaining gaps are minor — no guidance on error/throttling behavior when probing all types at once.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already lists the codes and the 'Omit for all' behavior, so the description's 'Omit leaveCode to probe every type' is largely a restatement. It frames the parameter's intent (probing) but adds no format, syntax, or failure semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('ask VTOP what rules apply') and resource (hostel leave-type rules: max days, limits, required fields), plus the mechanism (replays the dropdown request). It is clearly distinguishable from siblings like get_leave_types, apply_leave, and get_leave_history, which an agent can separate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains when to reach for it ('day limits are server-side rules otherwise only discoverable by submitting and being rejected') and gives the probe-all case ('Omit leaveCode to probe every type'). It implies the alternative (apply_leave) but never names it explicitly or states a when-not condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leave_typesA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered by structured data. The description adds genuinely useful behavior beyond that: the output is read from the live form (so it is not a static enum), that labels are unsafe to submit, and that login is required, which is not captured by openWorldHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is well front-loaded, but the leave-form caveat is embedded mid-clause and the unrelated 6 PM in-time rule plus login note are bolted on, making the payload feel like three loosely related facts rather than one tight definition. Every clause is arguably useful, but the structure is not clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description carries the burden of telling the agent what comes back, and it does so for the critical field (code vs label) and the login prerequisite. It is slightly over-stuffed with unrelated policy (6 PM rule) that is already its own sibling-ish concern, but an agent has enough to call and consume it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema defines nothing to document. The description appropriately uses the space to explain how to interpret the returned data (use the code, not the label), which is the only semantic question a caller of a zero-arg list tool could have.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (hostel leave types) and adds critical scoping detail that the values come from the live form rather than a cached assumption. Distinguishable from the sibling get_leave_type_rules, which presumably covers policy rather than the enumeration of types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies this is the lookup step before apply_leave by instructing 'Use the CODE, not the label', which tells the agent how to consume the result. It does not explicitly name apply_leave or get_leave_type_rules as the downstream/alternative tool, so full sibling routing is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_marksA
Read-onlyIdempotent

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 recovery array and retry. Requires login.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds genuinely new behavior: it requires login and tells the agent to follow the error's `recovery` array on NOT_AUTHENTICATED. It stops short of explaining pagination or the shape of the recovery flow, keeping it at a strong 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then the alternative, then optional-param and error-handling notes. Every sentence carries information, though the dense field enumeration is slightly heavy. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description thoroughly describes the return fields, the auth requirement, and the error-recovery path. For a two-param read tool whose annotations already carry the safety profile, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented, including the cache-bypass semantics of `refresh` and the format of `semesterId`. The description's 'semesterId is optional; omit for current semester' merely restates the schema, adding no new syntax or constraints. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 enumerates the exact fields returned per component (raw marks, max marks, weightage, class average, status). It explicitly distinguishes itself from the sibling get_internal_totals, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (get_internal_totals) and the exact condition that selects it ('when you want the TOTAL for each subject rather than the component breakdown'). It also gives guidance on the optional semesterId and what to do on a NOT_AUTHENTICATED response.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pending_subjectsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, so the bar is lower; the description still adds auth context ('Requires login'), the rule that disagreements are surfaced in discrepancies rather than silently resolved, and the elective N-of-M completion model. 'Read-only' merely restates the annotation, but the discrepancy and derivation semantics are genuine added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core meaning ('Subjects still to complete:') before the dense computation rules. Sentences carry distinct semantic load, though the em-dash-heavy style packs several rules into long clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 must characterize the return payload, and it does: names and credits, category totals showing how far short, VTOP's own row marking, and a discrepancies section. An agent knows both what triggers the tool and what comes back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing to document and the schema is trivially sufficient. Baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: the curriculum basket courses still outstanding after grade-history passes are subtracted. An agent can tell it computes pending status rather than a raw listing like get_curriculum_baskets or get_grade_history, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and the phrase 'Subjects still to complete' — reach for it when you need outstanding requirements. There is no explicit when/when-not statement and no named alternative to route between against get_curriculum_progress or get_course_basket.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_proctor_detailsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the login prerequisite, which the annotations do not capture, though it does not describe pagination, error behavior, or freshness of the data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The field inventory is front-loaded and the two trailing sentences (read-only, requires login) are short and relevant. The field enumeration is somewhat list-like but earns its place given there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the full burden and does so by enumerating the returned fields. It also covers the auth and read-only traits, so nothing needed to invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for a parameterless tool is 4. The description's field list describes output, not inputs, which is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (proctor contact details) and enumerates exactly what is returned: faculty id, name, designation, school, department, cabin, email, intercom, mobile. It also distinguishes itself from the sibling get_student_profile by clarifying it exposes the same proctor data via the standalone proctor page, so an agent can choose between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mention that this is the same data as the proctor section of get_student_profile implies an alternative route, but it never states an explicit when-to-use rule or preference between the two. Usage is inferable rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_gradesA
Read-onlyIdempotent

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 published: false, gpa: null and an explanatory message — that is NOT a GPA of 0. semesterId is optional; omit for current semester. If the response contains NOT_AUTHENTICATED, follow the error's recovery array and retry. Requires login.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, and the description goes well beyond them: it pre-empts a false reading of `gpa: null` as zero during in-progress semesters, states login is required, and prescribes the NOT_AUTHENTICATED `recovery` retry path. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then layers the important gotcha and the auth-recovery note as short, high-value sentences. Dense but every clause carries operational meaning, with only mild redundancy around semesterId's optionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 describing returns and does so for the non-obvious case (published:false, gpa:null, explanatory message), plus auth and cache behavior. An agent has what it needs to call and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented at the field level; the description's note that semesterId is optional and defaults to the current semester largely repeats the schema. The `refresh` cache-bypass parameter is not mentioned at all, so no value is added there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get grades) scoped to a specific semester, and enumerates the content (course-wise letter grades + GPA). That scoping distinguishes it from siblings like get_marks and get_grade_history without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating conditions: semesterId is optional and omitted means current semester, and in-progress semesters are called out with expected output. It never names an alternative (e.g. get_grade_history for cumulative records), so the 'use this instead of X' dimension 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_semester_infoA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only/idempotent annotations, it discloses the important domain behavior that when teachingOver is true attendance is locked/final rather than projectable, and that login is required. This is non-obvious semantic context an agent cannot get 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Field list is front-loaded, followed by the teachingOver caveat and usage questions. Three sentences that each carry information, with no filler. Slight redundancy in restating return fields, but efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of describing return values, and it does so thoroughly (all fields listed plus the locking semantics). Combined with the auth requirement note, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (refresh cache behavior, semesterId defaulting to current) are fully documented in the schema itself. The description adds no parameter-level detail beyond what the schema already provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific resource (semester term bounds) and enumerates the exact fields returned: id, name, first/last instructional day, totals, days remaining, teaching-over flag. This is far more concrete than a tautology. It does not explicitly name how it differs from siblings like get_semesters or get_calendar, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit user-facing questions this answers ('when does my semester end?', 'how many teaching days are left?'), which is clear usage context. However it does not name the alternative tools (e.g. get_calendar or get_semesters) or state when-not to use it, so it does not reach a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_semestersA
Read-onlyIdempotent

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 recovery array (get_captcha then login) and retry this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses non-obvious ordering: VTOP returns semesters newest-first, index 0 is current, index 1 is the most recent completed term, and the last element is the oldest. It also warns that taking the last element silently returns the student's first semester and documents structured error handling via structuredContent.error.code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the tool's purpose, then immediately gives the critical ordering caveat, usage guidance, and error recovery. Every sentence provides operational value for correct invocation or interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description fully covers return contents, ordering, defaulting behavior of related tools, and authentication error recovery. An agent has enough information to call this correctly and interpret the result safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no input parameters, so the baseline is 4. The description appropriately does not invent parameter semantics, though it notes the response carries id and name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get list of available semesters', with output shape '(id + name)'. It also distinguishes its scope from other data tools that default to the current semester when semesterId is omitted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says most data tools default to the current semester, so 'you usually don't need to call this unless the user asks about a specific past semester.' It also gives a concrete recovery path for NOT_AUTHENTICATED errors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_student_profileA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds materially beyond them: it warns the response is sensitive PII returned verbatim, instructs keeping it in the student's own session, states login is required, and documents the NOT_AUTHENTICATED recovery sequence plus credential handling. This is exactly the extra operational context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the get_profile distinction, then privacy, then auth recovery — a sensible ordering. It is somewhat long, and the multi-step captcha/login/retry and env-var fallback detail is verbose for a no-arg reader, but each sentence carries actionable content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 returned sections and the field categories (DOB, addresses, board/school, parents, proctor contact, hostel block/room). Combined with the auth-requirement and recovery flow, an agent has everything needed to call and handle the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters (empty schema, 100% coverage), so there is nothing to disambiguate and the baseline of 4 applies. No parameter meaning is present or needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (full student profile) and enumerates the exact content — the five accordion sections (personal, educational, family, proctor, hostel) with verbatim values. It also names what it excludes relative to the sibling get_profile (name/programme/branch/email/phone), so an agent can distinguish the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Use this instead of get_profile when you need anything beyond name/programme/branch/email/phone', and lists the additional fields that justify the switch. It further specifies the auth recovery path (call get_captcha then login then retry on NOT_AUTHENTICATED) and the env-var/credential-prompt fallback, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_timetableA
Read-onlyIdempotent

Get class timetable: registered courses with slots, venues, faculty and credits, plus the actual weekly schedule. Each course carries a sessions array with every meeting it has (day, slot, THEORY/LAB, start and end time, venue) — a course with two slots a week appears twice. The top-level day/startTime/endTime mirror the first session. Use get_today_classes for 'what do I have today' (it applies the academic calendar and day-order overrides). semesterId is optional; omit for current semester. If the response contains NOT_AUTHENTICATED, follow the error's recovery array and retry. Requires login.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the short cache and re-read the page from VTOP. Results are cached for 60 seconds so follow-up questions are instant; set this when you specifically want to know whether something has just been updated.
semesterIdNoSemester ID (e.g. 'AP2024251'). If omitted, uses the current/latest semester.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), and the description adds genuinely new behavioral context: it requires login and prescribes a recovery procedure when the response contains NOT_AUTHENTICATED. It does not mention the 60-second cache at the description level (that detail lives in the refresh parameter schema), so it falls just short of the top mark.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then routing, then parameters, then auth guidance in a logical order. The sentence on the sessions array is somewhat detailed but justified because no output schema exists; overall density is high but each sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 explaining the response shape (courses, sessions array, duplicated multi-slot courses, top-level fields mirroring the first session), and it covers the auth failure path. Nothing an agent needs to call and interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the caching rationale for `refresh`, so the schema already does the heavy lifting. The description only restates that semesterId is optional and defaults to the current semester, adding nothing beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('Get class timetable') and enumerates the returned content (courses with slots, venues, faculty, credits, plus weekly sessions) at a level that lets an agent distinguish it from the other schedule-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Use get_today_classes for "what do I have today"' and explains why (it applies the academic calendar and day-order overrides). It also states the semesterId default ('omit for current semester') and the login prerequisite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_today_classesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoISO date YYYY-MM-DD to look up. If omitted, uses today (IST).

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. Failures return structuredContent.error with a code and needsUserInput; on CREDENTIALS_REQUIRED the captcha you already hold is still valid, so reuse it rather than fetching a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault
captchaYesCaptcha solution from the get_captcha tool
passwordNoVTOP 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.
usernameNoVTOP 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

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, openWorld=true, destructive=false). The description goes well beyond: env-var fallback semantics, the shape of failure output (structuredContent.error with code and needsUserInput), and the CREDENTIALS_REQUIRED captcha-reuse behavior. This is rich behavioral disclosure an agent could not 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded — the 'Step 2' framing and captcha requirement come first, followed by credential fallback and error handling. It is long but every sentence carries operational value; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains the error return shape and recovery path, and covers the credential/config edge cases. An agent has everything needed to call this and handle failures correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description reinforces the optionality of username/password and adds a decision rule (only prompt the user when configuration is missing) plus captcha lifecycle details that the schema alone doesn't convey, nudging it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Step 2 of login: submit credentials + the captcha'), and positions itself in a sequence relative to the get_captcha sibling ('the captcha you just OCR'd'). An agent can distinguish this from get_captcha and logout without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit conditional guidance: omit credentials if env vars are configured, and only ask the user if the server reports they're not configured. It also names the alternative flow (fetch captcha via get_captcha) and instructs reuse over refetching. 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.

logoutA

Logout from VTOP and clear the session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

session_statusA
Read-onlyIdempotent

Report the current VTOP session state: whether a session is active, the registration number, whether credentials are configured, and (with probe: true) whether VTOP still considers the session valid. Call this before logging in if unsure, or when a data tool returns NOT_AUTHENTICATED. Read-only — it never changes anything. Does not require login.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a fact the annotations do not carry: no authentication is required to call it, and it never mutates state. The read-only/no-change claim partially restates readOnlyHint and destructiveHint=false, but the 'does not require login' disclosure is genuinely new and useful for an agent deciding call order.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the returned fields, then usage triggers, then the safety/auth caveat. Every sentence carries information and none repeats the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description enumerates what is reported, which is exactly what the agent needs. The only gap is the undeclared `probe` parameter, which is not reflected in the schema and would need to be resolved elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters the baseline is 4, but the description references a `probe: true` argument while the input schema declares an empty properties object. An agent following the description would attempt a parameter the schema does not expose, creating real ambiguity that offsets the otherwise clean no-param case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (report) and enumerated resource elements: active session, registration number, credential configuration, and optional validity probe. It is immediately distinguishable from siblings like logout and login, which act on the session rather than report on it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggers: 'Call this before logging in if unsure' and 'when a data tool returns NOT_AUTHENTICATED.' It names the condition and the situation, leaving nothing to inference about when to reach for this instead of login.

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.

  1. 33 tool updatesv0.1.5
    • First observedapply_leave
    • First observedcalculate_attendance
    • First observedcancel_leave
    • First observedcheck_pass_eligibility
    • First observedget_acknowledgments
    • First observedget_attendance
    • First observedget_attendance_detail
    • First observedget_calendar
    • First observedget_captcha
    • First observedget_course_basket
    • First observedget_curriculum_baskets
    • First observedget_curriculum_progress
    • First observedget_exam_schedule
    • First observedget_fee_receipts
    • First observedget_grade_history
    • First observedget_internal_totals
    • First observedget_leave_history
    • First observedget_leave_status
    • First observedget_leave_type_rules
    • First observedget_leave_types
    • First observedget_marks
    • First observedget_pending_subjects
    • First observedget_proctor_details
    • First observedget_profile
    • First observedget_semester_grades
    • First observedget_semester_info
    • First observedget_semesters
    • First observedget_student_profile
    • First observedget_timetable
    • First observedget_today_classes
    • First observedlogin
    • First observedlogout
    • First observedsession_status

TDQS

A4.1/5.0

Scored across 33 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers