Skip to main content
Glama

IndusLMS Agent

PyPI Python License

Read-only agent access to Indus LMS academics — announcements, assignments, shared resources, notifications, attendance — plus school email and OneDrive files. For pi, opencode, Claude Code/Desktop, and OpenAI-compatible agents via MCP + Skill + CLI.

NOTE

This project is read-only by design. Nothing here can submit work, mark notifications read, send mail, or mutate school data.

Quickstart

git clone https://github.com/StrangeSid/induslms-agent.git
cd induslms-agent
./install.sh

install.sh creates .venv, installs the package, logs you in, wires up MCP configs for pi + opencode, installs the skill, and runs a health check. Then restart your agent host and ask: "list my courses using induslms-academics".

python3 -m venv .venv && source .venv/bin/activate
pip install -e .  # or: pip install -r requirements.txt
cp .env.example .env  # fill in your values (auto-loaded, never committed)
python3 lms.py login you@school.example
python3 lms.py doctor  # health check

Or from PyPI: pipx install induslms-agent (or uvx induslms-agent doctor), then induslms login you@school.example and use induslms-server as your MCP command.

Updating

pipx upgrade induslms-agent      # PyPI install
git pull && ./install.sh         # git clone (re-runs doctor to verify)

No re-login needed: tokens live outside the repo and survive updates. If a release adds new Graph scopes, run python3 sharepoint.py login (or outlook.py login) once to consent.

Related MCP server: chaoxing-mcp

Configuration

Variable

Purpose

INDUSLMS_EMAIL / INDUSLMS_PASS

Used once by lms.py login, then discarded

INDUSLMS_TENANT

Tenant fallback when the token has no roles

INDUSLMS_TOKEN_FILE

Token cache path (default ~/.induslms_token.json)

INDUS_OUTLOOK_CLIENT_ID

Your Entra app id for Graph login

INDUS_USE_BUILTIN_CLIENT=1

Alternative: no registration — sign in as yourself via the pre-consented Microsoft Office client

Credentials live only in your local process environment. The MCP server exposes no login/token tools, no tool ever returns secrets, and .gitignore blocks .env, *token*.json, and downloads.

MCP server

Stdio, 22 tools. Run with python3 server.py (or induslms-server after install).

Group

Tools

LMS academics

get_profile, list_courses, list_resources, get_resource, download_resource, assignments_overview, list_eol, list_assessments, list_notifications, get_attendance, get_attendance_day, list_announcements, list_calendar

Mail (macOS, no setup)

schoolmail_search, schoolmail_read, schoolmail_folders

Mail (Graph, any OS)

outlook_search, outlook_read, outlook_folders

Files (Graph, any OS)

od_resolve_link, od_browse, od_download

Connect your host (replace /path/to with your checkout; ready-made files in examples/):

Host

Config

pi

~/.pi/agent/mcp.json (or run ./install.sh, which merges it)

opencode

~/.config/opencode/opencode.jsonc under mcp (v1) or mcp.servers (v2)

Claude Code

claude mcp add induslms-academics -- <venv-python> <checkout>/server.py, or copy .mcp.json

Claude Desktop

paste examples/claude_desktop_config.json.example into claude_desktop_config.json, relaunch

OpenAI SDK

MCPServerStdio with {command: <venv-python>, args: [server.py]}; hosted MCP/GPT Actions need public HTTPS (not provided, stdio-only by design)

School email

  • Apple Mail.app (macOS, zero setup): python3 mailapp.py search "assignment" --top 5 — reads the existing School account via osascript. On other platforms these tools report unavailable; use Outlook instead.

  • Outlook/Graph (any OS): python3 outlook.py login (approve the code in your browser), then search / read / folders. Needs Mail.Read: your own app id + one admin consent, or INDUS_USE_BUILTIN_CLIENT=1 for no-registration sign-in.

OneDrive / SharePoint files (any OS)

Same device-code flow and token cache as Outlook, plus Files.Read + Sites.Read.All (re-run login once to consent):

python3 sharepoint.py login
python3 sharepoint.py resolve <sharing-link-from-mail>
python3 sharepoint.py browse /
python3 sharepoint.py download <item-id-or-link> --out /tmp/school

