Skip to main content
Glama

canvas-parent-mcp

CI npm license

MCP server for Canvas LMS (Instructure), scoped for parent observers and student self-access. Targets https://cms.instructure.com by default but works against any Canvas instance.

Mirrors the read-only parent-portal scope of sibling infinitecampus-mcp. Users interact via the canvas_* tool prefix.

Tools

18 tools across profile, observees, courses, assignments, submissions, grades, calendar, planner, announcements, conversations, discussions, and files.

Domain

Tools

Profile

canvas_get_profile

Observees

canvas_list_observees

Courses

canvas_list_courses, canvas_get_course

Assignments

canvas_list_assignments, canvas_list_missing_submissions

Submissions

canvas_get_submission, canvas_list_recent_submissions (default 14d window)

Grades

canvas_list_enrollments

Calendar

canvas_list_calendar_events, canvas_list_upcoming_events

Planner

canvas_list_planner_items

Announcements

canvas_list_announcements

Conversations

canvas_list_conversations, canvas_get_conversation

Discussions

canvas_list_discussion_topics

Files

canvas_list_course_files, canvas_download_file

Tools that the harness will gate as write/IO operations: canvas_download_file.

Related MCP server: canvas-lms

Configuration

Set CANVAS_BASE_URL plus one of four auth modes. canvas-parent-mcp tries them in priority order:

  1. CANVAS_TOKEN → personal access token

  2. CANVAS_CLIENT_ID + CANVAS_CLIENT_SECRET + CANVAS_REFRESH_TOKEN → OAuth

  3. CANVAS_USERNAME + CANVAS_PASSWORD → session-scrape (direct Canvas accounts only)

  4. fetchproxy fallback → no env vars needed; reads canvas_session + pseudonym_credentials cookies from your signed-in Canvas tab via the fetchproxy browser extension

If none succeed, you get an error that names every escape hatch.

CANVAS_BASE_URL=https://cms.instructure.com

Install the fetchproxy 0.3.0 Chrome / Safari extension (Chrome Web Store / Safari .dmg), sign into your Canvas instance once, and the MCP reads your session cookies at startup. After that, all Canvas API calls go directly from Node — the extension is not in the request hot path. Works with any auth flow (SSO/SAML/2FA included) because Canvas itself handled the sign-in.

Multiple districts? Declared domain instructure.com matches every *.instructure.com host, so you only pair the extension once. The MCP uses whichever district you set in CANVAS_BASE_URL.

Set CANVAS_DISABLE_FETCHPROXY=1 to opt out (missing creds become a hard error — useful in headless CI).

Mode B — username/password (legacy session-scrape)

CANVAS_BASE_URL=https://cms.instructure.com
CANVAS_USERNAME=me@example.com
CANVAS_PASSWORD=your-canvas-password
CANVAS_NAME=cms                # optional, defaults to host portion of base URL

Direct Canvas accounts only — won't work with SAML/Google/Microsoft SSO or 2FA. Brittle (breaks on every Canvas login-page restyling). Prefer fetchproxy if your tab is already signed in. Treat .env like a password file.

Advanced alternatives

CANVAS_BASE_URL=https://cms.instructure.com
CANVAS_TOKEN=your-personal-access-token

Generate via Canvas → Account → Settings → "+ New Access Token". Most institutions have disabled this for non-admins.

CANVAS_BASE_URL=https://cms.instructure.com
CANVAS_CLIENT_ID=...
CANVAS_CLIENT_SECRET=...
CANVAS_REFRESH_TOKEN=...

If your account uses SSO and you can't use fetchproxy (e.g. headless server), mint OAuth credentials by reusing the Canvas mobile-app QR-login flow — see Bootstrapping OAuth via the mobile QR code below.

Precedence when multiple are set: CANVAS_TOKEN > username/password > OAuth > fetchproxy.

See .env.example.

Bootstrapping OAuth via the mobile QR code

If your Canvas admin has disabled personal-access-token creation (some institutions restrict tokens to "the mobile app only") AND your account uses SSO so username/password can't auth, you can mint OAuth credentials by going through the same QR-login flow that the official Canvas mobile apps use:

  1. In Canvas web, open Account → QR for Mobile Login — Canvas shows a QR that's valid for 10 minutes.

  2. Decode the QR with any QR reader. The result is a URL on sso.canvaslms.com like https://sso.canvaslms.com/canvas/login?domain=...&code=....

  3. Run the bundled helper:

    npx canvas-parent-mcp-qr-login "<decoded-qr-url>" >> .env

    It hits Canvas's public mobile_verify.json endpoint to fetch the mobile client_id/client_secret, exchanges the QR's one-time code for an access+refresh token pair, and prints CANVAS_BASE_URL / CANVAS_CLIENT_ID / CANVAS_CLIENT_SECRET / CANVAS_REFRESH_TOKEN to stdout. The refresh token is sensitive — treat it like a password.

