{"id":31965227,"url":"https://github.com/jamubc/canvas-mcp-tool","last_synced_at":"2025-10-14T17:53:46.274Z","repository":{"id":303874452,"uuid":"1016974068","full_name":"jamubc/canvas-mcp-tool","owner":"jamubc","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-12T05:38:55.000Z","size":286,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-11T12:35:55.754Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamubc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-09T20:28:48.000Z","updated_at":"2025-07-14T17:41:36.000Z","dependencies_parsed_at":"2025-07-10T07:16:42.111Z","dependency_job_id":"8dae4340-dac2-4b93-b6aa-ba1eec30c4ad","html_url":"https://github.com/jamubc/canvas-mcp-tool","commit_stats":null,"previous_names":["jamubc/canvas-mcp-tool"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jamubc/canvas-mcp-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamubc%2Fcanvas-mcp-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamubc%2Fcanvas-mcp-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamubc%2Fcanvas-mcp-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamubc%2Fcanvas-mcp-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamubc","download_url":"https://codeload.github.com/jamubc/canvas-mcp-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamubc%2Fcanvas-mcp-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020058,"owners_count":26086807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-14T17:53:43.395Z","updated_at":"2025-10-14T17:53:46.266Z","avatar_url":"https://github.com/jamubc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"border:1px solid #ccc; padding:1rem; border-radius:8px; margin:1em 0;\"\u003e\n  \u003cdiv style=\"display:flex; justify-content:space-between; align-items:center;\"\u003e\n    \u003ch1\u003ecanvas-mcp-tool\u003c/h1\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Study%20more%2C%20Work%20less-blue?style=for-the-badge\u0026logo=canvas\" alt=\"Study more, work less badge\"/\u003e\n  \u003c/div\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://www.npmjs.com/package/canvas-mcp-tool\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/canvas-mcp-tool\" alt=\"npm version\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com/package/canvas-mcp-tool\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/canvas-mcp-tool\" alt=\"npm downloads\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/jamubc/canvas-mcp-tool\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/jamubc/canvas-mcp-tool\" alt=\"GitHub last commit\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/jamubc/canvas-mcp-tool/issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/jamubc/canvas-mcp-tool\" alt=\"GitHub issues\"/\u003e\u003c/a\u003e\n  \u003c/p\u003e\n  \u003chr style=\"border:none; border-top:1px solid #ccc; margin:1rem 0;\" /\u003e\n  \u003cp\u003eLeverage \u003cimg src=\"https://img.shields.io/badge/natural%20language-commands-blue?style=flat-square\u0026logo=canvas\u0026logoColor=white\" alt=\"natural language badge\" style=\"vertical-align:middle; margin:0 4px;\"/\u003e on \u003cimg src=\"https://img.shields.io/badge/Canvas-LMS-005A9C?style=flat-square\u0026logo=canvas\u0026logoColor=white\" alt=\"Canvas badge\" style=\"vertical-align:middle; margin:0 4px;\"/\u003e to quickly scan through your courses, find assignments and related content \u0026 stay up to date with your academics.\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv style=\"border:1px solid #ccc; padding:1rem; border-radius:8px; margin:1em 0;\"\u003e\n  \u003cstrong\u003e📋 Available Tools\u003c/strong\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003ccode\u003elist_assignments\u003c/code\u003e - List assignments for a course\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003eget_assignment\u003c/code\u003e - Get assignment details\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003elist_courses\u003c/code\u003e - List your enrolled courses\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003eget_course\u003c/code\u003e - Get details about a specific course\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003eget_profile\u003c/code\u003e - Get your user profile\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003elist_users\u003c/code\u003e - List users in a course\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003eget_dashboard_cards\u003c/code\u003e - Get your dashboard cards\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003elist_calendar_events\u003c/code\u003e - List calendar events\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003eget_file_metadata\u003c/code\u003e - Get information about a Canvas file\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003eget_file_content\u003c/code\u003e - Extract text content from Canvas files (DOCX, TXT, and more)\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\n\u003cdiv style=\"border:1px solid #ccc; padding:1rem; border-radius:8px; margin:1em 0;\"\u003e\n  \u003cdiv style=\"text-align:center; margin-bottom:1rem;\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Claude_Code-555?logo=claude\" alt=\"Claude Code\" style=\"width:150px; height:auto;\" /\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003eClaude Desktop\u003c/h3\u003e\n  \u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-mcp-tool\"],\n      \"env\": {\n        \"CANVAS_API_URL\": \"https://your-schools-canvas-url.com\",\n        \"CANVAS_API_TOKEN\": \"your_token_here\",\n        \"CANVAS_API_VERSION\": \"v1\",\n        \"CANVAS_API_TIMEOUT\": \"30000\",\n        \"CANVAS_MAX_RETRIES\": \"3\"\n      }\n    }\n  }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\n  \u003ch3\u003eClaude Code (Recommended)\u003c/h3\u003e\n  \u003cpre\u003e\u003ccode class=\"language-bash\"\u003e# Simple usage (if env vars are already set in your shell):\nclaude mcp add canvas -- npx -y canvas-mcp-tool\n\u003c/code\u003e\u003c/pre\u003e\n\n  \u003cpre\u003e\u003ccode class=\"language-bash\"\u003e# Or inline specify all required and optional variables:\nCANVAS_API_URL=\"https://your-schools-canvas-url.com\" \\\nCANVAS_API_TOKEN=\"your_canvas_api_token_here\" \\\nCANVAS_API_VERSION=\"v1\" \\\nCANVAS_API_TIMEOUT=30000 \\\nCANVAS_MAX_RETRIES=3 \\\nclaude mcp add canvas -- npx -y canvas-mcp-tool\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\n  \u003ch3\u003eGemini CLI\u003c/h3\u003e\n  \u003cp\u003eAdd to your \u003ccode\u003e~/.gemini/settings.json\u003c/code\u003e:\u003c/p\u003e\n  \u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-mcp-tool\"],\n      \"env\": {\n        \"CANVAS_API_URL\": \"https://your-schools-canvas-url.com\",\n        \"CANVAS_API_TOKEN\": \"your_token_here\",\n        \"CANVAS_API_VERSION\": \"v1\",\n        \"CANVAS_API_TIMEOUT\": \"30000\",\n        \"CANVAS_MAX_RETRIES\": \"3\"\n      }\n    }\n  }\n}\n\u003c/code\u003e\u003c/pre\u003e\n  \u003cp\u003eNote: Gemini CLI requires all environment variables to be explicitly defined in the configuration.\u003c/p\u003e\n\u003c/div\u003e\n\n## Configuration\nAfter installation, you'll need to configure your Canvas URL and API token:\n\n## Getting a Canvas API Token\n\u003e **Warning:** Your Canvas API token is sensitive - treat it like a password and never share it or commit it to source control.\n1. Log into your Canvas account\n2. Go to Account → Settings\n3. Scroll to \"Approved Integrations\"\n4. Click \"+ New Access Token\"\n5. Enter a purpose and click \"Generate Token\"\n6. Copy the token and use in it your preferred setup.\n\n### For Claude Desktop\n\nYou can add these to your shell profile (`~/.zshrc`, `~/.bashrc`, etc.) so they're loaded automatically:\n\n```bash\n# ~/.zshrc or ~/.bashrc\nexport CANVAS_API_URL=\"https://your-schools-canvas-url.com\"\nexport CANVAS_API_TOKEN=\"your_canvas_api_token_here\"\nexport CANVAS_API_VERSION=\"v1\"\nexport CANVAS_API_TIMEOUT=30000\nexport CANVAS_MAX_RETRIES=3\n```\n\n\n## Local Setup\n\n1. Clone this repository\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n\n3. Create a `.env` file with your Canvas credentials:\n   ```bash\n   cp .env.example .env\n   ```\n\n4. Edit `.env` and add your Canvas API token:\n   ```\n   CANVAS_API_URL=https://your-schools-canvas-url.com\n   CANVAS_API_TOKEN=your_canvas_api_token_here\n   ```\n   Add optional cache and logging settings (defaults shown):\n   ```\n   CACHE_ENABLED=true          # Enable response caching (set to false to disable)\n   CACHE_TTL=300               # Cache time-to-live in seconds\n   LOG_LEVEL=info              # Logging level: debug, info, warn, error\n   LOGGING_ENABLED=true        # Enable logging (set to false to disable)\n   ```\n\n## Build\n\n```bash\nnpm run build\n```\n\n\n\u003cdiv style=\"text-align:center; margin:2rem 0;\"\u003e\n  \u003chr style=\"border:none; height:2px; background:#007bff; margin:0 auto; width:50%;\"/\u003e\n  \u003ca href=\"LICENSE\" style=\"text-decoration:none;\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0%20%2B%20Commons--Clause-blue\" style=\"vertical-align:middle; margin-right:4px; height:16px;\" alt=\"License\"/\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\" style=\"margin-top:1rem;\"\u003e\n  \u003ca href=\"https://www.anthropic.com/news/model-context-protocol\" target=\"_blank\" rel=\"noopener noreferrer\"\n     style=\"font-size:0.75rem; color:#555; background:#f0f0f0; padding:4px 6px; border-radius:4px; text-decoration:none; display:inline-flex; align-items:center;\"\u003e\n    \u003cspan style=\"margin-right:4px; font-size:1rem;\"\u003e🛈\u003c/span\u003e What is an MCP?\n  \u003c/a\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamubc%2Fcanvas-mcp-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamubc%2Fcanvas-mcp-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamubc%2Fcanvas-mcp-tool/lists"}