Skip to main content
Glama

Omnivox MCP

A self-hosted toolbox that logs into Omnivox once and lets anything talk to it — Claude over MCP, any assistant that can call plain HTTP tools, or your own scripts.

Under the hood it runs a persistent Puppeteer browser logged into your Omnivox session, executing requests through the mobile app's own JavaScript (without any scraping) — so challenge-response auth, cookies, and encoding are all handled natively.

Core Features

  • An MCP server: 34 tools covering all of LEA, MIO messaging, schedule, calendar, documents, assignments, and college news.

  • An OpenAPI tools gateway: every MCP tool doubled as a plain HTTP endpoint, with a live catalog and a full OpenAPI 3.1 spec at GET /openapi.json. Virtually any assistant or agent framework that supports JSON-described tools can use it.

  • A raw Omnivox proxy: /Mobl/* passes any request straight through the authenticated session, for direct access to JSON data from the Mobile API directly.

  • A research effort: the mobile API this all sits on is undocumented, so we document it ourselves as we reverse-engineer it. The growing field notes live in docs/.

Everything runs on your machine (or your server, or a container). One instance = one Omnivox account.

Quick start

# 1. Clone and install
git clone https://github.com/Beat-YT/omnivox-mcp.git
cd omnivox-mcp
npm install

# 2. Authenticate on a desktop with UI (first time only)
cd omnivox-connection
npm install && npm start
# Log in through the Electron window, save cookies.json + config.json,
# then place them in a folder named data/ at the project root (or your OMNIVOX_DATA_DIR)

# 3. Start the server
cd ..
npm start              # Express server on port 3000

The server starts with MCP-over-HTTP at /mcp?key=..., the REST tool gateway, and the proxy. An access key is auto-generated at data/accessKey.txt — that's your password to the whole thing, treat it accordingly.

(There's also a stdio mode, npm run start:stdio, where an MCP client launches the server as a subprocess — deprecated and not recommended.)

Docker

Prefer containers? Authenticate once with the Electron app, then copy the example compose file and set your data folder path:

cp docker-compose.example.yml docker-compose.yml
# Edit docker-compose.yml — replace /path/to/config/folder with your data folder
docker compose up -d

The included docker-compose.example.yml mounts your data folder into the container at /data/omnivox, exposes port 3000, sets a session-keeping refresh interval, and wires up a healthcheck. Your customized docker-compose.yml is gitignored.

Re-authentication

If your session expires or you want a different account, reset and log in again:

npm run reset
cd omnivox-connection && npm start
# Log in, save the two files, place them back in your data folder
cd .. && npm start

npm run reset clears browser/, cookies.json, config.json, and accessKey.txt from the data folder so the server starts fresh.

Configuration

Set these as environment variables or in a .env file at the project root:

Variable

Default

Description

PORT

3000

Server port

OMNIVOX_DATA_DIR

data/ at the project root

Data directory for config, cookies, browser profile, and access key

OMNIVOX_CONFIG / OMNIVOX_COOKIES

(none)

Contents of config.json / cookies.json (JSON or base64), for hosts where a volume isn't an option. Only used when the file is missing.

BROWSER_LAUNCH_ARGS

(none)

Extra Chrome flags appended to the default launch arguments, space-separated. Useful in Docker where Chrome runs as root and needs --no-sandbox --disable-setuid-sandbox.

BROWSER_SLEEP

false

When true, the browser closes after 5 minutes of inactivity and relaunches on the next request. Saves memory at the cost of a cold-start delay. Not recommended for Docker setups

BROWSER_REFRESH_INTERVAL

(disabled)

Interval in minutes between automatic page refreshes to keep the Omnivox session alive. Recommended for long-lived instances (e.g. 10). Disabled when BROWSER_SLEEP is true.

MCP_SERVER_URL

(none)

Optional. Public base URL that enables download link generation (get-document-link / get-assignment-file-link). Set to your public domain (e.g. https://omnivox.example.com).

ENABLE_EXTERNAL_SERVICE_LINKS

false

When true or 1, enables get-service-link tool which hands pre-authenticated links to web-only Omnivox services (lockers, advisor appointments, progression chart, ...). These link logs into the full web portal, which is why it is off by default. Enable at your own risk. With MCP_SERVER_URL set the tool returns a short link; otherwise it returns the raw single-use URL.

DISABLE_LOGGER

3000

Disables server.log file writing in data folder

Related MCP server: unofficial-magister-mcp

Using it

With an MCP assistant

Connect your MCP client to http://localhost:3000/mcp?key=YOUR_KEY via Streamable HTTP transport. That's it — the assistant gets all 34 tools and you can ask about grades, schedules, assignments, or messages in natural language.

With any other assistant (REST tool gateway)

No MCP? No problem. Every tool is a plain HTTP endpoint, and the catalog is self-documenting two ways: GET /tools returns names, descriptions, and JSON Schema inputs, while GET /openapi.json serves a full OpenAPI 3.1 spec — import it into anything that speaks OpenAPI (custom GPT actions, Open WebUI, LangChain toolkits, ...). Feed either to your assistant, POST its tool calls through, done.

# List all available tools (with their input schemas)
curl http://localhost:3000/tools -H "x-mcp-auth: YOUR_KEY"

# Get your courses
curl -X POST http://localhost:3000/tools/get-courses-summary \
  -H "x-mcp-auth: YOUR_KEY" -d '{}'

# Check your grades
curl -X POST http://localhost:3000/tools/get-grades-summary \
  -H "x-mcp-auth: YOUR_KEY" -d '{}'

# Read your inbox
curl -X POST http://localhost:3000/tools/get-mio-messages \
  -H "x-mcp-auth: YOUR_KEY" -d '{}'

The tools endpoint accepts JSON bodies regardless of Content-Type — no need to set it explicitly.

Straight to Omnivox (the proxy)

For anything the tools don't cover, /Mobl/* forwards requests directly to Omnivox's mobile API through the authenticated browser — any method, any content type, session cookies included:

curl -X POST http://localhost:3000/Mobl/LeaEtudiant/GetNotesDetailModel \
  -H "x-mcp-auth: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"AnSession":"20261","noCours":"2434K6EM","noGroupe":"1011"}'

Pair it with the endpoint notes in docs/ and you have the whole mobile API at your fingertips.

In your own projects

The gateway isn't just for AI — it's a full Omnivox API for anything that speaks HTTP:

  • Grade dashboard — pull your grades into a web app or spreadsheet

  • Schedule widget — your timetable on a home screen or desktop widget

  • Assignment tracker — notifications for new assignments and deadlines

  • Discord/Slack bot — get pinged when grades or messages land

  • Mobile app — a custom Omnivox client with just the features you care about

  • Data export — archive your grades, documents, and messages

Python, JavaScript, Swift, Kotlin, Go — whatever you like. Start from our docs.

The research corner

Omnivox's mobile API has no public documentation, so this repo doubles as a field guide. docs/ collects what we've mapped so far:

  • Per-module endpoint docs — request bodies and response shapes for every /Mobl/ controller we've charted, from LÉA grades to MIO messaging.

  • The service manifest — how GetOffreService describes the modules the app is assembled from, what the flags actually mean, and how its change-detection hash is built.

  • The native bridge — how the mobile pages talk to the host app through ComNatifOvx.js: per-platform transports, the command/callback convention, and why it stays backward compatible with old app versions.

  • The web handoff: how a portal-only module in the manifest turns into the pre-authenticated URL the app opens in a native window, layer by layer.

  • Conventions — the ×100 fixed-point grade encoding, int-sentinel "no value" markers, term ID format, the common response envelope.

Some of it was found by reading the app's bundle, some by probing live endpoints — including a few natively-served endpoints the official app doesn't even use anymore (that's how per-evaluation grades work here without HTML scraping). If you chart new territory, contributions are warmly welcome.

Will this break?

The usual worry, on reading that this fakes the native app's JavaScript bridge: surely the next Omnivox update kills it. It doesn't, and not by luck. The mobile pages are served fresh from Omnivox on every load, but the native app only changes when a user installs a store update, so Skytech's own JS has to keep working against every app build still installed anywhere. It is written to assume nothing about the bridge: unknown commands are swallowed, unanswered callbacks are tolerated, and anything new is gated behind the app version the user agent declares. We pin that version, so the page never asks for something the emulated bridge doesn't know.

What can drift is the ordinary stuff: a /Mobl/ response shape (fixed in a transformer, like any API client) and a session that eventually expires (log in again). The bridge is the least likely thing here to need attention. The mechanics, with the exact gates, are in the native bridge notes.

Documentation

The Wiki is the operator's manual:

  • Setup — prerequisites, installation, first login, Docker, VPS deployment, security precautions

  • Connecting Assistants — MCP client configs, and non-MCP assistants via the tool catalog / OpenAPI spec

  • Troubleshooting — common issues and fixes

For the API surface itself, the server is self-documenting: GET /tools and GET /openapi.json always reflect the running instance, and the Omnivox mobile API notes live in docs/.

Security

The short version: this behaves like a browser you left logged in on your own computer — nothing more, nothing less. The longer version, because it matters:

Your password and 2FA are untouched

  • You log in yourself, on the real login page. The Electron app opens the official Omnivox login — password, 2-Step Verification, trusted-device prompt and all. This project never asks for, sees, stores, or replays your password or MFA codes.

  • MFA keeps working. Omnivox's 2-Step Verification is fully compatible: you complete it once during login, and the resulting session (including the trusted-device cookie) is stored exactly as any browser would store it. Nothing here bypasses, weakens, or automates any Omnivox security mechanism — requests run through Omnivox's own JavaScript, so challenge-response auth and session expiry work exactly as Skytech designed them.

  • Keep MFA enabled. This project works fine with it, and you should absolutely leave it on.

What's stored, and where

  • Session cookies and browser profile — the data folder on your disk (data/ in the project, gitignored), same as a logged-in browser. Nothing is sent anywhere else.

  • Access key — data/accessKey.txt, auto-generated, protects every endpoint the server exposes.

  • No external servers, no telemetry. Everything runs on your machine or your server; all traffic goes directly between you and Omnivox. The codebase is open — audit it.

What the access key can do

Treat accessKey.txt like your Omnivox password. Anyone holding it gets your full session: reading grades and messages, sending MIO, downloading documents. If it ever leaks:

  1. Delete accessKey.txt (a new key is generated on restart), and

  2. npm run reset + re-login if you want to invalidate the session itself.

Hardening checklist

  • Don't expose the server to the internet unless you actually need to. Localhost or LAN is the happy default. If you must go public: TLS via a reverse proxy (e.g. Nginx — sample config), and consider IP allowlisting.

  • In Docker, bind to loopback unless you're fronting it with a proxy: "127.0.0.1:3000:3000" instead of "3000:3000".

  • Keep the data folder private — it's gitignored already; add file permissions, and disk encryption if it's a laptop.

  • One instance, one account, by design — there is nothing multi-tenant to leak across.

  • More in Security Precautions.

A note for Skytech

This is a personal-use client for a student's own account — functionally a browser with an API, authenticating through your own login flow, MFA included, one account per instance. It doesn't harvest credentials, doesn't circumvent any protection, and can't see anything the logged-in student can't already see in the portal themselves. If you're from Skytech or a college and have concerns, please open an issue — happy to talk.

Disclaimer

This project is unofficial and not affiliated with, endorsed by, or associated with Skytech Communications, Omnivox, or any Quebec college. It is provided as-is for personal and educational use only. Use it at your own risk — the authors are not responsible for any consequences resulting from its use, including but not limited to account restrictions, data loss, or violations of your institution's terms of service.

License

ISC

Available Tools

38 tools
create-mio-folderCreate MIO FolderC
Destructive

Create a new custom folder in MIO (internal messaging).

NameRequiredDescriptionDefault
nameYesName for the new MIO folder

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the write nature is covered. The description adds nothing about what happens on a name collision, whether duplicates are allowed, whether the call fails or overwrites, or what is returned (a folder id?) — meaningful gaps for an operation the annotations themselves flag as destructive.

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?

A single front-loaded sentence with no filler. It is efficient, though the length means there is essentially no supporting detail.

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

Completeness3/5

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

For a one-parameter creation tool with no output schema, the description covers the what but not the outcome or failure modes. An agent still does not know what happens after creation or how to reference the new folder.

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?

There is a single required parameter with 100% schema description coverage ('Name for the new MIO folder'), so the schema already carries the semantics. The description adds no constraints such as allowed characters, length, or uniqueness rules, leaving it at the 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?

States a specific verb and resource: 'Create a new custom folder in MIO', with a clarifying gloss that MIO is internal messaging. This clearly separates it from the read-style siblings like get-mio-folders, though no sibling is named explicitly.

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

Usage Guidelines2/5

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

There is no guidance on when to create a folder versus using the default folders, no prerequisites, and no mention of the related siblings (move-mio-message, get-mio-folders) that would typically follow. Usage is only implied by the verb.

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

delete-mio-messageDelete MIO MessageA
Destructive

Move a MIO message to trash (not permanent). Use restore-mio-message to undo.

NameRequiredDescriptionDefault
message_idYesThe MIO message ID(s) to delete. Pass a single ID or an array of IDs.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, but the description adds the crucial nuance that this is a soft delete into trash and therefore reversible, which materially changes an agent's risk calculus. It doesn't state retention/expiry of trashed items or whether batch deletes are atomic, so not a 5.

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?

Two short sentences, zero waste, with the most decision-relevant fact (non-permanent) front-loaded and the recovery path second.

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-parameter, no-output-schema tool with full schema coverage, the description supplies the reversibility guarantee and undo route that an agent needs before calling a destructive-annotated tool. Minor gap: nothing about partial failure when an array of IDs is passed.

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% — the schema already documents the UUID format, the single-or-array anyOf, and the source (get-mio-messages). The description adds nothing about parameter behavior, 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 ('Move ... to trash') and resource ('MIO message'), plus a scope qualifier ('not permanent'). It clearly separates itself from restore-mio-message and from move-mio-message (which relocates rather than trashes) without needing the 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?

Explicitly routes the agent to restore-mio-message as the undo path, which is the main decision an agent faces after deleting. It does not address adjacent choices such as flag-mio-message or move-mio-message (folder relocation), so it stops short of full when/when-not coverage.

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

flag-mio-messageFlag MIO MessageC
Destructive

Set flag indicators (important, mark_unread) on a MIO message.

NameRequiredDescriptionDefault
importantYesWhether to flag the message as important
message_idYesThe MIO message ID
mark_unreadYesWhether to mark the message as unread (à relire)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is provided structurally. The description adds no behavioral detail beyond naming the flags, such as whether both booleans are required to be supplied and whether setting them overwrites existing flag state.

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 description is a single efficient sentence with no wasted words and front-loads the operation. It is appropriately sized for a simple flag-setting tool.

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

Completeness3/5

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

The schema fully documents the parameters and annotations provide the mutation safety profile, so the description is minimally sufficient. However, for a destructive flag-setting mutation, it omits important context such as the fact that both flags are required and that setting them may clear existing flags.

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 all three parameters are already documented in the schema. The description mentions the two flag fields but adds no syntax, required-both behavior, or meaning beyond what the schema provides.

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 states a specific action ("Set flag indicators") on a specific resource ("MIO message") and names the two flags being changed. It distinguishes the operation from siblings like read-mio-message or delete-mio-message, though it does not explicitly contrast itself with those alternatives.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as move-mio-message, read-mio-message, or restore-mio-message. Usage is only implied by the tool name and the word "Set".

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

get-absencesGet AbsencesA
Read-only

Retrieve absence summaries for all courses in a given term or the current term.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the useful behavioral detail that the default is the current term, but says nothing about output shape, per-course grouping, or what an 'absence summary' contains.

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?

One sentence, front-loaded with the verb and resource, with the term scoping folded in efficiently. Nothing is redundant, though it is terse enough to leave gaps rather than over-explain.

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

Completeness3/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 essentials are present, but the agent still cannot tell what a returned 'absence summary' looks like or whether results are grouped per course. A brief note on the response structure would close the gap.

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 already documents the YYYYN format for term_id. The description contributes beyond the schema by explaining the optional parameter's default behavior (current term when omitted), which the schema does not state because the field is not required.

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 (retrieve) and resource (absence summaries) with an explicit scope (all courses in a term). It is distinguishable from lookalike siblings such as get-cancelled-classes and get-course-evals, though it never names an alternative directly.

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?

Implicitly tells the agent this is a per-term, all-courses fetch, and that omitting term_id falls back to the current term. There is no explicit when-to-use vs. when-not, and no mention of the neighboring tools an agent might confuse it with.

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

get-assignment-detailGet Assignment DetailA
Read-only

Full detail of one assignment: deadline, instructions, what is in the hand-in deposit, teacher documents and corrected copies, with the file IDs get-assignment-file-link needs. A file in the deposit means something was uploaded, not that the work is finished.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.
assignment_idYesAssignment ID (UUID) from get-course-assignments.

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 and destructiveHint=false, so safety is covered; the description adds real interpretive context beyond them, namely the caveat that a file in the deposit means something was uploaded, not that the work is finished. That is exactly the kind of semantic warning an agent cannot infer from structured fields.

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

Conciseness5/5

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

Two tight sentences with zero waste, front-loaded with the resource and its contents, and the chaining hint to get-assignment-file-link placed where it is actionable.

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 the return payload, and it does so by enumerating the returned sections plus the deposit caveat. It leaves minor gaps (no note on error cases or what happens when the deposit is empty), which keeps it from a 5.

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 all three parameters (including term_id's YYYYN format and course_id's group-number requirement) are already documented in the schema. The description adds no parameter-level detail beyond schema; 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?

Specific verb+resource: full detail of a single assignment, with the returned contents enumerated (deadline, instructions, deposit contents, teacher documents, corrected copies). It is clearly distinguishable from get-course-assignments (listing) and get-assignment-file-link (which consumes the file IDs this tool returns).

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?

The description makes the usage context clear: fetch this to obtain the file IDs that get-assignment-file-link requires, which explicitly routes the agent to the sibling. It does not state exclusions (e.g., when to prefer get-assignments-summary), so it stops short of a full when/when-not treatment.

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

get-assignments-summaryGet Assignments SummaryA
Read-only

Per-course assignment counts for a term, with the titles Lea still lists as to hand in. Only counts assignments teachers posted on Lea; an empty summary does not mean the student is caught up. Use get-course-assignments for deadlines and deposit contents.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only safety, and the description adds non-obvious behavioral context: it only counts assignments teachers posted on Lea, and an empty summary does not mean the student is caught up. It also indicates the return contains counts and pending titles. It doesn't detail output formatting or pagination, but for a summary read this is strong added context.

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 front-loaded sentences with zero waste: purpose first, then the key caveat, then the alternative routing. Every sentence earns its place.

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 read-only summary with one fully documented parameter, no output schema, and annotations that cover safety, the description supplies everything needed: scope, caveat about empty results, and alternative tool guidance. Nothing material 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?

There is one parameter and schema description coverage is 100%, with the pattern and format fully documented. The description only says 'for a term' and adds no syntax or format detail beyond the schema, so 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?

The description specifies the exact resource (per-course assignment counts for a term) plus the extra content (titles Lea still lists as to hand in), and explicitly distinguishes itself from get-course-assignments. An agent can identify the tool's output without opening the schema.

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

Usage Guidelines5/5

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

It names the sibling get-course-assignments and the condition that selects it (deadlines and deposit contents). The caveat about empty summaries further clarifies how to interpret results, leaving little inference.

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

get-calendarGet CalendarA
Read-only

Retrieve the real day-by-day calendar: classes, holidays, day swaps, cancelled classes, exams and deadlines. Prefer this over get-schedule for what happens on a given day. Exam and assignment dates only appear if the teacher entered them on Lea, so read the course syllabus for the full picture.

NameRequiredDescriptionDefault
pageNo
rangeNo

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare this is a safe read-only operation, and the description adds useful behavioral context about data completeness: exam and assignment dates depend on teacher entry and the syllabus should be consulted for the full picture. It does not explain pagination or how the page parameter affects results, which keeps it from a 5.

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 is front-loaded in the first sentence, followed by the sibling comparison and then the data completeness caveat. All three sentences carry useful information with no redundant restatement of the title.

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

Completeness3/5

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

The description explains the calendar contents and the major data limitation, which is helpful for a tool with no output schema. However, it omits parameter behavior for page and range, so an agent still lacks guidance on how to control the returned time window or pagination.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden of explaining the two parameters. It does not explain what 'page' controls or clarify the meaning of the 'range' enum values, leaving parameter usage largely inferential.

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 gives a specific verb and resource: retrieve the day-by-day calendar. It enumerates the relevant contents (classes, holidays, day swaps, cancelled classes, exams, deadlines) and explicitly distinguishes the tool from get-schedule for day-specific information.

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 says to prefer this over get-schedule for what happens on a given day, which gives a clear routing rule. It also warns that exam and assignment dates only appear if the teacher entered them on Lea, so the agent knows the tool may not be complete.

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

get-cancelled-classesGet Cancelled ClassesA
Read-only

Retrieve upcoming cancelled class sessions with time, course, teacher, room and any teacher comment.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that teacher comments are included in results, but it does not define the 'upcoming' window (how far ahead, whether past cancellations are excluded) or ordering, which are the behaviors that actually matter for this read.

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 front-loaded sentence that packs the resource scope and the returned fields with zero filler. Nothing to trim and nothing important buried.

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 no-parameter read tool with no output schema, describing the returned fields is exactly the right compensation, so an agent knows what it gets back. The one missing piece is the definition of the 'upcoming' time horizon, which affects whether the results meet the caller's need.

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's field list reinforces that the output is self-contained with no filtering inputs.

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 uses a specific verb (Retrieve) plus a clearly scoped resource (upcoming cancelled class sessions) and even enumerates the returned fields (time, course, teacher, room, comment). It is clearly distinguishable from siblings like get-schedule or get-calendar, 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 word 'cancelled' – an agent can infer this is the tool to call when checking for cancelled sessions – but there is no explicit when-to-use, when-not-to-use, or pointer to get-schedule/get-calendar for the non-cancelled case.

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

get-college-documentsGet College DocumentsA
Read-only

List the official documents the college has sent to the student (admission letters, enrollment confirmations, notices, acknowledgments). Read-only: a mandatory document that has not been opened blocks every Lea tool until the student opens it in Omnivox themselves, and opening it is recorded on the student file, so this tool only names the document. Use it when another tool reports a mandatory college document block.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/destructiveHint=false annotations: it explains that an unopened mandatory document blocks every Lea tool, that opening must happen in Omnivox by the student, and that opening is recorded on the student file. That audit/permission consequence is exactly the 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.

Conciseness5/5

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

Three sentences, front-loaded with what is returned, then the read-only constraint and its consequence, then the invocation trigger. Every sentence carries new information — no restatement of the title or the annotations.

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 annotations already covering the safety profile, the remaining burden is scope and consequence — both are covered (document categories, the blocking behavior, the fact that it returns names only). An agent can call this correctly without further information.

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; there is nothing for the description to disambiguate in the input schema. The description correctly focuses its words on scope and consequences instead of inventing parameter detail.

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 ('List the official documents the college has sent to the student') and enumerates the document types (admission letters, enrollment confirmations, notices, acknowledgments). It distinguishes itself from get-course-documents only implicitly via 'the college has sent' vs a course context; naming that sibling explicitly would remove the last ambiguity.

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 a concrete trigger: 'Use it when another tool reports a mandatory college document block.' It also implies the when-not — this tool only names the document, so opening requires the student to act in Omnivox (or a link tool). No explicit alternative is named for opening, which keeps it short of a 5.

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

get-college-listGet College ListA
Read-only

Retrieve the list of colleges available to the user.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
countYes
collegesYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate this is a read-only, non-destructive operation. The description adds useful scoping by saying the list is 'available to the user,' but it does not disclose other behavioral details such as ordering, filtering, or whether results depend on enrollment/application state.

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?

It is a single tightly written sentence with no wasted words, and the core action is front-loaded.

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 read tool with annotations and an output schema, the description is nearly sufficient. A little more scope detail about which colleges are included and how this differs from sibling college tools would make it complete.

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 baseline is 4. There are no parameter semantics for the description to compensate for.

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-resource pair, 'Retrieve the list of colleges,' and clarifies that the list is scoped to the user. It is clear but does not distinguish this tool from nearby siblings like get-college-documents or get-college-news.

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

Usage Guidelines2/5

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

The description states what the tool retrieves but gives no explicit guidance on when to use it instead of alternative college-related tools. Usage is only implied by the resource name.

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

get-college-newsGet College NewsB
Read-only

Retrieve the latest news and announcements from the college.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are 'latest,' implying recency ordering, but says nothing about result count, pagination, or whether content is cached/dated.

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?

A single front-loaded sentence with no filler; appropriately sized for a simple zero-argument read. Slightly thin given the ambiguity with a sibling tool, but no wasted text.

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

Completeness3/5

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

For a zero-param read with annotations covering safety and no output schema, the description is adequate but incomplete: it doesn't clarify what 'news' includes, whether course announcements are separate, or expected volume/format of results.

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 no parameter semantics to explain; the baseline of 4 applies. The description correctly implies the tool is called with no filters.

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?

Clearly states a specific verb+resource (retrieve college news and announcements), so an agent knows what it fetches. However, it never distinguishes itself from the sibling get-course-announcements, leaving the college-wide vs course-level scope ambiguous.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this versus get-course-announcements, get-college-documents, or get-overview. There are no exclusions or prerequisites, only a bare statement of what it returns.

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

get-course-announcementsGet Course AnnouncementsC
Read-only

Retrieve announcements (communiqués) for a specific course.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the retrieval scope and does not disclose any further behavior such as permissions, pagination, or return characteristics.

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 description is a single front-loaded sentence with no wasted words. It is structurally clean, though very terse.

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

Completeness3/5

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

For a simple read-only tool with full schema coverage and safety annotations, the description is minimally adequate. However, it lacks usage guidance and does not describe what the announcements response contains, which matters because there is no output 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 course_id and term_id are already documented in the schema. The description adds no parameter-level meaning beyond 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 states a specific verb and resource: retrieving announcements for a specific course. It is clear what the tool does, but it does not distinguish itself from nearby siblings such as get-college-news or get-mio-messages.

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

Usage Guidelines2/5

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

The description gives no indication of when to use this tool versus alternatives, nor any exclusions. The 'specific course' scope is implied, but there is no explicit routing guidance despite many sibling tools.

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

get-course-assignmentsGet Course AssignmentsA
Read-only

List the assignments of a course with their deadline and what is in the hand-in deposit. A file in the deposit means something was uploaded, not that the work is finished. Incomplete by nature: many teachers never post assignments here, so an empty list does not mean there is no homework. Cross-check the course syllabus from get-course-documents.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.

TDQS

A4/5.0
Behavior4/5

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

Beyond the readOnly/destructive annotations, the description discloses real behavioral traits: deposit presence means an upload occurred, not completion, and the source is known to be sparsely populated. This is meaningful caveat context an agent could not infer. Minor gap: no mention of ordering, pagination, or depth of the deposit listing.

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?

Four short sentences, each carrying distinct information, with the core action stated first. Slightly dense in phrasing ('what is in the hand-in deposit') but 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 two-parameter read-only list tool with a fully documented schema and safety annotations, the description covers purpose, output content, known data-quality limitations, and a fallback source. An agent has everything needed to call it and interpret an empty response 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 both parameters are fully documented in the schema, including the term format and the note that course_id is always required. The description adds no parameter-level detail beyond this, so the baseline 3 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?

The description uses a specific verb and resource ('List the assignments of a course') and names the concrete fields returned (deadline, hand-in deposit contents). It does not, however, differentiate itself from the closely related siblings get-assignment-detail and get-assignments-summary, 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 clear situational guidance: the list is 'incomplete by nature' and an empty result does not mean no homework, and it routes the agent to get-course-documents for the authoritative syllabus. It stops short of saying when to prefer this over get-assignment-detail or get-assignments-summary.

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

get-course-documentsGet course documentsC
Read-only

Retrieve a list of documents for a specific course.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: no pagination behavior, no mention of what metadata each document entry carries, no note on empty-course results.

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?

A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is partly under-specification rather than tightness.

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

Completeness3/5

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

For a simple two-parameter read tool with full schema coverage and annotations, the essentials are present. The missing piece is routing context against the many sibling document/course tools, which matters given this tool list's density.

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 course_id's schema text already explains the full-ID format and that it is always required. The description's phrase 'for a specific course' merely restates the required parameter, so baseline 3 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 verb (retrieve) and resource (documents for a course), so the operation is unambiguous. It does not, however, distinguish itself from siblings such as get-college-documents or get-document-link, which an agent could easily confuse it with.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over get-college-documents (the college-level counterpart) or get-document-link (which fetches an actual file). The description gives no exclusions, prerequisites, or selection criteria.

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

get-course-evalsGet Course GradesA
Read-only

Retrieve evaluations, grades and course summary for a specific course. Ungraded evaluations show no mark. Evaluations the teacher has not entered in Lea will not appear at all, so reconcile the list against the course syllabus.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish that this is a safe read-only operation, and the description adds valuable behavioral context: ungraded evaluations show no mark, and evaluations not entered in Lea will be absent entirely. That helps an agent interpret incomplete results, though it does not cover permissions, rate limits, or return structure.

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 purpose, then two short sentences add distinct caveats and a reconciliation action. Every sentence earns its place without repetition or bloated setup.

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 read-only tool with complete schema coverage and no output schema, the description gives enough to understand what is returned and the major data-completeness caveats. It could be slightly stronger with a hint about the shape or grouping of returned evaluations and grades, but it is broadly complete.

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%, with both term_id and course_id documented in the schema, so parameter meaning is already well covered. The description reinforces that the course is specific but adds no format or syntactic 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?

The description states a specific verb and resource set: retrieve evaluations, grades, and course summary for a specific course. It is clear what the tool does, but it does not differentiate itself from the similar sibling get-grades-summary or clarify its relationship to get-course-info.

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 focus on a specific course, and the description usefully warns to reconcile against the syllabus. However, it gives no explicit when-to-use guidance versus alternatives such as get-grades-summary or get-course-assignments.

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

get-course-infoGet Course InfoB
Read-only

Retrieve info about a specific course. Includes the course identity and teacher names.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.

Output Schema

NameRequiredDescription
groupYes
titleYes
term_idYes
teachersYes
course_idYes
course_codeYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and an output schema exists, so the safety profile and return shape are covered elsewhere. The description adds only that the payload includes identity and teacher names — useful, but no auth, caching, or error context beyond 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?

Two short sentences, front-loaded with the action and then the payload contents. No wasted words, though nothing is stated about term scoping despite an optional term_id.

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 readOnly annotations, a full output schema, and 100% schema description coverage, most of the burden is carried by structured fields. The description is complete enough to call correctly, though it omits how the optional term_id affects which offering is resolved.

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 course_id description already explains the group-number format and the 'always required' caveat. The description adds nothing about either parameter, so the baseline 3 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 verb ('Retrieve') and resource ('info about a specific course') and names what is returned (course identity, teacher names). It is clear on its own, but it never distinguishes itself from close siblings like get-courses-summary, get-course-people, or get-teachers.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus get-courses-summary (listing courses) or get-course-people / get-teachers (which also surface teacher data). The agent must infer the selection criteria from sibling names alone.

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

get-course-peopleGet Course PeopleA
Read-only

List teachers and students for a specific course (max 75 results). Returns recipient IDs usable with send-mio-message.

NameRequiredDescriptionDefault
course_idYesFull course ID including group number (e.g. '2433C5EM.1012'). Always required, even for document and assignment downloads where the item ID alone looks sufficient.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the bar is lower. The description still adds real value by disclosing the 75-result cap (a meaningful limitation) and describing the return payload (recipient IDs), which annotations do not cover.

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?

Two tight sentences, front-loaded with what is returned and the result cap. Every clause adds information; nothing is redundant.

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?

A one-parameter read tool whose safety profile is covered by annotations and whose output is described (recipient IDs) despite no output schema. The result limit is surfaced, leaving nothing an agent needs missing before calling it.

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 single course_id parameter is fully documented in the schema, so the baseline of 3 applies. The description adds no format or scoping detail beyond what the schema already provides.

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 ('List') and a scoped resource ('teachers and students for a specific course'), which implicitly distinguishes it from get-teachers (all teachers) and search-people. However, it never names those siblings, so the differentiation is inferred rather than stated.

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 phrase 'Returns recipient IDs usable with send-mio-message' gives a clear downstream usage cue. But there is no explicit when-to-use/when-not guidance, and no routing to alternatives like get-teachers or search-people for the same people data.

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

get-courses-summaryGet Courses SummaryB
Read-only

Retrieve a summary of courses for a given term or the current term.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the default-to-current-term behavior, but says nothing about what the summary contains or its shape.

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?

A single efficient sentence with no filler. Slightly under-specified rather than verbose.

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

Completeness2/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 explaining what a 'summary of courses' includes (which fields, per-course aggregates?), and it does not. An agent cannot anticipate the return value.

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 term_id pattern/format is fully documented in the schema. The description only adds that the term may be omitted in favor of the current term, which is a modest but real contribution.

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 clear verb (Retrieve) and resource (summary of courses), scoped to a term. It does not differentiate itself from nearby siblings like get-overview or get-course-info, and 'summary' is left undefined.

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 phrase 'for a given term or the current term' implicitly tells the agent the parameter is optional and that omitting it defaults to the current term. However, no explicit when-to-use guidance or named alternatives are given.

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

get-grades-summaryGet Grades SummaryA
Read-only

Retrieve a list of grades summaries for the user's courses in a given term or the current term.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are limited to the user's courses, but it does not describe return shape, permissions, or whether the grades are official or provisional.

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 definition is a single, front-loaded sentence with no wasted wording. It communicates the action, resource, scope, and term behavior efficiently.

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 simple read-only tool with one optional parameter and no output schema, the description gives enough context to invoke it correctly. It could be slightly more complete by describing the returned summary structure, but the essential scope and default-term behavior are present.

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 schema itself documents the term_id pattern and format. The description adds useful semantic behavior beyond the schema by clarifying that omitting the term uses the current term.

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 uses a specific verb, 'Retrieve,' and names the resource, 'grades summaries,' scoped to the user's courses. It is clear what the tool returns, though it does not explicitly distinguish itself from sibling summary tools such as get-assignments-summary or get-courses-summary.

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?

It indicates that a term can be supplied or the current term is used by default, which gives basic usage context. However, it does not say when to choose this tool over siblings or 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-mio-foldersGet MIO FoldersA
Read-only

Retrieve the list of MIO (internal messaging) folders and their unread counts. Folder IDs are string constants like SEARCH_FOLDER_MioRecu; pass them as folder_id to the other MIO tools.

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 cover the safety profile (readOnlyHint=true, destructiveHint=false), and the description adds real value beyond that: it explains the contents of each entry (unread counts) and documents the folder ID constant format such as SEARCH_FOLDER_MioRecu. It does not mention ordering or whether folders are flat vs nested, so it is not exhaustive.

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?

Two tight sentences with no filler. The primary purpose is front-loaded and the follow-on guidance about ID usage comes second, matching the natural call order.

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 parameters, no output schema, and annotations covering safety, the description supplies enough to call it and to interpret the result (folders plus unread counts). A minor gap is that it doesn't state whether folders are ordered or can be nested, but nothing critical to invoking it 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 baseline is 4. The description goes beyond the schema by pre-explaining the folder_id string constant format for downstream calls, which is useful even though this tool has no inputs of its own.

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 ('Retrieve the list of MIO folders') plus what each item carries (unread counts). The folder resource is clearly distinct from sibling tools like get-mio-messages, create-mio-folder, and move-mio-message.

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 second sentence tells the agent how the returned folder IDs are consumed by other MIO tools, which implies this is the discovery step before calling get-mio-messages. However, it never states when to use this versus alternatives or any exclusions, leaving usage largely inferred.

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

get-mio-messagesGet MIO MessagesB
Read-only

Retrieve MIO messages from a folder. Supports pagination via last_id.

NameRequiredDescriptionDefault
countNoNumber of messages to fetch (default 21, max 100)
last_idNoLast message ID for pagination, omit to get latest messages
folder_idNoFolder ID string constant such as SEARCH_FOLDER_MioRecu (inbox) or SEARCH_FOLDER_MioEnvoye (sent). Use get-mio-folders to discover them. Defaults to inbox.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish that this is a read-only, non-destructive tool, so the description does not need to carry the full safety burden. It adds the pagination behavior, but does not disclose ordering, default folder behavior, or what kind of message data is 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?

The description is two short sentences, front-loads the core purpose, and adds the pagination detail without filler. Every sentence contributes something usable.

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 low-complexity read-only list tool with fully described parameters and safety annotations, the description covers the essential purpose and pagination behavior. It could be stronger by distinguishing itself from search-mio-messages and read-mio-message, but nothing critical for invoking it 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 coverage is 100%, and the schema already documents count limits, last_id pagination semantics, and folder_id constants with a pointer to get-mio-folders. The description mentions pagination via last_id but adds no meaning 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?

The description states a specific verb and resource: retrieve MIO messages from a folder. That is clear and distinct from mutation tools like move-mio-message or delete-mio-message, but it does not differentiate this folder-listing tool from search-mio-messages or read-mio-message.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus search-mio-messages or read-mio-message. 'From a folder' and pagination imply browsing folder contents, but the agent is left to infer that usage rather than being told directly.

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

get-online-formsGet Online FormsA
Read-only

List the online forms the college publishes in Omnivox (workshop registrations, course withdrawal requests, surveys, sign-ups), with whether each one is currently open. Read-only: filling a form stays in the Omnivox web portal.

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 establish readOnly/destructive=false, so the bar is lower, and the description still adds real context: the result includes a per-form open/closed status, and the tool cannot submit a form — that action remains in the Omnivox portal. It does not describe volume, ordering, or pagination, but for a small fixed list this is minor.

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?

Two sentences with no waste; the resource and scope come first, and the read-only boundary follows as a second, distinct point. Every clause earns its place.

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-parameter list tool with no output schema, an agent needs to know what is listed, what fields come back (open status), and that it cannot act on a form — all three are covered. Nothing required for correct 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 there is nothing for the description to disambiguate and the baseline of 4 applies. No parameter-level gaps exist.

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 (the online forms the college publishes in Omnivox), and enumerates the form categories covered (workshop registrations, course withdrawal requests, surveys, sign-ups), which distinguishes it from document-oriented siblings like get-college-documents. It also names the per-item field returned (whether each is currently open).

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?

"Read-only: filling a form stays in the Omnivox web portal" clearly excludes the submission use case and redirects the agent elsewhere, which is the key boundary for this tool. It implies the correct use case (discovering available forms and their open/closed state) but does not explicitly name a sibling alternative or state exclusions relative to get-college-documents or get-service-link.

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

get-overviewGet OverviewA
Read-only

Dashboard of what's actionable right now: today's schedule, per-course new items (documents, announcements, assignments, grades) with delta tracking, new MIO messages, upcoming evals, notifications, and featured college news. Best starting point to see what needs attention.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

TDQS

A4.2/5.0
Behavior4/5

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

The readOnly and non-destructive annotations already cover the safety profile. The description adds useful behavioral context by explaining that it aggregates multiple current actionable sections and uses delta tracking, though it does not mention freshness, caching, or whether sections may be empty.

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?

Two sentences, front-loaded with the dashboard purpose and content scope, followed by a concise usage recommendation. There is no redundant or filler text.

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 composite dashboard tool with no output schema, the description does a good job listing the returned sections and framing it as a starting point. It leaves minor gaps around how the optional term_id affects the dashboard and whether some sections may be absent.

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?

The sole optional term_id parameter is fully documented in the schema, including its YYYYN format and example. The description does not mention term_id or explain the default term behavior, so it adds no meaning beyond the schema 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?

The description clearly states this is an aggregate dashboard and enumerates the specific content it surfaces: schedule, per-course new items with deltas, MIO messages, evals, notifications, and college news. This distinguishes it from the many granular sibling tools like get-schedule or get-mio-messages.

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 clear usage recommendation: 'Best starting point to see what needs attention.' However, it does not explicitly name when not to use it or route to specific sibling tools for narrower needs.

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

get-scheduleGet ScheduleA
Read-only

Retrieve the static weekly class schedule (timetable) for a given term or the current term. Same every week: it does not reflect holidays, day swaps or cancelled classes. Use get-calendar for those.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds genuinely useful behavior beyond that: the data is static week-over-week and deliberately ignores holidays, day swaps and cancellations. It doesn't discuss return shape or ordering, but with a simple read this is a strong disclosure.

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 what it returns, followed by the key caveat and the routing hint. No filler and nothing repeated from the 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?

For a single-optional-parameter read tool with annotations and full schema coverage, the description covers purpose, default behavior, data freshness caveats and the alternative tool. Nothing needed 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.

Parameters4/5

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

Schema coverage is 100%, so the parameter's format is already documented in the schema. The description nonetheless adds meaning the schema does not: the term is optional and falls back to the current term, which an agent needs to know to call it correctly.

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 ("Retrieve the static weekly class schedule/timetable") plus scope ("for a given term or the current term"). It explicitly distinguishes itself from the sibling get-calendar, so an agent can choose 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 tool explicitly ("Use get-calendar for those") and gives the condition that selects it — holidays, day swaps, cancelled classes. It also states the default behavior when no term is supplied, which covers the main selection question for this tool.

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

get-teachersGet TeachersA
Read-only

Fallback tool to get all teachers for a term. Returns names, departments, offices, phone numbers, and MIO IDs, but does NOT include which course each teacher teaches. Prefer get-course-people to look up teachers for a specific course — only use this tool if get-course-people fails or you need the full roster.

NameRequiredDescriptionDefault
term_idNoAcademic term ID in YYYYN format (e.g. '20263').

Output Schema

NameRequiredDescription
term_idYes
teachersYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds useful behavioral context: the fallback role and the deliberately omitted course-teacher association, which prevents misuse. It stops short of saying anything about the response shape beyond the field list, but the output schema covers 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?

Three tight sentences: purpose, payload contents, then the routing rule, with the most decision-relevant constraint placed early. No filler, though the fallback framing is restated slightly in the first and last sentence.

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-parameter read tool with annotations covering safety and an output schema covering return values, the description supplies everything an agent needs to decide whether to call it: what it returns, what it omits, and which sibling should be tried first.

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 single term_id parameter is fully documented with a pattern and example in the schema. The description only implies term scoping via 'for a term', so it adds no syntax or format detail beyond what the schema already provides — baseline 3.

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 resource ('get all teachers for a term'), enumerates the returned fields, and explicitly excludes course-teacher mapping. It is unmistakable against the sibling get-course-people.

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 names the preferred alternative (get-course-people) and gives the exact conditions for falling back ('only if get-course-people fails or you need the full roster'). When-to-use and when-not-to-use are both explicit.

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

get-termsGet TermsA
Read-only

Get the list of available academic terms (sessions) and the current default term, with human-readable names.

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 declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered structurally. The description still adds real behavioral detail the annotations lack: the response includes both the full list and the current default term, and names are human-readable rather than raw codes.

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 sentence, front-loaded with the verb and resource, with the return scope appended as a qualifier. Nothing is padded or repeated from the schema.

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?

There is no output schema, so the description must carry the return-value story, and it does at a high level: term list plus current default, human-readable names. It stops short of saying what fields each term carries (id, name, date range), which would fully close the gap.

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 the baseline of 4 applies. There is no input to mis-specify and nothing the description could usefully add about argument semantics.

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 (get) and resource (academic terms/sessions), and scopes the return as both the list and the current default term. No sibling tool in the list covers terms, so there is no ambiguity to resolve, though it never explicitly positions itself against anything.

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: an agent can infer this is the lookup for term identifiers, but the description never says so, nor does it mention that these term IDs feed other calls or that the default term is what to assume when unspecified. No alternatives exist to disambiguate against, which keeps this at minimum-viable rather than failing.

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

move-mio-messageMove MIO MessageB
Destructive

Move a MIO message to a different folder.

NameRequiredDescriptionDefault
folder_idYesTarget folder to move the message into. Folder ID string constant such as SEARCH_FOLDER_MioRecu (inbox) or SEARCH_FOLDER_MioEnvoye (sent). Use get-mio-folders to discover them.
message_idYesThe MIO message ID

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds no behavioral context such as source-folder removal, overwrite behavior, required permissions, or error handling; it restates the move action without contradicting 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?

The description is a single front-loaded sentence with no wasted words. For a simple two-parameter move operation, the length is appropriate and efficient.

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

Completeness3/5

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

The tool is low-complexity with a fully described schema and destructive annotation coverage, which carries much of the context. However, the description omits usage routing versus delete/restore/flag and does not explain move semantics beyond the one-line purpose, leaving meaningful gaps.

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 folder_id description already explains target folder constants and points to get-mio-folders for discovery. The description adds no syntax or constraints beyond what the schema provides, 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.

Purpose4/5

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

The description uses a specific verb ('Move') and resource ('MIO message') and names the destination concept ('different folder'). It is clear but does not explicitly differentiate from related siblings such as delete-mio-message, restore-mio-message, or flag-mio-message.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. Sibling tools like delete-mio-message, restore-mio-message, and flag-mio-message overlap in the MIO-message domain, but the description does not route the agent among them.

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

read-mio-messageRead MIO MessageA
Read-only

Retrieve and read the full content of a single MIO message by its ID, from any folder. Returns the complete message body as plain text.

NameRequiredDescriptionDefault
mark_readNoMark the message as read (sends a read receipt to the sender). Defaults to false.
message_idYesThe MIO message ID to read

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered, and the description usefully adds the return format ('complete message body as plain text') in the absence of an output schema. However, it never mentions the mark_read side effect (a read receipt sent to the sender) or behavior for unknown/inaccessible message IDs, which is the one genuinely non-obvious trait of this tool.

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?

Two sentences, zero padding, with the identity of the resource front-loaded and the return format appended as the last piece of information an agent needs.

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 two-parameter read tool with full schema coverage and no output schema, the description covers what it does, the scope ('any folder') and the return shape. The only material gap is the undisclosed read-receipt side effect of mark_read, which the description leaves entirely 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 documented, and the description only echoes that lookup is by message ID. It adds no meaning beyond the schema and says nothing about mark_read, but with full schema coverage the baseline of 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?

States a specific verb (retrieve/read), a specific resource (a single MIO message by ID) and a scope qualifier ('from any folder') that distinguishes it from the list-oriented siblings get-mio-messages and search-mio-messages. It stops short of naming those siblings explicitly, so an agent must infer the split from context.

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 'single ... by its ID' versus the plural/query siblings, but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent can infer it is the follow-up to a list/search call, but the description does not say so.

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

reply-mio-messageReply to MIO MessageA
Destructive

Reply to a MIO message. Sends to the original sender, quotes the original under the reply and links the thread.

NameRequiredDescriptionDefault
messageYesReply body (plain text)
subjectNoSubject line. Defaults to the original subject with a "Re:" prefix.
reply_allNoAlso send to the other recipients of the original.
message_idYesID of the message being replied to
quote_originalNoInclude the quoted original under the reply.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=true), and the description adds real context beyond them: the reply is addressed to the original sender, the original is quoted underneath, and the thread is linked. It does not clarify that the send is irreversible or what happens on failure, which keeps it from a 5.

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?

Two short sentences with zero filler, and the core action is front-loaded before the behavioral details.

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 5-parameter mutation tool with full schema coverage and annotations, the description covers what the agent needs to invoke it correctly. The only omission is what the call returns (e.g., the created reply's id), and there is no output schema to compensate.

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 all five parameters are already documented in the schema. The description only echoes the default quoting behavior and recipient targeting, adding no syntax or format detail beyond the structured fields.

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 ('Reply to a MIO message') and the delivery behavior (sends to original sender, quotes, links thread). It is meaningfully distinct from the sibling send-mio-message, though it never names that sibling 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 only implied — an agent can infer this is for responding to an existing message rather than composing a new one. There is no explicit when-to-use/when-not guidance or reference to send-mio-message or reply_all alternatives.

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

restore-mio-messageRestore MIO MessageA

Restore a deleted MIO message from trash back to the inbox.

NameRequiredDescriptionDefault
message_idYesThe MIO message ID(s) to restore from trash. Pass a single ID or an array of IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the trash→inbox state change, but omits notable behavior the schema allows: bulk restore of an array of IDs, and what happens if the message isn't in trash.

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 front-loaded sentence with zero filler that conveys verb, resource, and state transition. Nothing wasted.

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 one-param tool with full schema coverage and annotations present, the description is essentially complete. The only minor gap is not surfacing the bulk/array restore capability in prose.

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% – the schema documents message_id fully, including the UUID format, the source tool (get-mio-messages), and single-or-array usage. The description adds nothing beyond the schema, so baseline 3 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 verb (restore) and resource (MIO message), plus the state transition from trash to inbox. This clearly distinguishes it from delete-mio-message and move-mio-message, though it doesn't reference those siblings by name.

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?

'From trash back to the inbox' implies the precondition that the message must be deleted, which is useful context. However, no explicit when-to-use vs. alternatives (move-mio-message, delete-mio-message) is given, leaving the agent to infer the routing.

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

search-mio-messagesSearch MIO MessagesC
Read-only

Search MIO messages by text.

NameRequiredDescriptionDefault
queryYesSearch query text
folder_idNoOptional folder to restrict the search to. Folder ID string constant such as SEARCH_FOLDER_MioRecu (inbox) or SEARCH_FOLDER_MioEnvoye (sent). Use get-mio-folders to discover them. Defaults to all folders.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds nothing beyond that: no matching semantics (substring vs full-text), case sensitivity, result cap, or pagination behavior — all of which matter for a search tool with no output 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?

One short, front-loaded sentence with no redundancy. It is efficient, though the terseness means there is little substance behind the lead clause.

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

Completeness3/5

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

With two fully documented parameters and read-only annotations, the definition is callable as-is. But with no output schema, the description should say something about what comes back (message summaries, match count, ordering), and it does not.

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 explains query and folder_id, including the get-mio-folders discovery hint and the all-folders default. The description itself contributes no parameter detail, so the baseline 3 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?

The description states a specific verb and resource ("Search MIO messages") plus the matching dimension ("by text"), which clearly distinguishes it from mutation siblings like delete-mio-message. It stops short of naming the nearest alternative, get-mio-messages, so an agent must infer search-vs-list from the verb alone.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool rather than get-mio-messages, read-mio-message, or search-people. The only usage signal is the word "search", leaving the choice between listing and searching to inference.

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

search-peopleSearch PeopleA
Read-only

Search for people (students, teachers, employees) by name. Useful to find recipient IDs for sending MIO messages.

NameRequiredDescriptionDefault
queryYesName or partial name to search for

Output Schema

NameRequiredDescription
countNo
resultsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered and the bar is lower here. The description adds the downstream purpose (recipient IDs for MIO) but says nothing about result volume, partial-match behavior, or whether searching is case/accent sensitive.

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?

Two sentences, zero waste, with the primary purpose front-loaded and the use case following. Nothing to trim.

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?

An output schema exists, so return values need not be explained, and annotations cover safety. For a one-parameter read tool the definition is nearly sufficient; only the lack of routing guidance versus sibling people-lookup tools is a real gap.

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 a single parameter and 100% schema description coverage, the schema already documents 'Name or partial name to search for'. The description only restates 'by name' and adds no matching-prefix or minimum-length guidance, so baseline 3 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 verb and resource ('Search for people') and enumerates the entity types covered (students, teachers, employees), which is more precise than the title alone. It does not explicitly distinguish itself from siblings like get-teachers or get-course-people, so an agent must infer that this is the cross-directory name lookup.

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 gives one concrete use case: finding recipient IDs for send-mio-message, which is genuinely helpful context. It offers no exclusions or alternatives (e.g. use get-course-people for a roster within a course), so when-not-to-use 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.

send-mio-messageSend MIO MessageA
Destructive

Send a new MIO message. Use search-people first to get the recipient_id. Supports sending to multiple recipients at once.

NameRequiredDescriptionDefault
messageYesMessage body (plain text)
subjectYesMessage subject line
recipient_idYesRecipient ID(s) — use search-people to find them. Pass a single ID or an array of IDs to send to multiple people.
hide_recipientsNoHide recipients from each other (like BCC)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation/irreversibility signal is covered structurally. The description adds the prerequisite lookup and the multi-recipient capability, but says nothing about whether the message is delivered immediately, whether a draft state exists, or how failures for some recipients in a batch are reported — useful context for a send operation.

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, purpose front-loaded, prerequisite second. The final sentence about multiple recipients is somewhat redundant with the recipient_id schema description, which keeps it from a 5.

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 4-parameter mutation with full schema coverage and no output schema, the description covers what to send and how to obtain the required ID. The main omission is outcome behavior — delivery timing and partial-failure handling for multi-recipient sends.

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 each parameter is documented there, including the single-vs-array recipient form and the BCC-like hide_recipients flag. The description's mention of multiple recipients largely restates the schema, so it adds little beyond 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?

Specific verb+resource ('Send a new MIO message') that cleanly distinguishes it from sibling mutations like reply-mio-message, move-mio-message, and delete-mio-message. It does not explicitly name those siblings, but the word 'new' does the disambiguating work.

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 a concrete prerequisite workflow: look up recipient_id via search-people first. It stops short of stating when not to use it (e.g., use reply-mio-message to respond within an existing thread), so an agent must infer the exclusion from the sibling names.

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. 38 tool updatesv3.7.0
    • First observedcreate-mio-folder
    • First observeddelete-mio-message
    • First observedflag-mio-message
    • First observedget-absences
    • First observedget-assignment-detail
    • First observedget-assignment-file-link
    • First observedget-assignment-submit-link
    • First observedget-assignments-summary
    • First observedget-calendar
    • First observedget-cancelled-classes
    • First observedget-college-documents
    • First observedget-college-list
    • First observedget-college-news
    • First observedget-course-announcements
    • First observedget-course-assignments
    • First observedget-course-documents
    • First observedget-course-evals
    • First observedget-course-info
    • First observedget-course-people
    • First observedget-courses-summary
    • First observedget-document-link
    • First observedget-grades-summary
    • First observedget-mio-attachment-link
    • First observedget-mio-folders
    • First observedget-mio-messages
    • First observedget-online-forms
    • First observedget-overview
    • First observedget-schedule
    • First observedget-service-link
    • First observedget-teachers
    • First observedget-terms
    • First observedmove-mio-message
    • First observedread-mio-message
    • First observedreply-mio-message
    • First observedrestore-mio-message
    • First observedsearch-mio-messages
    • First observedsearch-people
    • First observedsend-mio-message

TDQS

A3.5/5.0

Scored across 38 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action, and the descriptions proactively disambiguate the risky pairs (get-schedule vs get-calendar, get-courses-summary vs get-grades-summary vs get-assignments-summary, get-teachers vs get-course-people as an explicit fallback). The main residual confusion is the cluster of five 'link' tools (get-document-link, get-assignment-file-link, get-assignment-submit-link, get-mio-attachment-link, get-service-link), which share a shape and expiry behavior and only differ by resource.

Naming Consistency5/5

Every name is lowercase kebab-case verb_noun: get-* for reads, and clear action verbs for mutations (send-, reply-, delete-, move-, flag-, restore-, create-, search-). No camelCase or snake_case mixing, and the verb choice consistently signals read vs write.

Tool Count2/5

38 tools is heavy even for a server spanning three subsystems (MIO messaging, Lea courses, college services). Several clusters could be consolidated — e.g. the five link-fetching tools could be one parameterized tool, and the summary tools (courses/grades/assignments) could share a parameterized surface — so the count is above what the scope strictly needs.

Completeness4/5

Coverage is strong: MIO has full lifecycle (list, search, read, send, reply, move, flag, trash, restore, folders, attachments) and the Lea/college side covers courses, people, documents, announcements, assignments, evals, grades, absences, calendar, forms and service links. Minor gaps remain — notifications are only surfaced inside get-overview with no dedicated retrieval tool, and there is no way to access a single announcement or document body without fetching the file.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers