.cursor — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited .cursor (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A minimal Canvas LMS MCP (Machine Conversation Protocol) server for easy access to education data through your Canvas LMS instance. This server provides a bridge between AI systems (like Cursor) and Canvas Learning Management System.
To install Canvas LMS Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @ahnopologetic/canvas-lms-mcp --client claudeuv package manager (recommended)#### Option 1: Install with uvx (Recommended)
The easiest way to install and run canvas-lms-mcp is using uvx:
uvx canvas-lms-mcpThis will run the server in an isolated environment without installing it permanently.
To install the tool permanently:
uv tool install canvas-lms-mcp#### Option 2: Install from Source
git clone https://github.com/yourusername/canvas-lms-mcp.git
cd canvas-lms-mcp # Install uv if you don't have it yet
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create a virtual environment and install dependencies
uv venv
uv pip install -e .Alternatively, use traditional methods:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e .Set the following environment variables:
export CANVAS_API_TOKEN="your_canvas_api_token"
export CANVAS_BASE_URL="https://your-institution.instructure.com" # Default: https://canvas.instructure.comYou can get your Canvas API token from your Canvas account settings.
Start the server with uv:
uv run src/canvas_lms_mcp/main.pyIf installed with uvx tool:
canvas-lms-mcpBy default, the server runs on http://localhost:8000. You can use the FastMCP interface at http://localhost:8000/docs to interact with the API.
The server provides 22 tools for interacting with Canvas LMS:
#### list_courses List courses that the user is actively enrolled in.
Parameters:
page (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### get_course Get a single course by ID.
Parameters:
course_id (required): Course IDinclude (optional): List of additional data to include#### get_course_syllabus Get a course's syllabus body as HTML.
Parameters:
course_id (required): Course ID#### get_course_modules Get modules for a course.
Parameters:
course_id (required): Course IDinclude (optional): List of additional data to includeper_page (optional, default=100): Number of items per page#### get_module_items Get items for a specific module.
Parameters:
course_id (required): Course IDmodule_id (required): Module ID#### list_assignments List assignments for a course.
Parameters:
course_id (required): Course IDbucket (required): Filter by "past", "overdue", "undated", "ungraded", "unsubmitted", "upcoming", or "future"order_by (required): Order by "due_at", "position", or "name"include (optional): List of additional data to include (e.g., ["submission"] to see grade status)page (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### get_assignment Get a single assignment by ID.
Parameters:
course_id (required): Course IDassignment_id (required): Assignment ID#### list_assignment_groups List assignment groups for a course (shows grade weighting/categories).
Parameters:
course_id (required): Course ID#### get_page Get a single page by its URL slug.
Parameters:
course_id (required): Course IDpage_slug (required): Page URL slug (e.g., "syllabus", "course-handbook")#### list_submissions List the current user's submissions for a course, including grades and feedback.
Parameters:
course_id (required): Course IDinclude (optional): List of additional data (e.g., ["assignment", "submission_comments"])page (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### list_announcements List announcements for one or more courses.
Parameters:
course_ids (required): List of course IDspage (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### list_discussions List discussion topics for a course.
Parameters:
course_id (required): Course IDpage (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### get_discussion_view Get the full view of a discussion topic including all replies.
Parameters:
course_id (required): Course IDdiscussion_id (required): Discussion topic ID#### list_calendar_events List calendar events for courses.
Parameters:
context_codes (required): List of context codes (e.g., ["course_123"])start_date (optional): Start date in ISO 8601 formatend_date (optional): End date in ISO 8601 formatpage (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### list_planner_items List planner items for the authenticated user.
Parameters:
start_date (required): Start date in ISO 8601 formatend_date (required): End date in ISO 8601 formatcontext_codes (optional): List of context codes (e.g., ["course_123"])page (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### get_enrollments Get the current user's enrollments including grades.
#### list_quizzes List quizzes for a course. Note: only works with Classic Quizzes, not New Quizzes (quiz_lti).
Parameters:
course_id (required): Course IDinclude (optional): List of additional data to includepage (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### get_quiz Get a single quiz by ID.
Parameters:
course_id (required): Course IDquiz_id (required): Quiz ID#### list_files List files for a course or folder. Note: may return 403 for student accounts depending on institution permissions.
Parameters:
course_id (optional): Course IDfolder_id (optional): Folder IDinclude (optional): List of additional data to includepage (optional, default=1): Page number (1-indexed)items_per_page (optional, default=10): Number of items per page#### get_file Get a file by ID. Works with known file IDs even when list_files is restricted.
Parameters:
course_id (required): Course IDfile_id (required): File ID#### get_tabs Get available tabs/navigation items for a course.
Parameters:
course_id (required): Course ID#### list_favorites List the current user's favorite courses.
This MCP server works with any client that supports the Model Context Protocol, including Claude Desktop, Claude Code, Cursor, Windsurf, and others.
The MCP configuration is the same across all clients — only the config file location differs:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your_canvas_api_token",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}Replace your_canvas_api_token with your Canvas API token (found in Canvas → Account → Settings → New Access Token) and your-institution.instructure.com with your institution's Canvas URL.
Add to your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonRestart Claude Desktop after saving.
Add to your project's .mcp.json or global ~/.claude/settings.json:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your_canvas_api_token",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}Add to .cursor/mcp.json in your project directory. Restart Cursor after saving.
Add to ~/.codeium/windsurf/mcp_config.json. Restart Windsurf after saving.
Once connected, you can ask your AI assistant about your Canvas data:
For detailed development instructions, please see the DEVELOPMENT.md file.
This project is licensed under the MIT License - see the LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.