Skip to main content
Glama

canvas-student-mcp

The Canvas LMS MCP server that works even when your school disables API tokens.

CI License: MIT Node >= 18 TypeScript

Gives Claude (or any MCP client) live, read-only access to your Canvas account: courses, syllabus, assignments with submission status, grades, announcements, modules, pages, files, discussions, quizzes, to-dos, and calendar. Pair it with a Notion connector and archive an entire course with one prompt.

Why another Canvas MCP?

Several good Canvas MCP servers already exist — vishalsachdev/canvas-mcp, DMontgomery40/mcp-canvas-lms, mtgibbs/canvas-lms-mcp, and others. All of them require a personal API token.

Here's the problem: many universities disable self-service token generation for students. Open Account → Settings and there's simply no + New Access Token button. At those schools, every token-based server is a dead end.

This server solves that with session-cookie authentication: log into Canvas in your browser, copy the session cookie once, and you're connected. The Canvas web UI talks to the same /api/v1 REST API with that cookie, so no admin policy can block it without breaking Canvas itself.

What that requires under the hood (and what the token-based servers don't do):

  • XSSI guard stripping — cookie-authenticated Canvas responses are prefixed with while(1);, which breaks naive JSON parsing

  • Login-redirect detection — expired sessions redirect to the login page instead of returning 401; the server catches redirects and non-JSON bodies and tells you exactly how to refresh, instead of failing cryptically

  • Credentialed file downloads — token sessions get a verifier= param that makes file URLs self-authenticating; cookie sessions don't, so downloads must carry the session cookie (Canvas answers 500 otherwise). Redirects are followed manually so credentials are never forwarded to a CDN

  • Expiry-aware errors — every failure mode explains the fix in the error message itself

Design principles that differentiate it beyond auth:

  • Read-only by design. Every tool is a GET. The server physically cannot submit assignments, post discussions, or modify anything — safe to hand to an autonomous agent.

  • Context-efficient responses. Canvas API payloads are enormous; every tool trims to the fields an LLM actually needs, converts HTML to clean text (preserving link URLs), and caps pagination with explicit truncation notices.

  • Small and auditable. Strict TypeScript, three runtime dependencies (the MCP SDK, zod, and unpdf for PDF text). You can read the whole thing before trusting it with your school account.

Token auth is still supported if your school allows it — the cookie is the fallback, not the only path.

Related MCP server: canvas-parent-mcp

Tools (29)

Tool

What it does

canvas_get_profile

Verify credentials / who am I

canvas_list_courses

Courses with current grade (active / completed / all)

canvas_get_course

Course details + full syllabus as text

canvas_list_assignments

Assignments by due date w/ your submission status; bucket filters (upcoming, overdue, …)

canvas_get_assignment

Full description, rubric, your submission + score

canvas_get_grades

All-course grade overview, or per-assignment breakdown for one course

canvas_list_announcements

Announcements across active courses, or one course / date range

canvas_list_modules

Course content outline with items

canvas_list_pages / canvas_get_page

Course wiki pages, full text

canvas_list_files / canvas_get_file_link

Course files + temporary download URLs

canvas_list_discussions / canvas_get_discussion

Discussion topics and full threads

canvas_list_quizzes

Quizzes with due dates, time limits, attempts

canvas_list_todo / canvas_list_upcoming

Your to-do list and upcoming deadlines

canvas_list_calendar_events

Events or assignment deadlines in a date range

canvas_list_inbox / canvas_get_conversation

Read Canvas inbox threads — without marking them read

canvas_get_feedback

Grader comments and rubric assessments on your submissions

canvas_grade_breakdown

Grade by assignment group + what-if calculator: "what do I need on the final for an A?"

canvas_list_planner

Planner feed with new-activity flags and submission state

canvas_read_file

Extract text from course files — PDF, Word, PowerPoint, Excel, HTML, plain text

canvas_read_syllabus

Syllabus as text, whether it's typed into Canvas or posted as an attached PDF/Word file

canvas_list_groups

Your group memberships

canvas_get_module_progress

Module completion state and what each item still requires

canvas_list_peer_reviews

Peer reviews assigned to you

canvas_export_course

One-shot markdown export of an entire course — built for Notion archiving

canvas_auth_status

Diagnose the connection: which credential, stored where, still valid?

Three of these are worth calling out.

canvas_read_file turns course materials into readable text, which is what makes "quiz me on this week's slides" or "what's the late-work policy" actually work. PDFs go through unpdf; Office formats are handled in-repo — .docx, .pptx, and .xlsx are ZIP containers of XML, so a small ZIP reader over Node's built-in zlib covers all three with no dependency. canvas_read_syllabus builds on it: it detects when a syllabus is only a file link and reads the attachment instead, which is the common case (2 of the 3 courses tested). canvas_grade_breakdown implements both of Canvas's grading models (weighted-by-group and total-points), cross-checks its arithmetic against the score Canvas itself reports, and tells you when drop rules or unposted assignment groups make a projection unreliable — instead of quietly returning a confident wrong number. canvas_get_conversation passes auto_mark_as_read=false, so an agent reading your inbox doesn't silently mark your messages read; that behavior is verified against a live unread thread, not just assumed.

See ROADMAP.md for what's planned next and why writes are deliberately out of scope.

Quick start

No install needed — npx fetches it on demand:

npx canvas-student-mcp

Or from source:

git clone https://github.com/xmike04/canvas-student-mcp.git
cd canvas-student-mcp
npm install && npm run build

Get credentials

Option A — API token (if your school allows it): Canvas → Account → Settings → Approved Integrations → + New Access Token.

Option B — session cookie (for locked-down schools):

  1. Log into your school's Canvas in any browser

  2. DevTools (Cmd/Ctrl+Shift+I) → Network tab → refresh

  3. Click any request to your Canvas domain → Request Headers → copy the full cookie: value (or just the canvas_session=... pair — that one cookie is sufficient)

Either credential grants read access to your Canvas account. Treat it like a password.

Store the credential (macOS: use the Keychain)

MCP client configs are plaintext JSON. On macOS you can keep the credential out of them entirely:

security add-generic-password -s canvas-student-mcp -a cookie -w 'canvas_session=PASTE_VALUE_HERE' -U

Use -a token instead of -a cookie for an API token. The server checks environment variables first, then the Keychain, so this is opt-in and nothing breaks if you skip it. CANVAS_NO_KEYCHAIN=1 disables the lookup.

Register with Claude

Claude Code — with the credential in the Keychain, the config holds no secret at all:

claude mcp add canvas --scope user \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Passing the credential inline instead of using the Keychain:

claude mcp add canvas --scope user \
  --env 'CANVAS_COOKIE=canvas_session=PASTE_VALUE_HERE' \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/canvas-student-mcp/dist/index.js"],
      "env": {
        "CANVAS_COOKIE": "canvas_session=PASTE_VALUE_HERE",
        "CANVAS_BASE_URL": "https://yourschool.instructure.com"
      }
    }
  }
}

