Canvas MCP Server
Enables interaction with Canvas LMS to manage courses, announcements, rubrics, assignments, and student data. Provides tools for listing courses, posting announcements, viewing rubrics, accessing enrollment information, and retrieving assignment details and submissions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Canvas MCP Serverlist assignments for my CS101 course"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Canvas MCP Server
A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with Canvas LMS. This server provides tools for managing courses, announcements, rubrics, assignments, and student data through the Canvas API.
Features
List active courses and their details
Post announcements to courses
View course rubrics
Get student enrollment information
Access assignment details and submissions
View student submission history and comments
Related MCP server: Canvas LMS MCP Server
Prerequisites
Node.js (v16 or higher)
A Canvas API token
Canvas instance URL (defaults to "https://fhict.instructure.com")
Installation
Clone this repository and install dependencies:
git clone <repository-url> cd canvas-mcp npm installBuild the TypeScript project:
npm run buildConfigure your environment variables:
# Create a .env file echo "CANVAS_API_TOKEN=your_token_here" > .env # Optional: Set custom Canvas URL echo "CANVAS_DOMAIN=https://your-canvas-instance.com" >> .env
Claude Desktop Integration
Open Claude Desktop's configuration file:
MacOS:
code ~/Library/Application\ Support/Claude/claude_desktop_config.jsonWindows:
code %AppData%\Claude\claude_desktop_config.jsonAdd the Canvas MCP server configuration:
{ "mcpServers": { "canvas": { "command": "node", "args": [ "/path/to/canvas-mcp/build/index.js" ], "env": { "CANVAS_API_TOKEN": "your_token_here", "CANVAS_DOMAIN": "https://your-canvas-instance.com" } } } }Restart Claude Desktop to apply changes
Available Tools
list-courses
Lists all active courses for the authenticated user
No required parameters
Returns course names, IDs, and term information
post-announcement
Posts an announcement to a specific course
Required parameters:
courseId: string
title: string
message: string
list-rubrics
Lists all rubrics for a specific course
Required parameters:
courseId: string
Returns rubric titles, IDs, and descriptions
list-students
Gets a complete list of students enrolled in a course
Required parameters:
courseId: string
Optional parameters:
includeEmail: boolean (default: false)
Returns student names, IDs, and optional email addresses
list-assignments
Gets all assignments in a course with submission status
Required parameters:
courseId: string
Optional parameters:
studentId: string
includeSubmissionHistory: boolean (default: false)
Returns assignment details and submission status
list-assignment-submissions
Gets all student submissions for a specific assignment
Required parameters:
courseId: string
assignmentId: string
Optional parameters:
includeComments: boolean (default: true)
Returns submission details, grades, and comments
Available Prompts
analyze-rubric-statistics
Analyzes rubric statistics for formative assignments in a course and creates visualizations
Required parameters:
courseName: string (The name of the course to analyze)
Creates two comprehensive visualizations:
Grouped stacked bar chart showing score distribution per criterion across all assignments
Grouped bar chart showing average scores per criterion for all assignments
Provides comparative analysis across assignments and criteria
Includes progression analysis and trend identification
Troubleshooting
Common Issues
Server not appearing in Claude Desktop:
Verify configuration file syntax
Check file paths are absolute
Ensure Canvas API token is valid
Restart Claude Desktop
Connection errors:
Check Canvas API token permissions
Verify Canvas instance is accessible
Review Claude's MCP logs:
# MacOS tail -f ~/Library/Logs/Claude/mcp*.log # Windows type %AppData%\Claude\Logs\mcp*.log
Debug Logging
The server logs errors to stderr. These can be viewed in Claude Desktop's logs or redirected when running manually:
node build/index.js 2> debug.logSecurity Notes
API Token Security:
Never commit your Canvas API token to version control
Use environment variables or secure configuration
Regularly rotate your API tokens
Permissions:
Use tokens with minimum required permissions
Review Canvas API access logs periodically
License
MIT License
Copyright (c) 2024
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Available Tools
10 toolsget-rubric-statisticsC
Get statistics for rubric assessments on an assignment
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| assignmentId | Yes | The ID of the assignment | |
| includePointDistribution | No | Whether to include point distribution for each criterion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't disclose if this is a read-only operation, requires specific permissions, has rate limits, or what the statistics include beyond 'point distribution'. This is inadequate for a tool with potential data access implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded and appropriately sized for a straightforward tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It doesn't explain what statistics are returned, how they're formatted, or any behavioral traits. For a tool that likely aggregates assessment data, more context is needed to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-specific information beyond the schema, which has 100% coverage. It mentions 'statistics' and 'rubric assessments' but doesn't clarify how parameters like 'includePointDistribution' affect the output. Baseline 3 is appropriate 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'statistics for rubric assessments on an assignment', making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'list-rubrics' or 'list-assignment-submissions', which might provide related but different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention prerequisites (e.g., needing course and assignment IDs), exclusions, or compare to siblings like 'list-rubrics' for broader rubric data or 'list-assignment-submissions' for submission details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-assignmentsC
Get a list of all assignments in a course with submission status for students
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| studentId | No | Optional: Get submission status for a specific student | |
| includeSubmissionHistory | No | Whether to include submission history details |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'submission status' which implies read-only behavior, but doesn't address important aspects like pagination, rate limits, authentication requirements, error conditions, or what happens when studentId is omitted. The description is insufficient for a tool with 3 parameters and no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core functionality. It's appropriately sized for a list operation, though it could be slightly more front-loaded with the most critical information about scope and limitations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the return value looks like, how results are structured, whether it's paginated, or what authentication/authorization is required. The description should provide more context given the lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters thoroughly. The description adds marginal value by mentioning 'submission status' which relates to studentId and includeSubmissionHistory parameters, but doesn't provide additional semantic context beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a list') and resource ('assignments in a course') with additional functionality ('with submission status for students'). It distinguishes from siblings like 'list-courses' by focusing on assignments, but doesn't explicitly differentiate from 'list-assignment-submissions' which might overlap in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'list-assignment-submissions' or 'list-section-submissions'. It mentions 'submission status' but doesn't clarify if this is the primary tool for that purpose or when other tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-assignment-submissionsC
Get all student submissions and comments for a specific assignment
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| assignmentId | Yes | The ID of the assignment | |
| includeComments | No | Whether to include submission comments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read operation, it doesn't specify whether this requires specific permissions, how results are paginated, what format submissions are returned in, or whether there are rate limits. For a tool that retrieves potentially sensitive student data, this is a significant gap in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized for a straightforward retrieval tool and gets directly to the point with zero wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that retrieves student submissions (potentially sensitive data) with no annotations and no output schema, the description is insufficient. It doesn't address authentication requirements, data format, pagination, error conditions, or what 'all student submissions' means in practice (e.g., does it include draft submissions?). The context signals indicate this is a non-trivial tool that needs more complete documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all parameters are documented in the input schema. The description mentions 'specific assignment' which aligns with the assignmentId parameter, and 'comments' which aligns with includeComments, but adds no additional semantic context beyond what the schema already provides. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and target resources ('all student submissions and comments for a specific assignment'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list-section-submissions' or 'list-assignments', which could create ambiguity about when to choose this specific tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With sibling tools like 'list-section-submissions' and 'list-assignments' available, there's no indication of when this assignment-specific submission tool is preferred over section-level submission listing or general assignment listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-coursesB
List all courses for the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. While 'List' implies a read operation, it doesn't specify whether this requires specific permissions, how results are returned (e.g., pagination), or any rate limits. The description adds minimal behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized for a simple list tool and front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters and no output schema, the description is minimally adequate but lacks important context. It doesn't explain what information is returned about courses, how results are structured, or any limitations. With no annotations and no output schema, more completeness would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, and the baseline for this scenario is 4 since it doesn't need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('courses') with scope ('for the authenticated user'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from sibling tools like 'list-assignments' or 'list-sections' that also list resources for the authenticated user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'list-assignments' or 'list-sections', nor does it mention prerequisites or exclusions. It simply states what the tool does without contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-rubricsC
List all rubrics for a specific course
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It indicates a read operation ('List') but doesn't disclose pagination, rate limits, authentication needs, error conditions, or return format. For a tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple list operation. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what 'rubrics' are in this context, the return structure, or behavioral aspects like ordering or limits. For a tool in an educational context with siblings, more context is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'courseId' fully documented in the schema. The description adds no additional parameter details beyond implying the tool operates within a course context. This meets the baseline of 3 since the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('rubrics'), specifying the scope as 'all rubrics for a specific course'. It distinguishes from siblings like 'get-rubric-statistics' (which likely provides aggregated data) and 'list-assignments' (different resource). However, it doesn't explicitly contrast with all siblings, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention prerequisites (e.g., needing course access), exclusions (e.g., not for filtered rubrics), or comparisons to siblings like 'list-courses' (which might be a prerequisite). Usage is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-sectionsB
Get a list of all sections in a course
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| includeStudentCount | No | Whether to include the number of students in each section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool retrieves a list but doesn't describe return format (e.g., array of section objects), pagination, error conditions, or authentication needs. 'Get a list' implies read-only, but this isn't explicitly confirmed, leaving gaps for a tool with potential data access implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's front-loaded with the core purpose ('Get a list of all sections in a course'), making it efficient and easy to parse. Every word earns its place by conveying essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with 2 parameters and no output schema, the description is minimally adequate. It covers the what but lacks details on behavior, usage context, and output. Without annotations, it should ideally mention read-only nature or data scope, but the conciseness balances this for a basic operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 (courseId and includeStudentCount). The description adds no additional parameter semantics beyond implying the list is filtered by course. This meets the baseline for high schema coverage, where the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a list') and resource ('all sections in a course'), making the tool's purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'list-courses' or 'list-students', but the resource specificity (sections within a course) provides inherent distinction. No tautology with the name 'list-sections'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention prerequisites (e.g., needing a valid courseId), exclusions, or comparisons to siblings like 'list-section-submissions' or 'list-assignments'. The agent must infer usage from the name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-section-submissionsC
Get all student submissions for a specific assignment filtered by section
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| assignmentId | Yes | The ID of the assignment | |
| sectionId | Yes | The ID of the section | |
| includeComments | No | Whether to include submission comments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves submissions but doesn't cover critical aspects like whether it's read-only, requires permissions, includes pagination, rate limits, or error handling. For a data retrieval tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. It uses clear language and avoids redundancy, making it appropriately sized and structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no annotations, no output schema), the description is incomplete. It lacks details on return values, error cases, authentication needs, and behavioral traits, leaving the agent with insufficient context for reliable invocation. The description should compensate more for the missing structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters (courseId, assignmentId, sectionId, includeComments). The description adds no additional meaning beyond implying filtering by section, which is covered in the schema. Baseline 3 is appropriate as the schema does the heavy lifting without extra value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('all student submissions for a specific assignment filtered by section'), making the purpose evident. It distinguishes from siblings like 'list-assignment-submissions' by specifying section filtering, though it doesn't explicitly contrast them. The purpose is specific but could be more distinctively articulated against alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'list-assignment-submissions' or 'list-students'. It implies usage for section-filtered submissions but lacks explicit when/when-not instructions, prerequisites, or named alternatives, leaving the agent to infer context without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-studentsB
Get a complete list of all students enrolled in a specific course
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| includeEmail | No | Whether to include student email addresses |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it 'Get[s] a complete list,' implying a read-only operation, but doesn't specify if it's paginated, rate-limited, requires authentication, or returns structured data. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get a complete list of all students enrolled in a specific course'). There is no wasted wording, repetition, or unnecessary details, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose but lacks details on behavior, usage context, and output format. Without annotations or output schema, it should do more to compensate, but the simplicity keeps it from being severely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 ('courseId' and 'includeEmail'). The description adds no additional meaning beyond what the schema provides, such as explaining what 'complete list' entails or how email inclusion affects output. Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('list of all students enrolled in a specific course'), making the purpose immediately understandable. It distinguishes from siblings like 'list-courses' or 'list-assignments' by specifying students in a course context. However, it doesn't explicitly differentiate from potential similar tools like 'list-sections' which might also list students, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention prerequisites (e.g., needing course access), exclusions (e.g., not for inactive students), or comparisons to siblings like 'list-sections' which might list students by section instead. The context is implied (course-based), but explicit usage rules are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post-announcementC
Post an announcement to a specific course
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| title | Yes | The title of the announcement | |
| message | Yes | The content of the announcement |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Post' implies a write operation, it doesn't specify required permissions, whether the announcement is immediately published, if there are rate limits, or what happens on success/failure. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized and front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't address behavioral aspects like permissions, side effects, or response format, leaving the agent with incomplete understanding of how to properly use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all three parameters thoroughly. The description doesn't add any additional meaning or context about the parameters beyond what's in the schema, meeting the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Post an announcement') and target resource ('to a specific course'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'post-submission-comment' which also posts content, though to different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. There's no mention of prerequisites, appropriate contexts, or comparisons with sibling tools like 'post-submission-comment' that also create content in the same system.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post-submission-commentC
Post a comment on a student's assignment submission
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | The ID of the course | |
| assignmentId | Yes | The ID of the assignment | |
| studentId | Yes | The ID of the student | |
| comment | Yes | The comment text to post |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Post a comment') but doesn't describe what happens after posting (e.g., visibility to the student, notifications, editability), permissions required, rate limits, or error conditions. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that efficiently conveys the core action without unnecessary words. It's front-loaded and appropriately sized for the tool's complexity, with every word earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's mutation nature, lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like what the tool returns, error handling, or side effects. While the schema covers parameters well, the overall context for safe and effective use is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters clearly documented in the input schema (courseId, assignmentId, studentId, comment). The description adds no additional meaning beyond what the schema provides, such as format examples or contextual usage of IDs. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Post a comment') and target ('on a student's assignment submission'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'post-announcement' or 'list-assignment-submissions', but the specificity of 'comment on a student's assignment submission' is sufficiently distinct in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention prerequisites (e.g., needing to identify the submission first), exclusions, or how it differs from similar tools like 'post-announcement' or other comment-related operations that might exist. Usage is implied but not explicitly stated.
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.
10 tool updates
- First observed
get-rubric-statistics - First observed
list-assignment-submissions - First observed
list-assignments - First observed
list-courses - First observed
list-rubrics - First observed
list-section-submissions - First observed
list-sections - First observed
list-students - First observed
post-announcement - First observed
post-submission-comment
TDQS
Scored across 10 tools
Most tools have distinct purposes targeting different Canvas resources (e.g., courses, assignments, rubrics, students), but there is some overlap between list-assignment-submissions and list-section-submissions, which could cause confusion about when to use each. The descriptions help clarify the distinction, but the similarity in naming and function creates minor ambiguity.
All tool names follow a consistent verb_noun pattern with hyphens (e.g., list-assignments, post-announcement), making them predictable and easy to understand. There are no deviations in naming conventions, ensuring a coherent and readable toolset.
With 10 tools, the server is well-scoped for managing Canvas LMS resources, covering key operations like listing courses, assignments, students, and posting announcements or comments. Each tool serves a clear purpose, and the count is appropriate for the educational domain without being overwhelming or insufficient.
The toolset provides good coverage for core Canvas workflows, including listing resources and posting content, but there are minor gaps such as missing update or delete operations for announcements or submissions, and no tools for creating or managing assignments or rubrics. Agents can work around these gaps, but the surface is not fully complete for all CRUD operations.
Maintenance
Related MCP Connectors
AI-powered corporate learning platform — manage courses, users, and insights via Claude.
The Canva MCP server connects AI assistants (like Claude, ChatGPT, and Cursor) to Canva's API, enabling them to create and manage designs directly within chat conversations. Key capabilities include generating new designs from prompts, autofilling templates, searching and resizing existing designs, importing files from URLs, exporting designs as PDFs or images, and managing folders and comments without switching between tools.
Run UX research from Claude — create card sort studies, list studies, pull headline stats.
Connect your Moodle to AI assistants: courses, content, grading and reports from the chat.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Canvas LMS through 25 comprehensive tools. Supports course management, assignments, grades, messaging, calendar events, and file access through natural language.3,780 npm14MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with the Canvas LMS API to manage courses, assignments, grades, and communications. It supports both remote and local deployments, allowing users to query academic data and submit assignments via natural language.7 npmMIT
- AlicenseBqualityBmaintenanceEnables AI assistants to manage Canvas LMS courses, announcements, rubrics, assignments, modules, pages, and student data via the Canvas API.6077 npm12MIT
- FlicenseNot gradedqualityBmaintenanceConnects Claude to the Canvas LMS REST API, enabling natural language queries about courses, assignments, grades, deadlines, and announcements.1-