Skill + prompt template

  • Skill (skills/induslms-academics/): workflow guidance for agents (notices → assignments → resources → attendance + inbox). Install: bash scripts/install-skill.sh (pi, opencode, Claude).

  • Prompt (examples/update-resources.prompt.md): copy-paste template that refreshes a local School/ folder from LMS + mailbox. Fill in your subjects/teachers, paste into a fresh agent session.

  • API reference: skills/induslms-academics/references/endpoints.md (reverse-engineered endpoints, verified live).

Contributing, changelog, license

See CONTRIBUTING.md and CHANGELOG.md. Licensed under GPL-3.0-or-later — see COPYING.

Available Tools

22 tools
assignments_overviewC

Unified assignments: EOL tests + assessments + shared resources (raw payloads).

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It offers one useful behavioral hint — '(raw payloads)' implies unprocessed output — but says nothing about read-only safety, permission requirements, pagination, or result volume for what is presumably an aggregate query.

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

Conciseness3/5

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

One short sentence with no filler, so there is nothing to trim. But it is under-specified rather than appropriately sized — the brevity comes at the cost of the verb, scope, and parameter information an agent needs.

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?

An output schema exists, so return structure need not be described. Still, for a tool that merges three data domains and takes an optional course filter, the description omits when it should be chosen over its single-domain siblings and what course_id does, leaving key decisions to inference.

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?

The single parameter course_id has 0% schema description coverage and is not mentioned anywhere in the description. With low coverage the description should compensate, but it gives no indication of what course_id filters, nor that omitting it returns everything. Only the fallback awareness that a course filter exists at all keeps this above 1.

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

Purpose3/5

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

The description names what the tool aggregates — EOL tests, assessments, and shared resources — which helps distinguish it from single-domain siblings like list_eol and list_assessments. However, it is a noun phrase with no verb (list? summarize? fetch?), so an agent cannot be fully certain what the tool does with those three domains.

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 use this unified overview versus the individual sibling tools (list_eol, list_assessments, list_resources), nor on whether course_id is needed to scope the result. Usage can only be inferred from the name.

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

download_resourceC

Download a shared file to ~/Downloads/induslms. Returns path, size, content-type.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
resource_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral weight, and it does disclose the concrete local destination (~/Downloads/induslms) and the returned fields. However, it omits permission/auth requirements, overwrite/re-run behavior, and whether the file is fetched from a remote share.

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 tight sentences with no filler, and the action plus destination come first. Efficient, though the brevity contributes to gaps elsewhere rather than being purely an asset.

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?

An output schema exists, so return-value detail is not required, but for a two-required-param tool with zero annotations and no parameter explanation the definition is under-specified. An agent lacks enough to confidently distinguish it from od_download or supply correct IDs.

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% and the description never explains resource_id versus file_id, both required. The agent must guess the relationship between a resource and a file inside it, which is a real risk for correct invocation.

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 ('Download') plus resource ('a shared file') and even names the destination folder, so an agent immediately knows what happens. It fails to distinguish itself from the sibling od_download, leaving ambiguity about which download tool to pick.

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 despite a sibling (od_download) that plausibly overlaps. The only hint is the 'shared file' framing, which is too weak to route selection.

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

get_attendanceB

Attendance summary + session records (percentage, present/absent).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it does not state whose attendance is returned (self vs. all students), whether a date range is implied, permission requirements, or the read-only nature beyond the weak 'get' verb. The parenthetical about percentage/present/absent is return-value content, which the existing output schema already covers.

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 compact sentence that front-loads the resource and its contents with no filler. It is a fragment rather than a fully formed sentence, but it wastes nothing.

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 zero parameters and an output schema covering return values, the definition is nearly adequate. The critical missing piece is disambiguation from get_attendance_day, which the description never addresses, leaving the selection decision incomplete.

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 no parameter syntax the description could or should clarify.

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

Purpose4/5

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

The description names a specific resource (attendance) and enumerates what is returned (summary, session records, percentage, present/absent), so the purpose is clear. However, it draws no distinction from the sibling get_attendance_day, leaving the agent to guess which attendance tool to pick.

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 the obvious alternative get_attendance_day in the sibling list. The agent gets no signal about when this aggregate tool is preferred over the day-level one.

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

get_attendance_dayB

Day-wise attendance breakdown (working days, per-date status/reason).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It lists some output content, but does not state whether the operation is read-only, what permissions are needed, or any other behavioral traits; the output schema exists but does not replace safety and usage 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?