This reuses the same SSO + OAuth endpoints the official Canvas Student/Parent apps use; from Canvas's perspective the resulting session looks like a mobile-app session. Use it only against accounts you legitimately control.

Status

Unofficial — not affiliated with Instructure. AI-maintained.

Acknowledgement of Terms

By using this MCP server, you acknowledge and agree to the following:

1. This server accesses your own Canvas account via the official Canvas REST API. Auth happens via your own personal access token, issued by your institution. It does not — and cannot — access anyone else's enrollments, grades, or messages.

2. Instructure's Canvas API Policy governs your use of this server, in addition to your institution's own acceptable-use policy. The clauses most relevant here:

You may not use our APIs on behalf of any third-party… You may not use or access our APIs for competitive purposes… You may not interfere with our APIs, our systems, or other users… You may not circumvent any contractual usage limits.

On rate limits: "limits are enforced per user access token… with dynamic throttling." On data: "Any user information retrieved through the API—including course enrollments, grades, and profile information—should be considered and treated as private information."

You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server.

3. Personal, observer/student/parent use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with Instructure, Inc. or any school district. It is a personal automation tool for an authenticated Canvas user (typically a parent observer) to read their own (or their student's) enrollments, assignments, grades, and announcements. Do not use it to bulk-extract a district's course content, redistribute student data, or train AI models on student records.

4. FERPA + your institution's AUP apply. Student educational records are protected under the federal Family Educational Rights and Privacy Act (FERPA). Even though your token grants you lawful access, how you store, redistribute, or feed that data into LLMs is regulated. Treat any output (grades, assignments, comments, conversations) as confidential student data. Your institution's acceptable-use policy may add further restrictions on automated access — check before automating.

5. Your token is yours alone. Do not commit CANVAS_API_TOKEN to git, do not paste it in shared chats, and rotate it if it's ever exposed. A leaked token grants full Canvas access scoped to your user.

6. You accept full responsibility for any consequences of using this server in connection with your Canvas account — rate limiting (dynamic throttling kicks in well below documented limits when Canvas is under load), token revocation, account warnings, institution-admin investigations, or any enforcement action. If Instructure or your institution objects to your use, stop using this server.

This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede Instructure's actual Canvas API Policy or your institution's policies.

Available Tools

19 tools
canvas_download_fileA
Destructive

Download a Canvas file to disk. url is the absolute URL from canvas_list_course_files; destinationPath is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe url field returned by canvas_list_course_files (absolute https URL).
overwriteNo
destinationPathYesAbsolute path where the file should be written.

TDQS

A3.9/5.0
Behavior3/5

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

The destructiveHint annotation already warns of side effects, and the description adds that the URL comes from canvas_list_course_files. However, it does not disclose the overwrite parameter's behavior, whether directories are created, or other filesystem effects. This is partial but not rich behavioral context.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the purpose, and contains no fluff. Each sentence adds essential information: the action and the required input constraints.

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?

While the tool is relatively simple and the source of URL is specified, the description does not address the overwrite parameter's effect, the return value (no output schema), or error conditions. The destructive annotation covers safety, but the agent still lacks details about file overwrite behavior, making the description only partially 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?

The description adds meaning by explaining that 'url' is the absolute URL from canvas_list_course_files, which is helpful. However, it does not explain the 'overwrite' parameter, which has no schema description. With 67% schema coverage, the description partially compensates but leaves a key parameter ambiguous.

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 action ('Download a Canvas file to disk') with a specific verb and resource. It distinguishes this tool from siblings by referencing the source of the URL (canvas_list_course_files), making its purpose 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 provides a clear prerequisite: the 'url' must come from canvas_list_course_files, and 'destinationPath' is required. This guides the agent on how to prepare inputs, though it does not explicitly mention when not to use it or list alternatives. The context is sufficient for correct usage.

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

canvas_get_conversationB
Read-only

Get a full Canvas conversation thread with all messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, and the description's verb 'Get' is consistent. The description adds the scope 'full thread with all messages', but it does not disclose other behavioral traits such as pagination, message ordering, or potential large payloads. It adds minimal 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?

The description is a single, front-loaded sentence with no waste. Every word contributes to understanding the tool's purpose.

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

Completeness2/5

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

For a tool with one parameter and no output schema, the description should at least explain what the id is and what the response contains. It only states the high-level purpose, leaving essential usage details unaddressed. The presence of annotations reduces the burden slightly, but significant gaps remain.

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

Parameters1/5

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

The input schema has one parameter 'id' with no description, and the description also provides no explanation of what the id refers to. With 0% schema description coverage, the description must compensate but fails to clarify even that it is the conversation ID. This leaves the agent guessing.

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 ('Get') and the resource ('full Canvas conversation thread with all messages'), which distinguishes it from sibling 'canvas_list_conversations' that likely returns summaries. The scope 'full' and 'all messages' adds specificity.

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 this tool is for fetching a specific conversation thread in full, but it does not explicitly state when to use it over alternatives like canvas_list_conversations. No exclusions or alternative guidance is provided, though context makes the use case reasonably clear.

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

canvas_get_courseA
Read-only

Get a single Canvas course with its syllabus, teachers, and term.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYes

TDQS

A4.3/5.0
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation. The description adds value by specifying what data is returned (syllabus, teachers, term), which is useful behavioral context. It does not disclose other traits, but for a simple get, this is sufficient.

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 and resource, followed by included content. There is no wasted or redundant text.

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

Completeness5/5

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

For a simple single-parameter get tool with readOnly annotation and no output schema, the description fully covers the purpose, the returned data, and the parameter implicitly. No additional details are necessary.

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 schema has only one parameter, courseId, with no description coverage. The tool name and parameter name make its meaning self-evident, but the description does not explicitly explain the parameter or its format, so it adds no additional semantics beyond what the schema already implies.

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 a single Canvas course, using a specific verb ('Get') and resource, and adds the included content (syllabus, teachers, term). This distinguishes it from sibling tools like canvas_list_courses and other get 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 implicitly conveys when to use this tool (when a specific course is needed) and the 'single course' phrasing differentiates it from list_courses. However, it does not explicitly mention alternatives or when not to use it, lacking exclusions.

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

canvas_get_profileA
Read-only

Get the logged-in user's Canvas profile (id, name, primary_email, login_id, locale, time_zone). Useful first call to confirm credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation. The description adds value by listing the returned fields and noting it serves as a credential confirmation, which is useful behavioral context beyond the annotation.

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 no unnecessary words. The first sentence states the purpose and output fields, while the second provides a clear usage recommendation. Every word earns its place.

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

Completeness5/5

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

For a zero-parameter, read-only tool with no output schema, the description fully covers purpose, return fields, and an explicit use case. There are no gaps in what an agent needs to know to select and invoke this 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?

This tool has zero parameters and the schema coverage is 100%, so the description does not need to explain parameter semantics. The baseline for zero-parameter tools is 4, and the description appropriately focuses on the output rather than 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 uses the specific verb 'Get' and identifies the resource as 'the logged-in user's Canvas profile', then enumerates the exact fields returned. This clearly differentiates it from sibling tools that list or fetch other resources like submissions, courses, or conversations.

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 phrase 'Useful first call to confirm credentials' provides an explicit when-to-use context, suggesting it should be called before other operations to verify authentication. No alternatives are needed since there is no other profile-related tool among siblings.

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

canvas_get_submissionA
Read-only

Get a single submission with rubric assessment and grader comments. userId defaults to 'self'.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNo'self' or a numeric Canvas user ID. Defaults to 'self'.
courseIdYes
assignmentIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds valuable behavioral context about the return contents (rubric assessment, grader comments) and the userId defaulting to 'self', going 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 one concise sentence that front-loads the core action. Every word earns its place, with no redundant detail.

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

Completeness4/5

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

For a simple read-only tool with annotations, the description covers the essential aspects: what it returns and a key default behavior. No output schema exists, but the description sufficiently clarifies the tool's purpose and basic behavior for straightforward usage.

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 only 33%, so the description must compensate for the undocumented courseId and assignmentId. It partially does by explaining the userId default, but the other two parameters remain semantically under-specified. The description adds some value but does not fully cover the gap.

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 ('single submission'), clearly distinguishing it from the sibling list tools. It also specifies what the submission includes (rubric assessment and grader comments), making the purpose unmistakable.

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 this tool is for fetching one specific submission rather than listing multiple submissions, but it does not explicitly mention alternatives or provide when-not-to-use guidance. The context is clear enough but lacks explicit exclusions or alternative tool references.

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

canvas_healthcheckVerify credentials and upstream reachabilityA
Read-onlyIdempotent

Resolves the credential the way real tools do, then makes one authenticated request to canvas. Reports which source supplied the credential, whether canvas accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a canvas-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only; never returns the credential itself.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description adds valuable behavioral details: it makes exactly one authenticated request, reports the credential source and round-trip time, and never returns the credential itself. It also explains the three outcome categories it distinguishes, which is genuinely useful.

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, all informative and none redundant. The core purpose is stated first, followed by output reporting details and a clear call-to-use trigger. The structure is easy to parse.

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 no parameters and no output schema, the description covers what an agent needs: what the tool does, what signals it returns, when to call it, and a critical safety detail (no credential leakage). This is 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 tool has zero parameters, so the description cannot add parameter-level meaning. The baseline of 4 applies because no parameter documentation burden exists; the description appropriately focuses on behavior instead.

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 diagnostic action: resolve the credential, make one authenticated request, and report which hop failed. It distinguishes itself from the sibling data-retrieval tools by framing this as a healthcheck rather than a data operation.

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

Usage Guidelines4/5

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

It explicitly says 'Call this when a real tool fails and you want to know which hop broke,' giving clear usage context. It does not explicitly name when-not-to-use cases or alternative tools, but such exclusions are not necessary given the tool's unique diagnostic role.

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

canvas_list_announcementsB
Read-only

List announcements across one or more courses. contextCodes is required (e.g. ["course_123"]). Defaults to active-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNo
startDateNo
activeOnlyNo
contextCodesYesRequired. Array like ["course_123", "course_456"].

TDQS

B3.4/5.0
Behavior4/5

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

The readOnlyHint annotation already declares safety, and the description adds that contextCodes is required and the default is active-only. No contradictions, but it omits behavior like pagination or return format.

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 one sentence with an inline code example, front-loaded with the verb and resource. No wasted words.

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

Completeness2/5

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

The tool has no output schema and low parameter coverage. The description doesn't explain the date range parameters or the activeOnly flag's semantics, so an agent would be under-informed about how to use them.

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

Parameters2/5

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

Schema coverage is only 25% (contextCodes). The description provides an example format for contextCodes, but startDate, endDate, and activeOnly are not explained beyond the default mention. This is insufficient for those parameters.

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 action ('List announcements') and the scope ('across one or more courses'), effectively identifying the resource. It does not explicitly compare to sibling tools, so it's clear but not fully differentiated.

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

Usage Guidelines3/5

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

It mentions that contextCodes is required and defaults to active-only, giving some usage context. However, it does not state when to prefer this tool over alternatives like calendar events or discussions, nor does it provide exclusions.

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

canvas_list_assignmentsA
Read-only

List a course's assignments (with the user's submission inline). Supports the standard Canvas bucket filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
bucketNoOptional Canvas-side filter.
courseIdYes

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the read-only nature is established. The description adds value by mentioning 'with the user's submission inline' and 'standard Canvas bucket filter', which give some context about the response content and parameter behavior. However, it does not disclose other behavioral traits like pagination, rate limits, or the exact format of inline submissions. Given the annotation coverage, this is acceptable but not exceptional.

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 immediately conveys the core action and key qualifier. The second clause adds the bucket filter without redundancy. Every word contributes, and it is appropriately sized for the tool's simplicity.

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 a readOnlyHint annotation and clear required parameter, the description is largely complete. It captures the purpose, the inclusion of submission inline, and the optional filter. Since there is no output schema, it does not need to detail return values, but the brief mention of 'inline' is a helpful hint. The lack of usage guidance slightly reduces completeness, but overall it provides sufficient context for an agent to understand what the tool does.

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 50%, with only 'bucket' having a schema description. The description reinforces 'bucket' as a standard Canvas filter, adding slight clarification, but provides no additional meaning for 'courseId'. The parameter names are self-explanatory, yet the description does little to compensate for the missing schema description on courseId or to explain how the bucket filter interacts with the results. This is a middle-ground 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 clearly states the tool 'List a course's assignments' with the specific qualifier '(with the user's submission inline)', which distinguishes it from sibling tools like canvas_list_missing_submissions. The verb 'List' and resource 'assignments' are precise, and the optional bucket filter is mentioned, making the purpose unambiguous.

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 explicit guidance on when to use this tool versus alternatives like canvas_list_missing_submissions or canvas_list_recent_submissions. It only mentions the bucket filter feature, but does not state context such as 'use when you need assignment details with the user's submission' or exclude other scenarios. This leaves the agent without clear selection criteria.

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

canvas_list_calendar_eventsC
Read-only

List Canvas calendar events or assignments across selected contexts (courses/users).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
endDateNo
allEventsNo
startDateNoYYYY-MM-DD or ISO 8601.
contextCodesNoArray like ["course_123", "user_456"].

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already state readOnlyHint=true, so the tool is a safe read operation. The description adds that results are scoped to selected contexts, but does not disclose return format, pagination, or how the 'type' parameter filters events vs assignments. 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.

Conciseness4/5

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

The description is a single, concise sentence that front-loads the main verb and resource. It is not bloated, but it is somewhat minimal and does not make full use of the available space to add useful context.

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

Completeness2/5

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

With five optional parameters, no output schema, and only a terse one-sentence description, the tool is under-documented. The description gives a high-level purpose but lacks necessary context about parameter combinations, default behavior, return value structure, and edge cases.

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

Parameters2/5

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

Schema description coverage is only 40%, with only startDate and contextCodes having descriptions. The tool description does not explain the 'type', 'endDate', or 'allEvents' parameters, and only loosely hints at contextCodes via 'selected contexts'. It fails to compensate for the schema gaps.

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 lists Canvas calendar events or assignments for selected contexts. It distinguishes the resource as calendar-related, though it does not explicitly contrast with sibling tools like canvas_list_assignments or canvas_list_upcoming_events.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. The phrase 'across selected contexts' implies the use of contextCodes, but there are no explicit exclusions, prerequisites, or alternative recommendations.

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

canvas_list_conversationsB
Read-only

List Canvas inbox conversations. Optional scope (unread/starred/archived/sent) and filter (array of context codes).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNo
filterNoArray of context codes (course_X, group_X, user_X).

TDQS

B3.1/5.0
Behavior3/5

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

Annotations include readOnlyHint=true, so the safety profile is covered. The description adds that scope/filter are optional but does not disclose other behavioral details like pagination, ordering, or return format. With the annotation carrying the main safety burden, this is acceptable but not rich.

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 states the primary action and summarizes the parameters efficiently.

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

Completeness3/5

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

With two optional parameters, a read-only annotation, and no output schema, the description gives a brief overview but omits details like pagination, default scope, or what a returned conversation object looks like. It is minimally viable but lacks full context.

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

Parameters2/5

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

The description essentially restates the schema: scope enum values are already in the schema, and filter's description already provides the format. Schema description coverage is 50%, but the description adds little meaning beyond what the schema already gives, so it fails to compensate.

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 lists Canvas inbox conversations with a specific verb+resource. It distinguishes from canvas_get_conversation by the list vs get aspect, though it does not explicitly name the sibling alternative.

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 mentions optional scope and filter parameters but provides no guidance on when to use this tool versus alternatives such as canvas_get_conversation or other list tools. There is no explicit context for when this tool is the right choice.

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

canvas_list_course_filesA
Read-only

List a course's files (metadata only — use canvas_download_file with the url field).

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYes
searchTermNo
contentTypesNo

TDQS

A4.2/5.0
Behavior4/5

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

The annotation readOnlyHint=true already signals a safe read operation. The description adds the key behavioral constraint that only metadata is returned and directs the agent to the url field for downloading, giving context beyond the annotation without contradicting it.

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 a parenthetical that adds crucial differentiation. Every word earns its place; no fluff or redundancy.

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 covers the core purpose and points to an alternative, but with 3 parameters, 0% schema coverage, and no output schema, it lacks explanation of filter semantics and return structure. It is minimally viable but leaves gaps for an agent trying to use the tool effectively.

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

Parameters2/5

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

The schema has 0% description coverage, so the description must compensate for parameter meanings. It does not explain courseId, searchTerm, or contentTypes at all; the only param mention is the `url` field in the context of the sibling download tool, not this tool's parameters. The property names are somewhat self-explanatory, but the agent gets no enrichment from the description.

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 a course's files, specifies 'metadata only' to distinguish from file downloads, and directly names the sibling canvas_download_file for content retrieval. This makes the purpose specific and distinct from related tools.

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

Usage Guidelines5/5

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

The description explicitly indicates when to use this tool (to list metadata) and when to use an alternative ('use canvas_download_file with the `url` field'), providing clear usage guidance and a named alternative.

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

canvas_list_coursesA
Read-only

List active Canvas courses (with course-level grades, total scores, current grading period scores, and term).

ParametersJSON Schema
NameRequiredDescriptionDefault
observeeIdNoObserved student's user ID; omit for self.

TDQS

A3.8/5.0
Behavior3/5

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

The readOnlyHint annotation already signals a safe read operation, and the description adds value by specifying exactly what data is returned. However, it does not disclose other behavioral aspects such as pagination, ordering, or any filters beyond the observeeId parameter.

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 packs in the resource, filter (active), and returned fields. Every word 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?

For a simple list tool with one optional parameter and readOnly annotations, the description adequately covers the purpose and return scope. It is missing potential details like ordering or pagination, but these are not critical for basic usage.

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 single parameter observeeId is fully described in the schema with 'Observed student's user ID; omit for self.' The tool description adds no additional parameter context, but because schema coverage is 100%, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and identifies the resource ('active Canvas courses') along with the included data (grades, total scores, grading period scores, term). This clearly differentiates it from siblings like canvas_get_course and canvas_list_enrollments.

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 retrieving active courses with grade information, but it does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool names are mentioned.

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

canvas_list_discussion_topicsC
Read-only

List discussion topics for a course (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
orderByNo
courseIdYes
onlyAnnouncementsNo

TDQS

C2.4/5.0
Behavior2/5

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

The description repeats the 'read-only' annotation without adding additional behavioral context. It does not mention pagination, default ordering, or the behavior of the 'onlyAnnouncements' filter, which would be valuable beyond the annotation.

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

Conciseness3/5

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

The description is a single sentence, which is concise, but it contains redundant information ('read-only') that is already in the annotations, and it omits useful parameter details. It is not overly verbose, but it is under-specified.

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

Completeness2/5

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

For a list tool with three parameters and no output schema, this description is incomplete. It leaves the agent without information about the enum values for orderBy, the semantics of onlyAnnouncements, or the structure of the response, making it hard to select and invoke the tool correctly in varied contexts.

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

Parameters1/5

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

The schema has 0% description coverage, and the tool description does not explain any of the three parameters (courseId, orderBy, onlyAnnouncements). For example, it does not clarify that orderBy accepts position, recent_activity, or title, or what onlyAnnouncements does.

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

Purpose4/5

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

The description uses a specific verb ('List') and resource ('discussion topics for a course'), making the tool's function clear. However, it does not explicitly distinguish from the sibling tool 'canvas_list_announcements', which may overlap in functionality.

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 its siblings, such as 'canvas_list_announcements'. There is no mention of filtering by announcements or ordering, nor any exclusions.

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

canvas_list_enrollmentsB
Read-only

List active student enrollments with per-course grades (current_score, final_score, current_grade, final_grade, current grading period info).

ParametersJSON Schema
NameRequiredDescriptionDefault
observeeIdNo

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already signals a safe read operation. The description adds that only 'active' enrollments are included, which is useful behavioral context. However, it does not disclose return format, filtering details, or any other behavioral traits beyond what the annotation and field list imply.

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, focused sentence that is front-loaded with the action and resource. It avoids redundancy and includes specific grade fields without unnecessary elaboration.

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 (one optional parameter, no output schema), and the description names the returned grade fields, which helps set expectations. However, it omits the meaning of observeeId and any default behavior when the parameter is absent, leaving a noticeable gap in completeness.

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

Parameters2/5

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

The schema has no description for observeeId, and the tool description does not explain it either. With 0% schema description coverage, the description should compensate and clarify the meaning and behavior of the single parameter, but it fails to do so.

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 active student enrollments with per-course grades, naming specific fields. This distinguishes it from sibling tools like canvas_list_missing_submissions or canvas_list_assignments, which serve different purposes.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The optional observeeId parameter is ambiguous — it is unclear whether omitting it returns enrollments for all students or something else, and no context or prerequisites are mentioned.

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

canvas_list_missing_submissionsA
Read-only

List past-due unsubmitted assignments for the user (or a linked observee). For an observee, courseIds is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdsNoRequired when observeeId is set.
observeeIdNo

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses behavioral specifics beyond the readOnlyHint annotation: it targets past-due unsubmitted assignments, and it can operate on a linked observee. It also surfaces the conditional requirement for courseIds. The readOnlyHint is respected and the description adds meaningful context about the operation's scope.

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 the main purpose front-loaded and the conditional observee requirement placed second. Every word earns its place; there is no filler 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?

For a tool with only two optional parameters and no output schema, the description covers the essential functionality and a key edge case. It does not describe return format or pagination, but these are not critical for a simple listing operation and the readOnlyHint provides safety context.

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

Parameters3/5

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

The description explains the relationship between observeeId and courseIds ('For an observee, courseIds is required'), which adds useful conditional meaning. However, it does not elaborate on what observeeId itself represents beyond 'a linked observee', and schema coverage is only 50%, so the description only partially compensates for the underexplained observeeId parameter.

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 function with a specific verb ('List') and resource ('past-due unsubmitted assignments'), and identifies the primary user context ('for the user (or a linked observee)'). This distinguishes it from siblings like canvas_list_recent_submissions (which lists recent submissions) and canvas_get_submission (which retrieves a single submission).

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 gives clear context for use (finding past-due unsubmitted work) and an explicit prerequisite for observees ('For an observee, courseIds is required'). However, it does not name alternative tools or explicitly state when not to use this tool, leaving some inference to 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_observeesA
Read-only

List students linked to your Canvas observer account. Returns an empty array for plain student tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

The readOnlyHint annotation already indicates a safe read operation. The description adds a useful behavioral nuance—returning an empty array for plain student tokens—which goes beyond the annotation without contradicting it.

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

Conciseness5/5

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

The description is two short sentences with no filler. The first sentence states the exact purpose, and the second adds an important edge case. Well-structured and front-loaded.

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

Completeness4/5

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

For a zero-parameter list tool, the description covers the core purpose and a notable edge case. Since there is no output schema, a slightly richer description of the returned student objects could be helpful, but it is not critical for such a simple tool.

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

Parameters4/5

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

The tool has zero parameters, so per the rubric the baseline is 4. The description correctly focuses on behavior rather than parameter details, which is appropriate here.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clear resource ('students linked to your Canvas observer account'), distinguishing it from sibling list tools like canvas_list_enrollments or canvas_list_courses. It also clarifies the function of the tool name 'observees'.

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

Usage Guidelines4/5

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

Provides clear context that the tool works with observer accounts and usefully mentions the plain student token edge case. However, it does not explicitly name alternatives or state when not to use this tool, 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_list_planner_itemsC
Read-only

List planner items (assignments + announcements + planner notes + calendar events) for the user or a linked observee.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNo
endDateNo
startDateNo
observeeIdNo
contextCodesNo

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already provide readOnlyHint=true, so the safety profile is known. The description adds no additional behavioral context such as pagination, ordering, date range handling, or behavior when no observeeId is provided. The 'user or a linked observee' scope is also visible in the observeeId parameter. No meaningful behavioral information beyond the annotation is disclosed.

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 with the action verb 'List' front-loaded and the resource immediately clarified in parentheses. Every word contributes meaning, with no wasted text or redundant restatement of the tool name.

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

Completeness2/5

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

Despite being a read-only list tool, it has multiple optional filters (date range, filter enum, contextCodes) that could affect results, but no explanation of their semantics or defaults. There is no output schema, so the description should at least hint at return format or behavior, but it does not. The tool aggregates multiple item types, increasing the need for clarity on scope and filtering, which is missing.

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

Parameters1/5

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

The schema has 5 parameters with no descriptions (0% schema coverage), and the description provides no parameter explanations. The only hint is 'for the user or a linked observee' which loosely relates to observeeId, but startDate, endDate, filter, and contextCodes are completely unexplained. The description fails to compensate for the low schema coverage.

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 identifies the resource as 'planner items' and parenthetically lists the constituent types (assignments, announcements, planner notes, calendar events), distinguishing it from sibling tools that target a single type. The scope 'for the user or a linked observee' is also stated. It could be more explicit about how it differs from the individual list tools, but the verb+resource+scope is specific enough for a 4.

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 this tool should be used when a combined view of multiple item types is needed, but it does not explicitly state when to use it over calling list_assignments, list_announcements, or list_calendar_events separately. There are no exclusions or alternative tool names given. The usage context is only implied by the parenthetical, not stated as guidance.

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

canvas_list_recent_submissionsA
Read-only

List recently graded submissions in a course. Defaults to a 14-day window for the calling user.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO 8601 timestamp; defaults to 14 days ago.
courseIdYes
studentIdNo'self' or a numeric Canvas user ID. Defaults to 'self'.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, so safety is covered. The description adds useful behavioral context by specifying the default 14-day window and that it applies to the calling user, which goes beyond the annotation.

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 concise sentences with no redundancy. The main action and default behavior are front-loaded, and 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?

Given the lack of an output schema, the description provides enough for a simple list tool: purpose, default time window, and caller scoping. It omits details like return format or pagination, but these are not critical for this straightforward read operation.

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

Parameters2/5

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

Schema description coverage is 67% (since and studentId are described, courseId is not). The description does not add parameter-specific meaning; the '14-day window' simply restates the 'since' parameter's existing schema description.

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 identifies the exact resource ('recently graded submissions') and scope ('in a course'). It also notes the 14-day default window, which clearly distinguishes it from siblings like canvas_list_missing_submissions.

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 use for recent graded submissions but does not explicitly name alternatives or state when not to use it. Context suggests differentiation from missing-submissions and individual-submission tools, but no explicit guidance is given.

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

canvas_list_upcoming_eventsA
Read-only

List the calling user's upcoming events (Canvas's curated next-7-days view).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

The annotation readOnlyHint=true already establishes that this is a safe read operation. The description adds useful context by specifying that the results are scoped to the calling user and that the view is 'curated' (Canvas's specific next-7-days filter), which goes beyond the annotation.

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 ('List the calling user's upcoming events...') that conveys the action, resource, scope, and a clarifying qualifier. There is no wasted wording or unnecessary detail.

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

Completeness4/5

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

For a zero-parameter read-only tool, the description is sufficiently complete. It states what the tool returns and its scope, and with no output schema, the only ambiguity is the exact event fields returned, which is reasonable to omit for such a simple list tool. A brief mention of the return format could push it higher, but it is not essential.

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

Parameters4/5

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

The tool has zero parameters and 100% schema coverage, leaving nothing for the description to explain. The baseline of 4 is appropriate; the description simply reinforces the tool's purpose without needing to elaborate on inputs.

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

Purpose5/5

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

The description clearly states the tool lists the calling user's upcoming events, with the specific qualifier 'Canvas's curated next-7-days view'. This distinguishes it from sibling tools like canvas_list_calendar_events or canvas_list_planner_items by specifying a particular resource and time window.

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 when to use the tool—when you need the curated next-7-days view of the user's events—but it does not explicitly mention alternatives or provide exclusion criteria. The guidance is implied rather than explicit.

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. 1 tool updatev1.5.0
    • Addedcanvas_healthcheck
  2. 18 tool updatesv1.2.5
    • Addedcanvas_download_file
    • Addedcanvas_get_conversation
    • Addedcanvas_get_course
    • Addedcanvas_get_profile
    • Addedcanvas_get_submission
    • Addedcanvas_list_announcements
    • Addedcanvas_list_assignments
    • Addedcanvas_list_calendar_events
    • Addedcanvas_list_conversations
    • Addedcanvas_list_course_files
    • Addedcanvas_list_courses
    • Addedcanvas_list_discussion_topics
    • Addedcanvas_list_enrollments
    • Addedcanvas_list_missing_submissions
    • Addedcanvas_list_observees
    • Addedcanvas_list_planner_items
    • Addedcanvas_list_recent_submissions
    • Addedcanvas_list_upcoming_events

TDQS

A3.5/5.0
Disambiguation3/5

Most tools target a distinct Canvas resource, but list_calendar_events, list_upcoming_events, and list_planner_items overlap heavily: all can return assignments/events and are hard to distinguish without deep Canvas knowledge. list_courses and list_enrollments also both serve grade data, adding minor ambiguity.

Naming Consistency5/5

All tools follow the canvas_<verb>_<noun> snake_case convention, with list_ for collection reads, get_ for single resources, and download_file/healthcheck as predictable special cases. The pattern is uniform and makes tool purpose guessable.

Tool Count4/5

At 19 tools this is slightly above the ideal 3-15 range, but the count is justified by Canvas's broad resource surface (courses, assignments, submissions, calendar, conversations, files, etc.). It feels slightly heavy rather than bloated.

Completeness5/5

The set covers the full read-only parent/observer workflow: identity, observees, courses, grades, assignments, submissions, announcements, discussions, files, calendar/planner, and conversations. File listing pairs with a downloader, and conversation listing pairs with a thread reader, so there are no dead ends.

Maintenance

ActivityActive
ResponsivenessResponsive

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/chrischall/canvas-parent-mcp'

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