Use CANVAS_API_TOKEN instead of CANVAS_COOKIE for token auth (token wins if both are set). Verify with: "check my Canvas profile."

When the cookie expires (your browser session ends), every tool tells you plainly — re-copy and update the config. With "stay signed in" checked, sessions typically last weeks.

Agent skills

Three packaged workflows ship in skills/. Copy any of them into ~/.claude/skills/ (or your project's .claude/skills/) and Claude will use them automatically when the request fits:

Skill

What it does

canvas-morning-check

Daily briefing: what's due, new announcements, unread messages, new grades

canvas-week-plan

Reads the actual assignments and builds a day-by-day plan for the week

canvas-grade-check

Grade standing plus what-if answers, with the caveats carried through

cp -R skills/canvas-morning-check ~/.claude/skills/

Things to ask once connected

  • "What's due in the next two weeks across all my classes?"

  • "What's my current grade in each course, and which assignments am I missing?"

  • "Summarize this week's announcements from all my courses."

  • "Export my BIOL 1710 course and archive it into my Notion School folder." (with a Notion connector)

  • "Read the Week 3 page in my history course and quiz me on it."

Architecture notes

  • stdio transport, stateless — one process per client session, no ports, no telemetry, no storage. Data flows Canvas → this process → your MCP client, nowhere else.

  • Auto-pagination follows Canvas Link: rel="next" headers, capped at 5 pages × 100 items with explicit truncation notices so agent context stays bounded.

  • HTML → text conversion for syllabi, descriptions, announcements, and pages — structural tags become line breaks/bullets, links become text (url).

  • Zod input schemas on every tool; MCP annotations (readOnlyHint) declared throughout.

Development

npm run build   # strict TypeScript compile
npm test        # smoke test: MCP handshake, all 30 tools register, error paths

The smoke test runs entirely offline — CI needs no Canvas account, and it sets CANVAS_NO_KEYCHAIN=1 so a real stored credential can't leak into a test run.

Releasing

Publishing runs from CI (.github/workflows/release.yml), so no one publishes from a laptop:

npm version minor && git push --follow-tags

Pushing the tag triggers a build, the full test suite, a package-contents inspection, and a guard that the tag matches package.json — then publishes with provenance, which cryptographically links the published tarball to the commit and workflow that built it. Running the workflow manually from the Actions tab does everything except publish, as a dry run.

Security model

  • Read-only: every Canvas call is a GET; no tool can write to Canvas. Even reading your inbox leaves messages unread.

  • Credentials live in your MCP client's env config or the macOS Keychain — never on disk in this repo, never transmitted anywhere but your school's Canvas domain. File downloads follow redirects manually so credentials are never forwarded to a CDN.

  • Rotate at will: log out of Canvas (or revoke the token) and the credential is dead everywhere.

  • canvas_auth_status tells you which credential is in use, where it's stored, and whether it still works.

License

MIT

Available Tools

30 tools
canvas_auth_statusCheck credential statusA
Read-only

Diagnose the Canvas connection: which credential is in use, where it's stored, and whether it still works. Run this first when something fails, or before a scheduled job, to distinguish an expired session from a real error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns (it is a diagnostic check). The description adds context about the credential's storage and validity, but doesn't mention output format or any potential side effects (e.g., network calls). Still, with strong annotations, this is adequate. No contradiction.

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 core function ('Diagnose the Canvas connection') and followed by clear usage instructions. Zero waste, every word adds value.

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?

Despite no output schema and no parameters, the description sufficiently covers what the tool does and when to use it. It doesn't describe the return format (e.g., JSON), but for a diagnostic tool, the guidance on usage is more critical. With strong annotations, this is complete enough.

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

Parameters4/5

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

There are no parameters, so schema coverage is 100%. The description adds value by explaining what the tool examines (credential, storage, validity) without needing to explain parameters. Baseline for 0 params is 4, and the description enriches understanding of what 'status' means.

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 the tool's purpose: 'Diagnose the Canvas connection' and specifies exactly what it checks (which credential, where stored, whether it works). It distinguishes itself from sibling tools by focusing on connection/auth status, which no other sibling suggests.

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

Usage Guidelines5/5

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

Explicitly instructs when to use: 'Run this first when something fails, or before a scheduled job, to distinguish an expired session from a real error.' This provides clear guidance on timing and purpose, and implicitly differentiates from operations on Canvas content (courses, modules, etc.).

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

canvas_export_courseExport course to markdownA
Read-only

One-shot export of a course as a single markdown document: details, syllabus, grade, all assignments with submission status, module outline, and recent announcements. Designed for archiving to Notion or notes apps.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

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. The description adds valuable behavioral context: that the export is a single markdown document containing specific elements. It does not contradict annotations and adds context about output format and scope beyond the 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?

The description is two sentences long, front-loading the purpose and content list, followed by a use-case sentence. No unnecessary words or repetition.

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?

Given the simple single-parameter tool and no output schema, the description adequately explains what the return value contains (markdown document with listed sections) and its intended use (archiving). It does not cover error cases or size limits, but these are minor given the overall clarity.

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 100% schema description coverage (the only parameter 'course_id' is described as 'Canvas course ID'), the description does not add further parameter semantics. Baseline of 3 is appropriate since schema already handles documentation.

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 the verb 'export' and resource 'course', specifies the output format ('single markdown document'), and lists the included components (details, syllabus, grade, assignments, modules, announcements). This distinguishes it from sibling tools that focus on single components.

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 provides clear context: it's a 'one-shot export' designed for archiving to Notion or notes apps. It implies use when a comprehensive snapshot is needed, but does not explicitly state when not to use it or name alternative tools for partial exports.

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

canvas_get_assignmentGet assignment detailsA
Read-only

Get one assignment's full details: description (as text), due/lock dates, rubric, and the user's submission with score and grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
assignment_idYesCanvas assignment ID

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false, so the description adds value by disclosing exactly what fields are returned (description as text, dates, rubric, user's submission with score/grade). This is critical since no output schema exists, and it explains the scope and granularity of the response.

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, well-structured sentence that immediately states the purpose and lists key return components. Every word adds value, making it efficient and easy to parse.

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 two simple parameters, the description sufficiently explains what the response contains, compensating for the lack of an output schema. It could mention that it returns only the current user's submission or potential error conditions, but it is adequate for typical use.

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% with both parameters having descriptions in the input schema. The description does not add any additional parameter semantics beyond what the schema already provides, so the baseline score of 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 uses a specific verb ('Get') and resource ('one assignment's full details'), listing exact fields returned. It clearly distinguishes from sibling tools like canvas_list_assignments which lists assignments rather than getting details.

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 implies usage for retrieving full details of a single assignment, but does not explicitly state when to use this versus alternatives like canvas_list_assignments or how it differs from other get tools. Context is clear but lacks explicit guidance or exclusions.

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

canvas_get_conversationRead a conversation threadA
Read-only

Read the full message thread of one conversation, including every reply. Does NOT mark the conversation as read.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesConversation ID from canvas_list_inbox

TDQS

A4/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, confirming safe read-only behavior. The description adds valuable context beyond annotations by stating that the tool does not mark the conversation as read, a key behavioral nuance. This is sufficient disclosure for this type of 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?

The description is just two sentences. The first sentence delivers the core action (read full thread), and the second adds a critical behavioral caveat. Every word is purposeful, and the information is front-loaded—no fluff or redundancy.

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 straightforward with one parameter and no output schema. The description adequately explains what it does and a key side effect. While it could elaborate on return format or ordering, annotations cover safety, and the complexity is low, making this description sufficiently 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%: the single parameter conversation_id has a clear description ('Conversation ID from canvas_list_inbox'). The tool description does not add additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb-resource pair ('Read the full message thread') and clearly distinguishes the tool from siblings like canvas_list_inbox by specifying it targets a single conversation thread. The additional statement about not marking as read further clarifies its scope.

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

Usage Guidelines3/5

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

The description implies the tool is used after obtaining a conversation_id from canvas_list_inbox but does not explicitly state when to use it or when to prefer an alternative. No guidance on exclusions or alternative tools is provided, leaving the agent to infer context from sibling names.

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

canvas_get_courseGet course details + syllabusA
Read-only

Get one course's details including the full syllabus text, term, and current score. course_id comes from canvas_list_courses.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A3.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 the safety is clear. The description adds value by revealing that the tool returns 'full syllabus text', 'term', and 'current score', which are behavioral traits not inferable from annotations alone. No contradiction exists between description and 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 19-word sentence that immediately states the tool's purpose and key contents. Every word earns its place, with no filler. The critical guidance about course_id source is front-loaded in the same 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?

Given the tool has 1 parameter, no output schema, and is a simple read operation, the description adequately covers the basics. However, it could be more complete by mentioning whether the tool returns only the current score or historical grades, and whether the syllabus text is complete or truncated. For a tool with this complexity, a 3 is reasonable but leaves some ambiguity.

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 parameter course_id has a clear schema description. The description adds minimal extra meaning beyond the schema by noting the source of course_id, which is helpful context but not essential for parameter semantics. Baseline 3 is appropriate as the schema already documents the parameter well.

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 clearly states the verb 'Get' and the resource 'one course's details', and specifies the included fields: full syllabus text, term, and current score. It distinguishes this tool from siblings like canvas_list_courses by indicating it retrieves a single course's detail versus listing courses, though it doesn't explicitly differentiate from canvas_get_grades which also deals with scores.

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 tells the agent that course_id comes from canvas_list_courses, providing a clear prerequisite. However, it does not specify when to use this tool versus alternatives like canvas_read_syllabus (which is a sibling that might overlap in reading syllabus content) or when not to use it. The guidance is minimal but functional.

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

canvas_get_discussionRead a discussion threadA
Read-only

Read a discussion topic's full thread, including replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesDiscussion topic ID from canvas_list_discussions
course_idYesCanvas course ID

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds minimal behavioral context beyond stating it is a read operation. It does not mention permissions, pagination, or what happens to the state, failing to add value beyond the annotations.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for the tool's simplicity.

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 simple (2 required params, no output schema, annotations present). The description mentions 'including replies' but lacks detail on the return structure (e.g., nested replies, author info). It is minimally adequate but leaves gaps for an agent deciding whether the output covers its needs.

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 parameters having clear descriptions. The tool description does not add any additional meaning or context to the parameters beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Read') and the resource ('discussion topic's full thread, including replies'). It effectively distinguishes from sibling tools like 'canvas_list_discussions' (which lists topics) and other read operations.

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

Usage Guidelines3/5

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

The description implies using this tool after listing discussions, but it does not explicitly state when to use it versus alternatives (e.g., 'canvas_list_discussions' for summaries). No when-not-to-use guidance or prerequisites are provided.

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

canvas_get_feedbackGet grader feedbackA
Read-only

Get grader comments and rubric assessments on your submissions — what the instructor or TA actually wrote. Omit course_id to check every active course. Only returns submissions that have feedback or a grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idNoLimit to one course; default all active courses
include_emptyNoInclude submissions with no feedback and no grade; default false

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already indicate readOnlyHint is true, so the description does not need to restate safety. The description adds value by clarifying the tool excludes submissions without feedback or grade (unless include_empty is used), which is behavioral nuance beyond the annotations. No contradiction with 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?

Description is two sentences that front-load the primary purpose, each sentence earning its place. First sentence states the core function, second adds key usage detail. No fluff.

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 relatively simple with only 2 optional parameters and no output schema. The description covers the main behavior (returns feedback-holding submissions) and the default for course_id. It would be more complete if it mentioned that the tool only applies to graded submissions, but for a read-only list tool with good annotations and clear schema, it suffices.

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

Parameters3/5

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

Schema description coverage is 100%, so the description does not need to redefine parameters. However, the description does not add any extra context beyond what the schema already provides for course_id and include_empty, producing a baseline score of 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 clearly states the tool retrieves grader comments and rubric assessments, which distinguishes it from other tools in the sibling list like `canvas_get_grades` or `canvas_list_todo`. The verb 'get' and the resource 'feedback on submissions' are specific and unambiguous.

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 explicitly explains when to omit the course_id parameter to check every active course, and notes that only submissions with feedback or a grade are returned. However, it does not exclude when not to use it (e.g., when only grade totals are needed) nor mention alternatives like `canvas_get_grades` which could be a sibling for grade-related needs.

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

canvas_get_gradesGet gradesA
Read-only

Without course_id: current score/grade for every active course. With course_id: every graded submission in that course (assignment name, score, points possible, late/missing flags) — useful for 'what's my grade breakdown'.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idNoCanvas course ID; omit for all-course overview

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint:true and destructiveHint:false, so the description doesn't need to reiterate safety. It adds useful behavioral context about the two modes and the return fields. However, it does not mention pagination behavior, rate limits, or what happens if a course has no graded submissions — these are minor gaps that prevent a higher score.

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 only two sentences, front-loading the most important behavioral distinction. Every sentence adds value. It could be slightly more concise by removing the trailing em-dash phrase but overall is efficient.

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?

Given the tool has only one optional parameter, full schema coverage, and readOnlyHint/true, the description covers the core behavior well. No output schema exists, but the description explains what fields are returned (assignment name, score, points possible, flags). A small improvement would be noting if results are paginated or sorted.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining the behavioral difference between providing course_id (detailed breakdown) vs. omitting it (overview). This semantic distinction goes beyond the schema's description and justifies a 4.

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 a specific verb ('get') and two distinct resources depending on whether course_id is provided: current score/grade for active courses, or graded submissions with assignment name, score, points possible, and flags. It distinguishes itself from siblings like canvas_grade_breakdown by explaining the different granularity.

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 explicitly tells when to use each variant (without course_id vs. with course_id) and provides a concrete use case ('what's my grade breakdown'). However, it does not explicitly state when not to use it or name alternative tools for similar needs, so it falls 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.

canvas_get_module_progressModule completion progressA
Read-only

Show module-by-module progress: which modules are locked, started, or completed, and for each item what Canvas requires to mark it done (view it, submit it, contribute, or score a minimum) and whether you've done it.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
incomplete_onlyNoOnly show items you still need to complete

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral traits beyond annotations by detailing the specific output structure (module states, item requirements, completion status). No contradictions 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, well-structured sentence that front-loads the core purpose ('Show module-by-module progress') and efficiently packs all key details about states and requirements without any waste.

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 description adequately explains the return value structure (module states, per-item requirements and completion) despite no output schema. It covers the main aspects an agent needs to understand the tool's output, though it does not specify the exact hierarchical format.

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?

Input schema has 100% description coverage, with clear descriptions for course_id and incomplete_only. The tool description adds no extra meaning for the parameters beyond what the schema provides; it describes the output instead. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it shows module-by-module progress including states (locked/started/completed) and per-item requirements (view/submit/contribute/score) with completion status. This distinguishes it from the sibling canvas_list_modules which only lists modules without progress details.

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 implies when to use this tool—when module-level progress and per-item requirements are needed. It doesn't explicitly exclude alternatives or state when not to use it, but the context is clear given sibling tools.

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

canvas_get_pageRead a course pageA
Read-only

Read one course page's full content as text. page_url is the 'url' slug from canvas_list_pages or canvas_list_modules.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_urlYesPage URL slug (e.g. 'week-1-overview') or page ID
course_idYesCanvas course ID

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint: true and destructiveHint: false, so the description adds value by specifying the output format ('full content as text'). It does not repeat annotation info and adds unique context. There is no contradiction with 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 extremely concise: two sentences with no excess words. Every sentence adds value—the first explains the core action and output, the second clarifies the parameter source. No redundancy or 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?

Given the tool has a simple read operation, 100% schema coverage, no output schema, and strong annotations, the description is complete. It tells the agent what it does, what the output is, and where to get the parameter. No additional context is needed for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds minimal semantic value beyond the schema: it clarifies that page_url is a 'slug' from other tools, which is useful context. Baseline 3 is appropriate as the description adds marginal but helpful 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?

The description clearly states the tool reads a course page's full content as text, using a specific verb ('Read') and resource ('course page'). It distinguishes itself from siblings like canvas_list_pages (which likely lists pages without content) and canvas_list_modules (which lists modules). However, it could be more explicit about the distinction from sibling tools.

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 tells users to use the 'url' slug from canvas_list_pages or canvas_list_modules as the page_url, providing clear context on how to obtain the parameter value. It does not explicitly state when not to use this tool or mention alternatives, but the sibling list and the instruction to read rather than list implicitly guide usage.

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

canvas_get_profileGet my Canvas profileA
Read-only

Fetch the authenticated user's Canvas profile (name, primary email, id). Use this to verify the API token works.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.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 description's main behavioral contribution is specifying the returned fields. It adds no details about authentication scope, rate limits, or error behaviors, but for a simple read-only profile fetch, this is acceptable. No contradictions with 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 consists of two short sentences with no wasted words. The action and output are front-loaded, making it immediately scannable. Every sentence serves a purpose: stating what it does and providing a usage hint.

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?

Given the tool has no parameters, no output schema, and low complexity, the description fully covers the purpose, usage context, and output format. It is complete for an agent to understand and invoke the tool correctly.

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

Parameters4/5

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

There are zero parameters, and the schema description coverage is 100%. Per the guidelines, zero parameters warrant a baseline of 4. The description implicitly confirms no parameters are needed, which adds no new meaning but aligns with expected behavior.

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 uses the specific verb 'Fetch' with the resource 'Canvas profile' and lists the returned fields (name, primary email, id). It clearly distinguishes this tool from siblings like canvas_auth_status or canvas_list_courses by focusing specifically on the authenticated user's own profile.

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 explicitly states one primary use case: 'Use this to verify the API token works.' This gives clear guidance on when to apply the tool. It does not mention when not to use it or suggest alternatives, but given the tool's simplicity, the provided guidance is sufficient.

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

canvas_grade_breakdownGrade breakdown & what-if calculatorA
Read-only

Break a course grade down by assignment group (with weights), showing what's graded, what's left, and your current standing. Pass target_grade (e.g. 90) to compute the average you need on all remaining work to finish at that grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
target_gradeNoDesired final percentage, e.g. 90 for an A

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, so the agent knows this is a safe read operation. The description adds value beyond annotations by disclosing the behavioral trait that it shows 'what's graded, what's left, and your current standing' and that passing target_grade triggers a computation. No contradictions with 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?

Two sentences, no wasted words. The first sentence front-loads the core purpose, and the second sentence precisely explains the optional parameter. Every sentence earns its place.

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?

Given the tool's moderate complexity (2 params, no output schema, no nested objects), the description is nearly complete. It explains the breakdown, the what-if feature, and the parameter semantics. However, it doesn't describe the return format (e.g., whether it returns per-group details or just a summary), which could be useful for the agent. Still, without an output schema, the description covers the main expectations well.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds meaning by explaining that `target_grade` is optional and used for the what-if calculation ('compute the average you need on all remaining work'), which is not in the schema. The `course_id` parameter is standard and needs no elaboration.

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 uses a specific verb ('break down') and clearly identifies the resource ('course grade by assignment group') and the tool's dual functionality: showing current standing and computing what-if scenarios. This distinguishes it from siblings like canvas_get_grades, which likely just returns a number, and canvas_list_assignments, which lists items without grade breakdown.

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 explicitly states when to use the `target_grade` parameter ('Pass target_grade... to compute the average you need'), providing clear guidance for the what-if use case. However, it does not explicitly state when NOT to use this tool (e.g., if you only need a single numerical grade, use canvas_get_grades instead), leaving some ambiguity for the agent.

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

canvas_list_announcementsList announcementsA
Read-only

List announcements. Defaults to all active courses over the last 30 days; pass course_id and/or start_date (ISO) to narrow or widen.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoISO date (YYYY-MM-DD); default today
course_idNoLimit to one course
start_dateNoISO date (YYYY-MM-DD); default 30 days ago

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, so the tool is clearly read-only and non-destructive. The description adds behavioral context that the default time window is 30 days and that it applies to active courses, which is useful beyond the annotations.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the purpose and immediately adds crucial default and customization details. Every word is necessary and there is no fluff.

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?

Given that there is no output schema and no required parameters, the description adequately explains inputs and defaults. It could optionally mention that the result is a list of announcement objects, but for a low-complexity read-only tool, it is sufficiently complete to inform an agent.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the default behavior for start_date (30 days ago) and end_date (today), and connecting course_id to limiting by course. This goes beyond the schema's brief parameter descriptions.

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 'List announcements' and specifies the scope: 'Defaults to all active courses over the last 30 days', with options to narrow or widen via course_id and start_date. This differentiates it from sibling tools like canvas_list_modules or canvas_list_discussions.

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 provides context for when to use this tool: when listing announcements with default scope or custom filtering by course or date range. However, it does not explicitly mention when not to use it or how it compares to other list tools like canvas_list_inbox or canvas_get_feedback.

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

canvas_list_assignmentsList assignmentsA
Read-only

List a course's assignments ordered by due date, each with the user's submission status (submitted/score/late/missing). Optional bucket filters: upcoming, past, overdue, undated, ungraded, unsubmitted, future.

ParametersJSON Schema
NameRequiredDescriptionDefault
bucketNoFilter assignments by due-date/submission bucket
course_idYesCanvas course ID

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, openWorldHint=true, and destructiveHint=false, so the tool is safe and non-destructive. The description adds value by specifying ordering ('by due date') and the inclusion of submission status, which goes beyond what annotations provide.

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 sentences, front-loads the core purpose, and adds bucket filters concisely. Every sentence earns its place with no redundancy.

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?

Given the tool's simplicity (2 parameters, no output schema, read-only), the description is complete enough. It covers what is listed, ordering, and filtering options. A minor gap is the lack of mention of pagination or return format, but for a list tool this is acceptable.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds no additional meaning beyond the schema, but it does list the enum values explicitly in the description text, reinforcing the options. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses specific verbs ('list') and resources ('assignments' with 'submission status'), and distinguishes from siblings like 'canvas_get_assignment' (single) and 'canvas_list_todo' (different scope). It clearly states ordering by due date and includes submission details.

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 lists optional bucket filters for common use cases, which helps an agent decide when to apply them. However, it does not explicitly state when to use this tool versus alternatives like 'canvas_list_todo' or 'canvas_get_assignment'.

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

canvas_list_calendar_eventsCalendar eventsA
Read-only

Calendar events (lectures, office hours, deadlines) between two dates. type='assignment' shows assignment due dates instead of plain events.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoDefault 'event'
end_dateYesISO date YYYY-MM-DD
course_idNoLimit to one course; default all active courses
start_dateYesISO date YYYY-MM-DD

TDQS

A4/5.0
Behavior4/5

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

Annotations clearly mark readOnlyHint and destructiveHint false, so the description doesn't need to reiterate safety. The description adds value by revealing that the tool can produce two different data shapes (events vs. assignments) and that it aggregates all courses. This contextualizes the 'openWorldHint' annotation by showing the scope filtering per course.

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 sentences long, front-loads the core purpose (list events between dates), and adds one valuable nuance about the type parameter. Every word contributes meaning; there is no repetition of schema or annotation data.

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 has 4 parameters (all described in schema), no output schema, and moderate complexity (two event types, optional course filter). The description explains the key variant (assignment type) and default behavior (all courses). However, it does not mention the response format or pagination, which might be needed for completeness given no output schema, but this is a minor gap for a read-only list operation.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters with types and descriptions. The description adds only minor semantics: clarifying that 'type=assignment' yields assignment due dates (while the schema enum just lists 'assignment') and that course_id limits to one course (vs. default all). This enriches the schema but is not extensive.

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 the tool lists calendar events between dates, specifying types like lectures, office hours, deadlines. It distinguishes itself from siblings by noting that 'type=assignment' shows assignment due dates, which is unique among the sibling tools (e.g., canvas_list_assignments likely lists assignments differently, not as calendar events).

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 implicitly suggests using 'type=assignment' for due dates but does not explicitly state when to use this tool over alternatives like canvas_list_assignments or canvas_list_todo. It lacks guidance on prerequisites (e.g., course enrollment, tool auth) and does not mention 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.

canvas_list_coursesList my coursesA
Read-only

List the user's Canvas courses with current score/grade per course. state='active' (default) for this semester, 'completed' for past courses, 'all' for everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoEnrollment state filter; default 'active'

TDQS

A4.6/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`, making the non-mutating behavior clear. The description adds crucial behavioral context by specifying the default `state` behavior ('active' by default) and the scope of included data (current score/grade). A small gap remains: it doesn't explicitly state that results are scoped to the authenticated user (implied by 'my courses' in the title), but the combination of title, description, and annotations is strong.

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 sentences long with zero wasted words. The first sentence establishes purpose and key feature (score/grade), the second sentence clearly explains the parameter's behavioral effect. Every sentence earns its place.

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?

Given the tool's low complexity (1 optional param, no output schema) and the richness of annotations and schema coverage, the description is largely complete. It explains the filter behavior and default clearly. The only minor gap is lacking explicit mention of the return format (e.g., pagination or structure), but this is acceptable for a simple list tool with no output schema and a strong title.

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 schema already documents the parameter and its enum values. The description adds significant meaning by explaining the real-world mapping of each enum value ('this semester', 'past courses', 'everything'), which is not present in the schema's generic 'Enrollment state filter' description. This goes beyond the schema baseline of 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 provides a specific verb ('List'), a clear resource ('the user's Canvas courses'), and the unique value ('with current score/grade per course'). It distinguishes this tool from the sibling `canvas_list_modules`, `canvas_get_course`, and `canvas_get_grades` by bundling score display with the list, making its purpose immediately obvious and distinct.

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?

The description explicitly tells the agent when to use which filter: `state='active'` for the current semester, `state='completed'` for past courses, and `state='all'` for everything. This provides clear context and exclusions (e.g., not for a specific course detail, which belongs to `canvas_get_course`), and implicitly guides against misuse.

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

canvas_list_discussionsList discussionsA
Read-only

List a course's discussion topics with unread counts and due dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

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 description adds value by disclosing that the response includes 'unread counts and due dates'. However, it omits other behavioral traits such as pagination, ordering, or filtering capabilities. The added context is moderate.

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 that efficiently conveys the tool's purpose and key output details. No superfluous words or repetition. Every word earns its place.

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 list tool with one parameter, annotations, and no output schema, the description adequately covers the purpose and key output fields. It hints at the response structure (topics with unread counts and due dates). However, it could mention pagination or sorting if applicable, but given the tool's simplicity, it is mostly 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 coverage is 100% with the sole parameter 'course_id' described as 'Canvas course ID'. The description does not add any new meaning beyond the schema, such as format, constraints, or examples. With high coverage, baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'discussion topics' with specific additional information ('unread counts and due dates'). This distinguishes it from sibling tools like canvas_list_assignments or canvas_list_announcements, which list different resources. The scope is implied by the course_id parameter.

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 provides no guidance on when to use this tool versus alternatives (e.g., canvas_get_discussion for a single discussion). It does not state when not to use it or mention any prerequisites. The agent must infer usage from context alone.

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

canvas_list_filesList course filesA
Read-only

List files in a course (slides, PDFs, handouts). Use search_term to filter by name. Returns file IDs for canvas_get_file_link.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
search_termNoFilter files by name

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the core safety profile is covered. The description adds that the tool returns file IDs for canvas_get_file_link, which is useful for chaining. However, it does not disclose pagination, sorting, or whether all files are returned at once.

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 concise sentences with no wasted words. It front-loads the primary purpose and immediately adds a practical usage detail (filtering by name) and a note about return value usage.

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?

Given the tool's simplicity (two parameters, no output schema), the description is largely complete. It covers the action, scope, filtering, and intended downstream usage. A minor gap is the lack of information on pagination or result limits, but this is not critical for a list tool with open world hint.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters (course_id and search_term). The description adds no new semantic detail beyond what the schema provides, earning the baseline score.

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 explicitly states the tool lists files in a course, specifies common file types (slides, PDFs, handouts), and distinguishes it from siblings like canvas_list_modules or canvas_read_file by focusing on file enumeration and retrieval of file IDs for use with canvas_get_file_link.

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 explains when to use the tool (listing course files) and how to filter with search_term, but does not explicitly state when not to use it or mention alternatives among the many sibling tools.

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

canvas_list_groupsList my groupsA
Read-only

List the Canvas groups you belong to (project teams, study groups, sections) with member counts and their course.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the description's role is reduced. It adds the scope detail (user's groups, not all groups) but doesn't mention pagination, sorting, or any behavioral traits beyond the annotations.

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

Conciseness5/5

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

A single, concise sentence that front-loads the key information with zero waste.

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, parameterless, read-only tool with complete annotations, the description is sufficient. No output schema exists but the return values are implied. Could mention if results are filtered by user (already implied by 'you belong to').

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% with zero parameters, so there is nothing to add. Baseline 3 plus 1 for complete clarity.

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 uses a specific verb ('List') and resource ('Canvas groups'), and clarifies the scope ('you belong to') and content ('project teams, study groups, sections') with member counts and course. It clearly distinguishes from siblings which list different entities (courses, assignments, etc.).

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?

Implied usage is clear but no guidance on when not to use it or alternatives. With many siblings, explicit differentiation would help but the scope note partially addresses this.

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

canvas_list_inboxList Canvas inbox messagesA
Read-only

List conversations from the Canvas inbox (messages from instructors, TAs, and classmates) with sender, course, preview, and read state. Use scope='unread' for just unread messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax conversations to return; default 20
scopeNoWhich mailbox to list; default 'inbox'

TDQS

A4/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 clear. The description adds that it returns sender, course, preview, and read state, which is useful but does not disclose pagination behavior or rate limits. Given good annotations, the bar is lower, and the description adds moderate value.

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 wasted words. The first sentence states the core function and output fields; the second provides actionable usage guidance. Every sentence earns its place.

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?

Given only 2 optional parameters, no output schema (so the description doesn't need to document return fields beyond what it states), and strong annotations, this description is complete enough. It covers purpose, output fields, and usage guidance for the key filter. Could mention pagination or limit defaults but not strictly necessary for this simple tool.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters (limit, scope) with descriptions and enums. The description adds marginal meaning by suggesting a common scope value ('unread'), but this is a minor enhancement. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and resource ('Canvas inbox messages'), and clarifies what the messages contain (sender, course, preview, read state). It distinguishes from siblings like canvas_list_announcements or canvas_list_discussions by explicitly naming the 'Canvas inbox' context.

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 provides explicit usage guidance for the scope parameter ('Use scope='unread' for just unread messages'), which helps the agent decide when to filter. However, it doesn't mention when not to use this tool or compare it directly to siblings like canvas_get_conversation for reading individual messages.

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

canvas_list_modulesList modulesA
Read-only

List a course's modules with their items (pages, files, assignments, quizzes, links) in order — the course's content outline.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds value beyond these by specifying that the output includes items in order and represents the content outline. This provides useful behavioral context 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, well-structured sentence that is front-loaded with the core action and resource. Every word adds value, with no redundancy or filler. It is concise yet informative.

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?

Given the absence of an output schema, the description reasonably explains the return value: a list of modules with items, in order, representing the course outline. This is sufficient for an open-world read tool, though it could briefly mention the structure of module objects. Overall, it is complete enough for the tool's complexity.

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 input schema has 100% description coverage for the single parameter 'course_id', which is adequately described as 'Canvas course ID'. The tool description does not add any additional semantics or usage notes for the parameter, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'List', the resource 'a course's modules', and specifies what is included ('their items (pages, files, assignments, quizzes, links) in order'). It also provides a concise summary ('the course's content outline'), which distinguishes it from sibling tools like canvas_list_assignments or canvas_list_courses.

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving the course content outline, but it does not explicitly state when to use this tool versus alternatives (e.g., canvas_get_module_progress for progress, or canvas_list_assignments for assignments). No when-not or exclusion criteria are provided, leaving the agent to infer usage context.

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

canvas_list_pagesList course pagesB
Read-only

List a course's wiki pages. Use search_term to filter by title.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
search_termNoFilter pages by title

TDQS

B3.4/5.0
Behavior3/5

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

Annotations include readOnlyHint=true and destructiveHint=false, which already cover safety. The description adds no behavioral detail beyond that, such as pagination, rate limits, or that it lists all pages by default. Since annotations provide the core safety profile, a score of 3 is appropriate as the description adds minimal extra context.

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 concise with two sentences, front-loaded with the main action and then the filter detail. No wasted words. It earns a high score for brevity, but could be slightly more informative without harming conciseness.

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?

Given the tool's simplicity (list operation with 2 params) and the strong annotations covering safety, the description is adequate. It doesn't explain the return format, but no output schema exists, so the agent might need to infer that. For a simple list tool, this is acceptable but leaves room for improvement.

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%, both parameters have descriptions. The description mentions that search_term filters by title, which adds some semantic value beyond the schema's 'Filter pages by title'. However, it doesn't add new meaning for course_id. Baseline 3 is justified since the schema does the heavy lifting.

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 clearly states the function: list a course's wiki pages. It includes the resource ('wiki pages') and the course scope, which differentiates it from sibling tools like canvas_list_modules or canvas_get_page. However, it doesn't explicitly mention that it returns a list (as opposed to a single page), but the verb 'list' implies that.

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

Usage Guidelines3/5

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

The description implies usage for listing pages and mentions the optional search_term filter, but it does not explicitly state when to use this tool versus canvas_get_page or other list tools. There is no mention of when not to use it or alternatives, but given the clear purpose, the usage context is reasonably implied.

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

canvas_list_peer_reviewsList peer reviews assigned to meA
Read-only

Find peer reviews you've been asked to complete, and their status. Scans the course's peer-review assignments; pass assignment_id to check just one.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
assignment_idNoCheck a single assignment instead of scanning the course

TDQS

A4.2/5.0
Behavior3/5

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

The description explains that the tool scans the course's peer-review assignments and returns status, which aligns with the readOnlyHint=true annotation. It adds behavioral context beyond the schema (e.g., scanning behavior). However, it does not address the openWorldHint annotation, nor does it mention potential performance implications of scanning. The description is adequate but does not fully explore side effects 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 extremely concise, consisting of two well-constructed sentences. The first sentence fronts the purpose and what the user gets (status), and the second sentence explains parameter usage. Every word is necessary; there is no redundancy or 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?

Given a simple list tool with no output schema, the description covers the essential aspects: what it does (find peer reviews), scope (course-wide or single assignment), and status information. It could be slightly more complete by explicitly stating the output format (e.g., list of peer reviews with status fields) but remains nearly complete for the tool's complexity.

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 input schema has 100% coverage with descriptions for both course_id and assignment_id. The description adds value by contextualizing the parameters: it explains that scanning the course is the default behavior and that assignment_id allows focusing on a single assignment. This enhances the schema's bare parameter descriptions by clarifying the operational difference.

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 the tool finds peer reviews assigned to the user and their status, using specific verbs and resources ('Find peer reviews you've been asked to complete, and their status'). It distinguishes between scanning an entire course and checking a single assignment via the assignment_id parameter, which differentiates it from siblings like canvas_list_assignments or canvas_get_assignment.

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 provides clear context on when to use the tool: to find peer reviews you need to complete. It also specifies an alternative usage by passing assignment_id to check just one assignment instead of scanning the course. However, it does not explicitly mention when not to use the tool (e.g., against listing all assignments or checking grades), leaving the exclusion implicit.

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

canvas_list_plannerPlanner feedA
Read-only

Canvas planner feed across all courses — assignments, quizzes, discussions, announcements, and calendar events in date order, each flagged with whether it has new activity and your submission state. Richer than canvas_list_todo.

ParametersJSON Schema
NameRequiredDescriptionDefault
days_backNoHow far back to include; default 0
days_aheadNoHow far forward to look; default 14
new_activity_onlyNoOnly items Canvas flags as having new activity

TDQS

A3.9/5.0
Behavior3/5

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

The description adds context about the items being 'flagged with whether it has new activity and your submission state' and mentions date ordering, which goes beyond the annotations (which already confirm it is read-only, non-destructive, and open-world). No contradictions found.

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 sentence with essential details; it is front-loaded with the core function. The sibling reference adds a touch of extra context without being verbose. One could argue it is slightly dense but still efficient.

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?

Given there is no output schema, the description reasonably covers return contents (item types and flags). With 3 optional parameters and clear annotations, the description is sufficient for a read-only listing tool. No major gaps are evident.

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?

All 3 parameters have descriptions in the schema, so schema coverage is 100%. The description does not add further parameter info, so a baseline score of 3 is appropriate as the schema already does the heavy lifting.

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 ('list') and resource ('Planner feed across all courses') and lists included item types. It distinguishes itself from the sibling 'canvas_list_todo' by stating it is 'Richer', providing clear differentiation.

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

Usage Guidelines4/5

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

The description implies when to use this tool (for a comprehensive planner view including new activity and submission states) and hints at an alternative (the simpler 'canvas_list_todo'), but could be more explicit about 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.

canvas_list_quizzesList quizzesA
Read-only

List a course's quizzes with due dates, time limits, allowed attempts, and points.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID

TDQS

A3.8/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 agent knows it's a safe read operation. The description adds value by specifying the exact fields returned (due dates, time limits, allowed attempts, points), which is not captured by annotations. No contradiction with 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 sentence that is front-loaded with the action (list) and resource (quizzes). Every word is purposeful, with no fluff. It is optimally concise.

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 list tool with one required parameter and no output schema, the description is reasonably complete. It specifies the returned fields. However, it omits details like pagination, ordering, or filtering, which might be expected for a list operation. Still, given the tool's simplicity, it covers the essential information.

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% with one parameter (course_id) already described as 'Canvas course ID'. The description does not add any additional meaning beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'list' and the resource 'quizzes' scoped to a course. It also specifies the fields returned (due dates, time limits, allowed attempts, points), which distinguishes it from sibling tools like canvas_list_assignments or canvas_list_modules.

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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, filtering options, or when not to use it. The agent must infer usage from context alone.

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

canvas_list_todoMy to-do listA
Read-only

The user's Canvas to-do list: assignments and quizzes needing submission, across all courses.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds that the list includes only items needing submission, which is specific context. However, it does not disclose what happens when there are no items, how results are ordered, or any pagination behavior. Given the tool has zero parameters, the description adds modest value beyond 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?

One sentence that immediately identifies the resource ('user's Canvas to-do list') and its scope ('across all courses'). No wasted words.

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

Completeness4/5

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

Given zero parameters, no output schema, and adequate annotations, the description is largely complete. It states what is returned (assignments and quizzes needing submission). It could be improved by clarifying ordering or the criteria for 'needing submission', but it is sufficient for a simple list endpoint.

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 baseline is 4. The description adds no parameter details, but none are needed since the schema already fully covers the lack of inputs.

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

Purpose5/5

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

The description clearly states the tool returns the user's to-do list consisting of assignments and quizzes needing submission across all courses. It distinguishes from siblings like canvas_list_assignments (all assignments) and canvas_list_quizzes (all quizzes) by focusing on items requiring action.

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 provides no guidance on when to use this tool versus alternatives like canvas_list_assignments or canvas_list_upcoming. It does not mention when not to use it or any prerequisites.

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

canvas_list_upcomingUpcoming eventsA
Read-only

The user's upcoming Canvas events and assignment due dates across all courses (next ~2 weeks).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description reinforces these by stating it's a non-destructive read ('upcoming events and assignment due dates'). It adds value beyond annotations by clarifying the temporal scope ('next ~2 weeks') and the fact it spans all courses, which openWorldHint alone does not specify.

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 sentence of 12 words, front-loaded with the key verb and resource. Every word earns its place ('upcoming', 'Canvas events and assignment due dates', 'across all courses', 'next ~2 weeks'). No redundancy or 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?

Given zero parameters, no output schema, and rich annotations, the description is nearly complete. It explains what the tool returns, its scope ('across all courses'), and its time window ('next ~2 weeks'). One could argue for clarifying the return format (e.g., 'returns a list of events with dates'), but the lack of output schema makes this less critical. The essential context is well covered.

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

Parameters4/5

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

Schema description coverage is 100% with zero parameters, so there are no parameters to document. The description adds no parameter info, but the baseline is 4 for zero-param tools. It could briefly hint at the output format or time window, but the high coverage already means the schema is fully handled.

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 uses a specific verb ('upcoming') and resource ('Canvas events and assignment due dates') with clear scope ('across all courses, next ~2 weeks'). It distinguishes this tool from siblings like canvas_list_assignments (which lacks the global upcoming view), canvas_list_todo (which may have a different scope), and canvas_list_calendar_events (which is broader). The scope and resource are precisely defined.

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?

Although no explicit when-not-to-use or alternative is named, the description clearly states the scope ('across all courses' and 'next ~2 weeks'), which implicitly guides the agent: use this for a consolidated upcoming view over a limited horizon; for a single course's assignments or full calendar, use sibling tools. In context of zero-parameter tool, the explicit scope is sufficient without needing more detail.

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

canvas_read_fileRead a course file's textA
Read-only

Download a Canvas file and extract its text — PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx), HTML, and plain-text formats. Use this to read syllabi, lecture slides, and handouts. file_id comes from canvas_list_files or a module item's content_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesCanvas file ID
max_charsNoCap on returned text; default 20000

TDQS

A4.6/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 description's main behavioral value is confirming it's non-destructive reading. The description adds key behavioral context: it can process multiple document formats (PDF, .docx, .pptx, .xlsx, HTML, plain text) and it extracts text from those files. It does not mention file size limits or supported character encodings, but for a file-read tool with good annotation coverage, this is sufficient. No contradiction with 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?

Three sentences, zero wasted words. The first sentence states what the tool does and its supported formats. The second sentence gives concrete use cases. The third sentence tells the agent where to find the required parameter value. Every sentence serves a distinct purpose, and the most actionable information 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?

Given the tool's moderate complexity (2 params, no nested objects, no output schema), the description covers purpose, usage, and parameter source well. It does not explain expected return format (the extracted text and possibly metadata), but since no output schema exists, the agent would benefit from that. However, by listing file formats and extraction behavior, the agent can reasonably infer the output shape. A minor gap given the tool's simplicity.

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

Parameters4/5

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

Schema description coverage is 100%, so both parameters (file_id, max_chars) are already documented in the schema. The description adds value by specifying that file_id comes from specific sources (canvas_list_files or module item's content_id), which clarifies the data dependency. The max_chars parameter is not mentioned in the description, but since the schema already provides a clear description, description coverage is acceptable.

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 uses clear verb-resource pairing: 'Download a Canvas file and extract its text', immediately stating the core purpose. It lists supported formats (PDF, Word, etc.) and concrete use cases (syllabi, lecture slides, handouts), leaving no ambiguity. Among siblings like canvas_get_file_link (which just returns a URL) and canvas_read_syllabus (which reads a specific syllabus), this tool is distinctly positioned as the generic text-extraction tool for any file.

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?

The description explicitly tells the agent when to use this tool ('Use this to read syllabi, lecture slides, and handouts') and tells it where to get the file_id ('file_id comes from canvas_list_files or a module item's content_id'), which is critical since the agent might otherwise not know how to obtain a valid file_id. It does not provide when-not-to-use guidance, but for a read-only extraction tool with clear purpose, the positive guidance suffices.

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

canvas_read_syllabusRead a course syllabus (inline or attached file)A
Read-only

Get a course's syllabus as text. Handles both cases automatically: syllabus typed into Canvas, or posted as an attached PDF/Word file (common) — in which case the file is downloaded and its text extracted.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYesCanvas course ID
max_charsNoCap on returned text; default 30000

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already mark the tool as read-only and non-destructive. The description adds value by revealing that when the syllabus is an attached file (PDF/Word), the tool performs download and text extraction. This behavioral detail is not inferable from annotations alone.

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 sentences with zero wasted words. The first sentence states the primary purpose, and the second efficiently adds nuance about handling two syllabus formats and the extraction process. It is front-loaded and well-structured.

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 lacks details about the return format (e.g., plain text vs. Markdown) and does not mention error cases like missing syllabus. Given the tool's low complexity and the presence of annotations, it is minimally complete but leaves some gaps for an agent.

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 input schema already describes both parameters (course_id and max_chars) adequately. The description adds no extra semantic value about the parameters, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly specifies the action 'Get' and the resource 'course's syllabus as text'. It distinguishes itself from siblings by explicitly stating that it handles both inline syllabus text and attached PDF/Word files, which is a unique capability among the listed tools.

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

Usage Guidelines3/5

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

The description implies usage by covering both common syllabus formats, but it does not explicitly state when to use this tool versus alternatives like canvas_read_file or other content retrieval tools. There are no exclusions or comparative guidance.

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. Dates show when Glama detected each change.

  1. 30 tool updatesv1.3.0
    • First observedcanvas_auth_status
    • First observedcanvas_export_course
    • First observedcanvas_get_assignment
    • First observedcanvas_get_conversation
    • First observedcanvas_get_course
    • First observedcanvas_get_discussion
    • First observedcanvas_get_feedback
    • First observedcanvas_get_file_link
    • First observedcanvas_get_grades
    • First observedcanvas_get_module_progress
    • First observedcanvas_get_page
    • First observedcanvas_get_profile
    • First observedcanvas_grade_breakdown
    • First observedcanvas_list_announcements
    • First observedcanvas_list_assignments
    • First observedcanvas_list_calendar_events
    • First observedcanvas_list_courses
    • First observedcanvas_list_discussions
    • First observedcanvas_list_files
    • First observedcanvas_list_groups
    • First observedcanvas_list_inbox
    • First observedcanvas_list_modules
    • First observedcanvas_list_pages
    • First observedcanvas_list_peer_reviews
    • First observedcanvas_list_planner
    • First observedcanvas_list_quizzes
    • First observedcanvas_list_todo
    • First observedcanvas_list_upcoming
    • First observedcanvas_read_file
    • First observedcanvas_read_syllabus

TDQS

A4/5.0
Disambiguation4/5

Tools are generally distinct in purpose, but there is some overlap between canvas_list_todo, canvas_list_upcoming, canvas_list_planner, and canvas_list_calendar_events. Although their descriptions help differentiate them, an agent might still select the wrong one for scheduling or task queries.

Naming Consistency5/5

All tool names consistently follow the 'canvas_verb_noun' pattern (e.g., canvas_list_courses, canvas_get_assignment, canvas_read_file). The naming is predictable and makes it easy for an agent to infer expected behavior.

Tool Count4/5

With 30 tools, the set covers a wide range of Canvas operations. While the count is on the higher side, each tool serves a specific need for a student, and the count is reasonable given the breadth of the Canvas LMS API surface.

Completeness5/5

The toolset provides comprehensive coverage for a student's typical needs: viewing courses, assignments, grades, modules, files, discussions, quizzes, calendar, inbox, and feedback. It includes both listing and detailed retrieval, and even covers file content reading and course export. There are no obvious gaps for a student-facing use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xmike04/canvas-student-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server