The description is a single, front-loaded sentence with no wasted words. It communicates the scope and the included data fields efficiently.

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-parameter read tool with an output schema, the description covers the basic purpose and return content. However, because annotations are absent and the sibling get_attendance is not contrasted, the definition is only minimally complete for an agent navigating this toolset.

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, and the description adds no parameter semantics because there are none to describe. The baseline for a zero-parameter tool is 4, and nothing in the description contradicts or enhances that.

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 resource and scope: day-wise attendance with working days and per-date status/reason. It is clear enough for an agent to identify the tool's purpose, but it does not differentiate this tool from the sibling get_attendance, leaving ambiguity about which one to select.

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 phrase 'day-wise attendance breakdown,' suggesting this should be used when daily detail is needed. However, there is no explicit when-to-use guidance, no exclusion criteria, and no mention of the sibling get_attendance, so the agent must infer the correct context.

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

get_profileB

Current student profile (email, full name, id).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden; it implies a safe read (it describes a profile being returned, not mutated) and names the returned fields, which is useful behavioral context. However, it says nothing about authentication requirements, whether it can fail for unauthenticated users, or any rate limits, leaving the safety profile to inference.

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 compact sentence with no padding, and the resource identity is front-loaded. It is a sentence fragment and could not be trimmed further without losing the field list, but it also adds no routing or context.

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?

The tool is a trivial zero-parameter getter and an output schema exists, so the description need not explain return values; it nonetheless names the three key fields. The only shortfall is the absent usage/auth context expected when no annotations are supplied.

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 per the baseline rule this scores 4; there is nothing for the description to clarify beyond what the empty schema already communicates.

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 the resource ('current student profile') and enumerates the returned fields (email, full name, id), so an agent knows exactly what it retrieves. The verb is only implied by the name 'get_profile', and there is no explicit differentiation from siblings, though none of the listed siblings overlap with this resource.

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 tool, what prerequisites it has (e.g. authenticated session), or how it relates to any alternative. The only implied usage is the generic 'fetch the signed-in user's profile', which an agent must infer entirely from the name.

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

get_resourceC

One resource's metadata: folder flag, child_count, file_urls with file_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it only names return fields. It does not state read-only nature explicitly, error behavior for a bad/missing resource_id, permission requirements, or side effects. Some credit for disclosing the shape of returned data (folder flag, child_count, file_urls/file_ids).

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

Conciseness3/5

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

It is short and front-loaded, but the brevity reads as under-specification rather than economy: the words spent on output fields could have covered purpose and usage, especially since an output schema already exists.

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 an output schema present, the description's enumeration of return fields is redundant, and it omits the essentials an agent needs: how to obtain resource_id, the closest alternative tools, and error/side-effect behavior. Incomplete for even a trivial one-parameter getter.

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% and the single parameter resource_id has no description in either the schema or the description text. The description never explains what a resource_id is or where to obtain it (e.g., from list_resources).

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

Purpose3/5

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

