name: canvas-mcp-server
version: 1.0.0
description: MCP server for Canvas LMS API integration
# Required Smithery configuration
startCommand:
type: stdio
configSchema:
type: object
required: ["baseUrl", "accessToken"]
properties:
baseUrl:
type: string
description: "Canvas LMS instance URL"
pattern: "^https?://.*"
accessToken:
type: string
description: "Canvas API access token"
minLength: 1
commandFunction: |
function getCommand(config) {
return {
command: "node",
args: ["dist/index.js"],
env: {
NODE_ENV: "production",
CANVAS_BASE_URL: config.baseUrl,
CANVAS_ACCESS_TOKEN: config.accessToken,
MCP_TIMEOUT_MS: "300000"
}
};
}
# Build configuration matching Dockerfile
build:
dockerfile: Dockerfile
dockerBuildPath: .
buildArgs:
NODE_VERSION: "20"
# Server capabilities
capabilities:
tools:
- name: get_user_courses
description: Get courses for a specific user with optional grading count
parameters:
user_id:
type: string
description: Canvas user ID
required: true
include_grading_count:
type: boolean
description: Include needs grading count
default: false
enrollment_state:
type: string
description: Filter by enrollment state (active, invited, etc)
default: active
enum: [active, invited, completed, rejected]
response:
type: object
properties:
content:
type: array
items:
type: object
properties:
type:
type: string
enum: [text]
text:
type: string
prompts:
- name: get-user-courses-help
description: Get help with retrieving user courses
messages:
- role: assistant
content:
type: text
text: |
I can help you get courses for a specific Canvas user. The get_user_courses tool accepts these parameters:
- user_id: (required) The Canvas user ID
- include_grading_count: (optional) Set to true to include needs grading count
- enrollment_state: (optional) Filter by enrollment state (defaults to 'active')
- role: user
content:
type: text
text: How do I get courses with grading count?
- role: assistant
content:
type: text
text: |
Call get_user_courses with:
- user_id: Your Canvas user ID
- include_grading_count: true
Example: get_user_courses with {"user_id": "123", "include_grading_count": true}
# API documentation
api:
endpoints:
- name: getUserCourses
path: /api/v1/users/{userId}/courses
method: GET
description: Get courses for a specific user
parameters:
- name: userId
in: path
required: true
schema:
type: string
- name: include[]
in: query
required: false
schema:
type: array
items:
type: string
enum: [needs_grading_count]
- name: enrollment_state
in: query
required: false
schema:
type: string
enum: [active, invited, completed, rejected]
response:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
course_code:
type: string
workflow_state:
type: string
needs_grading_count:
type: number
nullable: true
enrollment_state:
type: string
nullable: true
# Development configuration
development:
outDir: ./dist
sourceMap: true
typescript:
strict: true
models:
- name: CanvasConfig
properties:
baseUrl:
type: string
accessToken:
type: string
- name: Course
properties:
id:
type: number
name:
type: string
course_code:
type: string
workflow_state:
type: string
needs_grading_count:
type: number
optional: true
enrollment_state:
type: string
optional: true