The description identifies the resource (one resource's metadata) and enumerates the returned fields, so an agent can infer this is a single-item fetch counterpart to list_resources. However, it is a noun-phrase fragment with no verb ('retrieve/get') and never explicitly contrasts itself with the sibling list_resources or download_resource.

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 mention of the alternative list_resources or download_resource, and no prerequisites. The agent is left to infer that resource_id likely comes from list_resources.

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

list_announcementsC

School announcements, optionally filtered by tenant/year.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantNo
academic_yearNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it says nothing about read-only safety, result ordering, pagination, or scope limits. 'List' implies a read, but that is inferred from the name rather than disclosed.

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

Conciseness4/5

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

A single short sentence, front-loaded with the resource and the filter capability. Nothing is wasted, though the terseness leaves the definition under-specified rather than merely brief.

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?

An output schema exists so return values need no explanation, but for a two-parameter tool with zero schema coverage and no annotations the description is thin: no year format, no ordering/pagination behavior, and no differentiation from the many sibling list tools.

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 0%, so the description is the only source of parameter meaning; it does name both parameters (tenant, year) and marks them as optional filters. However, it gives no format or type detail (e.g., expected academic-year string format) beyond what the names already suggest.

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

Purpose3/5

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

The description names the resource ('School announcements') clearly enough that an agent knows what is returned, but it omits the verb and never distinguishes itself from close siblings such as list_notifications or schoolmail_search. It is a noun phrase rather than a specific operation statement.

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 phrase 'optionally filtered by tenant/year' hints that filtering is available, but there is no guidance on when this tool should be chosen over list_notifications or the schoolmail alternatives, and no exclusions or prerequisites are stated.

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

list_assessmentsC

FA/SDL assessments with due dates and teacher names.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it only hints that results include due dates and teacher names. It says nothing about read-only nature, permissions, scope (courses/term), ordering, or pagination, which are exactly what a list tool needs to disclose when annotations are absent.

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

Conciseness3/5

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

It is a single tight fragment with no waste, which is good, but brevity here comes at the cost of under-specification rather than genuine conciseness. A few more words establishing the action and scope would earn their place.

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?

An output schema exists, so return values needn't be explained, and the zero-parameter surface is simple. However, with no annotations and no guidance on the FA/SDL jargon or sibling selection, the definition is only minimally complete for an agent to choose it confidently.

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 explain and the baseline of 4 applies. Schema coverage is 100% and the empty argument object is self-explanatory.

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

Purpose3/5

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

The description names a resource (FA/SDL assessments) and the fields it carries, but it is a noun fragment with no explicit verb, relying on the tool name for the 'list' action. The unexplained 'FA/SDL' acronym and the lack of differentiation from siblings like assignments_overview or list_courses leave an agent guessing at the exact scope.

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 at all – no statement of when this beats assignments_overview or list_courses for assessment data. The agent gets only the content hint, with no context or exclusions.

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

list_calendarC

School calendar events.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'School calendar events.' states nothing about read-only safety, authentication, rate limits, side effects, or output format, leaving all behavioral traits undisclosed.

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 extremely short, front-loaded, and free of filler. However, it is a fragment rather than a complete statement, so it sacrifices clarity for brevity.

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?

For a zero-parameter list tool with an output schema, the description need not explain return values, but it should at least clarify scope or usage. It provides no behavioral context and no guidance on how this calendar list relates to the many sibling tools, leaving the agent with an incomplete picture.

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 per the rubric the baseline is 4. There are no parameter semantics to document, and the description does not conflict with the empty schema.

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

Purpose3/5

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

The description 'School calendar events.' names the resource but omits an explicit action verb, leaving the listing behavior to be inferred from the tool name. It is specific enough to identify the data domain, but it does not distinguish the tool from siblings by stating what it does (e.g., list versus search versus read).

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 conditions, and no mention of alternatives among the many sibling list/search tools. An agent must guess when to call this versus list_announcements, list_courses, or outlook_search.

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

list_coursesD

Student courses with teachers and class IDs (DP program).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior1/5

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

No annotations are provided, so the description must carry the full behavioral burden, but it discloses nothing about read-only safety, permissions, side effects, pagination, or output shape beyond a fragment of returned data. No behavioral trait is stated or implied by the description text itself.

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

Conciseness2/5

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

The description is a single short fragment. While brief, it is under-specified rather than concise, and it does not front-load an actionable verb or usage context that would help an agent decide to call it.

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?

For a tool with no annotations, 0% schema coverage, and one undocumented parameter, the description is incomplete. Although an output schema exists so return values need not be explained, the description still fails to clarify scope, usage, or parameter meaning.

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

Parameters1/5

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

There is one parameter ('year') with 0% schema description coverage, so the description must compensate by explaining its meaning or format. It does not mention the parameter at all, leaving an undocumented optional argument.

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

Purpose3/5

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

The description names the resource ('Student courses') and some returned fields ('teachers and class IDs'), plus a scope hint ('DP program'), but uses a noun phrase with no verb, so the action must be inferred from the tool name. It does not distinguish this tool from any sibling, leaving purpose vague.

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 list_courses versus alternatives like list_announcements or list_calendar, nor any prerequisites or filtering context. There is no usage guidance at all.

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

list_eolC

Teacher-published end-of-lesson tests with status, score, due messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether the operation is read-only, how pagination or sorting works, what authentication is needed, or what the response shape is.

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

Conciseness3/5

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

The description is a single terse phrase with no wasted words and front-loads the resource type and some fields. However, it is under-specified rather than efficiently complete.

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 annotations, no parameter descriptions, and only an output schema, the description is not complete enough for confident invocation. It omits pagination, selection context, and any operational behavior, leaving major gaps for a list tool.

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

Parameters1/5

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

Schema description coverage is 0% for both parameters, and the description does not mention limit or offset or any pagination behavior. It adds no meaning beyond the bare parameter names.

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

Purpose3/5

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

The description names the resource ('Teacher-published end-of-lesson tests') and some returned attributes, but omits an explicit action verb; the name supplies 'list'. It does not distinguish this tool from siblings such as list_assessments or list_resources.

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?

No guidance is given on when to use this tool, when not to use it, or which sibling tool to choose instead. The description provides no usage context beyond the resource name.

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

list_notificationsB

Notifications with unread_count and deep links (read-only; no mark-read).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
unread_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden and does usefully declare read-only behavior with no mark-read side effect, which is the critical safety trait. It says nothing about pagination behavior, permissions, or limits, so the behavioral picture is only partially filled in.

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 padding and the read-only constraint placed early. It is on the edge of under-specification rather than wasteful, so it is efficient but not exemplary.

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?

An output schema exists, so return-shape explanation is unnecessary, yet the description restates return fields while leaving all three parameters unexplained and offering no pagination or scope guidance. For a tool with zero annotation and zero schema-description coverage, more was needed.

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% across three parameters, and the description explains none of them; 'unread_count' refers to a returned field, not the 'unread_only' parameter. Names like limit/offset/unread_only are partly self-explanatory, but the description fails to compensate for the coverage gap.

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 ('Notifications') and adds scope detail (unread_count, deep links, read-only). It distinguishes from write operations but does not name a near sibling such as list_announcements, so an agent must still infer which notification-like feed to pick.

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 parenthetical 'read-only; no mark-read' implies when this tool applies and warns that a separate mutation path is needed, but it never states explicit when-to-use or when-not conditions or names an alternative tool.

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

list_resourcesC

Shared teacher resources (folders + files). Use parent_resource_id to open a folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
course_idNo
page_sizeNo
parent_resource_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says nothing about read-only semantics, pagination behavior (despite page/page_size params), permission requirements, or what a folder vs file listing returns — for a no-annotation listing tool this is a notable gap.

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 compact sentences with no filler and the domain scoping front-loaded. The terseness is a completeness problem rather than a verbosity one, so structure itself is efficient.

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?

An output schema exists so return values need not be described, but with 0% parameter coverage, no annotations, and no routing against the many sibling list/get/download tools, the definition is too thin for an agent to invoke confidently.

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% for 4 parameters, so the description must compensate and it only addresses parent_resource_id. course_id, page, and page_size are left entirely unexplained in both schema and description, leaving the agent to guess their semantics.

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

Purpose3/5

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

The description names the resource domain ('shared teacher resources (folders + files)') but never states the verb — it never says it lists or returns anything, relying on the tool name to imply that. It gives some sibling differentiation by scoping to teacher-shared content, but 'get_resource' and 'download_resource' are not contrasted.

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 only guidance is 'Use parent_resource_id to open a folder', which is parameter usage rather than when-to-use-this-tool. No mention of when to call list_resources vs get_resource, download_resource, or list_courses, and no prerequisites or exclusions.

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

od_browseB

List a OneDrive folder by path (or a SharePoint default-drive folder with site_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo/
site_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. "List" weakly implies a read-only operation, but nothing states permissions, pagination, recursion depth, error behavior, or whether the folder must already exist.

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 the core action first and the mode distinction parenthetically appended. No filler or restatement of the tool name.

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

Completeness3/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 described, but with zero annotation coverage, no parameter descriptions, and no pagination or path-format guidance, the definition is thin for a browsing tool an agent must invoke without further context.

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 0%, so the description must compensate, and it does partially: it explains that path addresses a OneDrive folder and site_id switches to a SharePoint default-drive folder. However, it never explains the path default of "/" (root) or the null default on site_id.

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 resource (OneDrive folder), plus the two addressing modes (path vs. site_id for SharePoint default drive). An agent can distinguish it from od_download or od_resolve_link, though the description never explicitly names a sibling to contrast with.

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

Usage 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 relative to the many sibling list_* tools, and no stated exclusions or prerequisites. The path/site_id conditional is really parameter-selection guidance rather than tool-selection guidance, so the agent must infer applicability from the name alone.

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

od_downloadA

Download a OneDrive/SharePoint file by item id or sharing link to ~/Downloads/induslms.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does add one valuable behavioral fact not available elsewhere – the file is written to ~/Downloads/induslms – but is silent on overwrite behavior for existing files, authentication/permission needs, and failure handling for invalid ids or links.

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?

One sentence, front-loaded with the action and resource, with the destination appended. No filler.

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 described, and the local destination is disclosed. For a one-parameter download tool this is nearly complete; the only gaps are overwrite/error semantics, which are minor here.

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 0% and the single 'target' property has no description at all. The description partially compensates by stating that target accepts an item id or a sharing link, resolving the main ambiguity, but gives no format examples or constraints.

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 (Download) and resource (OneDrive/SharePoint file) plus the destination path, which is more than a restated name. It does not explicitly differentiate itself from the sibling download_resource, so an agent must infer the split, but the 'item id or sharing link' scope is clear.

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 'by item id or sharing link' implies the two accepted target modes, which is useful usage context, but there is no explicit when-to-use/when-not guidance and no named alternative (e.g. download_resource or od_resolve_link) to route between.

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

outlook_foldersC

Outlook mail folders with unread/total counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It says nothing about whether this is a read-only operation, whether results are scoped to a mailbox or account, or any pagination/limit behavior, so an agent has no safety or side-effect signal.

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 short sentence with no wasted words, and the key payload detail (unread/total counts) is front-loaded. It is terse but not padded.

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?

An output schema exists, so return values need not be described, and there are no parameters to document. However, for a folder-enumeration tool with no annotations, the description still lacks any indication of read-only behavior or how it relates to sibling folder/search tools.

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 for the description to add; the baseline of 4 applies.

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

Purpose3/5

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

The description names the resource (Outlook mail folders) and hints at the payload (unread/total counts), so an agent can guess it retrieves folders. But it omits an explicit verb like 'list' and never distinguishes itself from the sibling schoolmail_folders, leaving the Outlook-vs-schoolmail routing to the tool name 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 call this tool versus outlook_search, outlook_read, or schoolmail_folders. Usage is only inferable from the noun phrase; no context, prerequisites, or alternatives are given.

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

outlook_readB

Read one Outlook message (subject, from, date, truncated body).

ParametersJSON Schema
NameRequiredDescriptionDefault
max_bodyNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load. It usefully discloses that the body is truncated, which is a real behavioral trait, but says nothing about auth requirements, error behavior for a missing message_id, or whether truncation is fixed or configurable. Partial coverage only.

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 tight sentence with the resource and scope front-loaded and a compact parenthetical for the return fields. No filler or restated boilerplate.

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?

An output schema exists, so the return shape need not be restated, and that partially offsets the thin description. However, for a read tool with zero annotations and zero parameter documentation, more context about the message_id source and truncation control was warranted.

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% and the description never references either parameter. message_id (required) and max_body are left entirely unexplained, and the description does not even connect max_body to the body truncation it mentions. With two undocumented parameters it fails to compensate for the coverage gap.

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 (Read) and resource (one Outlook message) and even enumerates the fields returned (subject, from, date, truncated body). It does not, however, differentiate itself from nearby siblings such as outlook_search or schoolmail_read, so the agent must infer the split from the name 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?

The description gives no indication of when to use this versus outlook_search (finding a message) or schoolmail_read (a different mail system). There is no mention of prerequisites, ordering, or the alternative paths an agent might take.

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

schoolmail_foldersC

School account mailboxes with message counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it only says mailboxes come with message counts. It never states that this is a read-only operation, what account or auth scope it operates against, or whether the counts are total versus unread — all of which matter for a mail tool with no annotation coverage.

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 short sentence with no filler, and the resource is front-loaded. It is efficient, though arguably too terse to be fully front-loaded with actionable intent since no verb anchors the sentence.

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?

An output schema exists, so return values need not be explained, and the zero-parameter signature keeps invocation trivial. However, with no annotations and heavy sibling overlap, the description leaves the read-only nature and the distinction from outlook_folders unspecified.

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-related gap exists.

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

Purpose3/5

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

The phrase 'School account mailboxes with message counts' identifies the resource and a hint of the content, but omits the verb entirely — an agent must infer this is a listing operation. It also fails to distinguish itself from the sibling outlook_folders, which sounds like the same kind of resource.

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 versus outlook_folders, schoolmail_search, or schoolmail_read. The agent is left to guess whether this is a discovery step preceding a read or a standalone listing call.

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

schoolmail_readB

Read one School email by ref 'Mailbox:id' (subject, from, date, body).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
max_bodyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether reading an email marks it as read, what permissions/auth are required, how invalid refs are handled, or any rate limits — a real gap for a mailbox read that may mutate read-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?

One front-loaded sentence: verb, resource, identifier format, and return fields. 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?

An output schema exists, so enumerating return fields was optional, and the read/mutation behavior and max_body semantics are the main omissions. Adequate but leaves meaningful gaps for a no-annotation tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It usefully defines the ref format ('Mailbox:id'), which the bare schema 'Ref' does not, but completely omits max_body (default 4000) and its truncation behavior.

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 ('Read one School email') with the exact ref format 'Mailbox:id' and the returned fields named. It implicitly separates itself from schoolmail_search (many) by emphasizing 'one', though it never explicitly names a sibling.

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 'by ref Mailbox:id' implies you must already hold a ref (e.g. from schoolmail_search or schoolmail_folders), which is usable context. But there is no explicit when-to-use/when-not statement or named alternative.

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. 10 tool updatesv0.3.1
    • Changedassignments_overview1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Changeddownload_resource1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Changedget_attendance_day1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Changedget_resource1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Changedlist_eol1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Changedlist_notifications1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Changedlist_resources1 field changed
      • removedInput schema / properties / tenant_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Tenant Id"
        -}
    • Addedod_browse
    • Addedod_download
    • Addedod_resolve_link
  2. 19 tool updatesv0.2.0
    • First observedassignments_overview
    • First observeddownload_resource
    • First observedget_attendance
    • First observedget_attendance_day
    • First observedget_profile
    • First observedget_resource
    • First observedlist_announcements
    • First observedlist_assessments
    • First observedlist_calendar
    • First observedlist_courses
    • First observedlist_eol
    • First observedlist_notifications
    • First observedlist_resources
    • First observedoutlook_folders
    • First observedoutlook_read
    • First observedoutlook_search
    • First observedschoolmail_folders
    • First observedschoolmail_read
    • First observedschoolmail_search

TDQS

C2.8/5.0

Scored across 22 tools

Disambiguation3/5

Several tool pairs overlap in purpose: get_attendance vs get_attendance_day, outlook_* vs schoolmail_* (same operations on two mail sources), and od_download vs download_resource. Descriptions do clarify the distinctions, but an agent must read carefully to pick the right one for a given source/scope.

Naming Consistency4/5

Mostly snake_case verb_noun (list_resources, get_attendance, download_resource), but mail/OneDrive tools use source prefixes where the verb comes after (od_browse, outlook_search, schoolmail_folders), which is a minor deviation from the dominant pattern. Still readable and predictable overall.

Tool Count3/5

22 tools is on the heavy side. The breadth of domains (attendance, assessments, resources, calendar, notifications, courses, profile) justifies many, but the dual mail stacks (outlook_* and schoolmail_*) and dual download tools create near-duplicate surface that inflates the count.

Completeness4/5

Covers the main student read workflows: profile, courses, attendance (summary+day), assessments, EOL, resources, calendar, announcements, notifications, and mail. Gaps are minor (no mark-read for notifications by design, no assignment submission), leaving the surface largely workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for Chaoxing (学习通) that logs into a user's account and exposes their class schedule, enrolled courses, course materials downloads, homework status, exam schedules and scores, chapter task-point progress, notices, and personal cloud drive files. Enables any MCP client to answer natural-language questions about a student's coursework without submitting anything or modifying account data.
    4
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides MCP clients with structured local access to Canvas LMS data—such as assignments, rubrics, module readings, feedback, and deadlines—for academic planning via stdio, using an authenticated browser session instead of an API token.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Exposes three read-only tools over stdio — guarded SQL querying, SKU status lookup, and document retrieval — plus a schema resource. This lets MCP clients such as Claude Code answer stock and policy questions without any write access.
    MIT