{"id":"1308cd90-24b3-477d-9e14-a658ba47c5b7","entityType":"agent","slug":"clawhub-chrischall-canvas-parent-mcp","name":"Tmp.TZBLh1MWPh","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-canvas-parent-mcp","canonicalPath":"/agent/clawhub-chrischall-canvas-parent-mcp","generatedAt":"2026-10-11T20:59:17.402Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T18:20:34.014Z","emptyReason":null},"description":"This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva... Skill: Tmp.TZBLh1MWPh Owner: chrischall Summary: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva... Tags: latest:1.1.8 Version history: v1.1.8 | 2026-07-07T23:57:16.121Z | auto Version 1.1.8 of canvas-parent-mcp - No file changes were detected in this release. - Documentation and features remain the same as t","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:canvas-parent-mcp","sourceUrl":"https://clawhub.ai/chrischall/canvas-parent-mcp","homepage":"https://clawhub.ai/chrischall/skills/canvas-parent-mcp","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/canvas-parent-mcp","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/canvas-parent-mcp","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:20:34.014Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:20:34.014Z","emptyReason":null},"stars":null,"forks":null,"downloads":1010,"packageName":null,"latestVersion":"1.1.8","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:20:34.008Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T18:20:34.014Z","lastCrawledAt":"2026-10-11T18:20:34.008Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T18:20:34.008Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.8","createdAt":"2026-07-07T23:57:16.121Z","changelog":"Version 1.1.8 of canvas-parent-mcp - No file changes were detected in this release. - Documentation and features remain the same as the previous version.","fileCount":3,"zipByteSize":3422},{"version":"1.1.7","createdAt":"2026-07-05T22:38:20.792Z","changelog":"- Removed the sample file skill-card.md. - No changes to functionality or documentation in SKILL.md.","fileCount":3,"zipByteSize":3611},{"version":"1.1.6","createdAt":"2026-06-13T00:54:39.523Z","changelog":"**Changelog for canvas-parent-mcp 1.1.6** - Updated documentation for clarity, modern auth methods, and tighter focus on observer/parent use case. - Migration to fetchproxy browser extension as recommended, zero-config auth, supporting all SSO and MFA flows. - Removed detailed legacy setup and workflow sections; instructions are now streamlined and concise. - Tool descriptions and options are summarized for improved readability. - Removed redundant files (e.g., skill-card.md) for simplicity.","fileCount":3,"zipByteSize":3501},{"version":"1.1.5","createdAt":"2026-06-04T04:29:30.381Z","changelog":"- Removed the documentation file skill-card.md. - No changes to code or functionality; this update affects only documentation.","fileCount":3,"zipByteSize":4758},{"version":"1.1.4","createdAt":"2026-05-29T21:37:02.218Z","changelog":"canvas-parent-mcp 1.1.4 changelog: - Updated SKILL.md with detailed setup instructions and tool documentation. - Expanded usage examples and workflow guidance for both direct MCP and mcporter setups. - Clarified authentication options, including username/password, token, and OAuth via mobile QR-login. - Listed all supported tools, their options, and usage notes. - Added important cautions regarding file downloads and credential security.","fileCount":3,"zipByteSize":4731}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:canvas-parent-mcp","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T20:59:17.400Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-canvas-parent-mcp/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T18:20:34.014Z","emptyReason":null},"readme":"Skill: Tmp.TZBLh1MWPh\n\nOwner: chrischall\n\nSummary: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva...\n\nTags: latest:1.1.8\n\nVersion history:\n\nv1.1.8 | 2026-07-07T23:57:16.121Z | auto\n\nVersion 1.1.8 of canvas-parent-mcp\n\n- No file changes were detected in this release.\n- Documentation and features remain the same as the previous version.\n\nv1.1.7 | 2026-07-05T22:38:20.792Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to functionality or documentation in SKILL.md.\n\nv1.1.6 | 2026-06-13T00:54:39.523Z | auto\n\n**Changelog for canvas-parent-mcp 1.1.6**\n\n- Updated documentation for clarity, modern auth methods, and tighter focus on observer/parent use case.\n- Migration to fetchproxy browser extension as recommended, zero-config auth, supporting all SSO and MFA flows.\n- Removed detailed legacy setup and workflow sections; instructions are now streamlined and concise.\n- Tool descriptions and options are summarized for improved readability.\n- Removed redundant files (e.g., skill-card.md) for simplicity.\n\nv1.1.5 | 2026-06-04T04:29:30.381Z | auto\n\n- Removed the documentation file skill-card.md.\n- No changes to code or functionality; this update affects only documentation.\n\nv1.1.4 | 2026-05-29T21:37:02.218Z | auto\n\ncanvas-parent-mcp 1.1.4 changelog:\n\n- Updated SKILL.md with detailed setup instructions and tool documentation.\n- Expanded usage examples and workflow guidance for both direct MCP and mcporter setups.\n- Clarified authentication options, including username/password, token, and OAuth via mobile QR-login.\n- Listed all supported tools, their options, and usage notes.\n- Added important cautions regarding file downloads and credential security.\n\nArchive index:\n\nArchive v1.1.8: 3 files, 3422 bytes\n\nFiles: skill-card.md (2225b), SKILL.md (4289b), _meta.json (136b)\n\nFile v1.1.8:SKILL.md\n\n---\nname: canvas-parent-mcp\ndescription: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canvas\", \"what's my grade\", \"Canvas inbox\", \"what's due\", \"missing assignments\", \"Canvas LMS\", \"Instructure\", \"course announcements\", \"syllabus\", or any request about courses, assignments, grades, conversations, announcements, planner items, or files in Canvas.\n---\n\n# canvas-parent-mcp\n\nMCP server for Canvas LMS (Instructure) — read courses, grades, assignments, announcements, planner items, and conversations; download course files. Mirrors the parent/observer scope of the sibling `infinitecampus-mcp`.\n\n- **npm:** [npmjs.com/package/canvas-parent-mcp](https://www.npmjs.com/package/canvas-parent-mcp)\n- **Source:** [github.com/chrischall/canvas-parent-mcp](https://github.com/chrischall/canvas-parent-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}\n```\n\nWith the [fetchproxy extension](https://github.com/chrischall/fetchproxy) installed and a signed-in Canvas tab, that's enough — the MCP reads your session cookies at startup. Add `CANVAS_TOKEN`, `CANVAS_CLIENT_*`/`CANVAS_REFRESH_TOKEN`, or `CANVAS_USERNAME`/`CANVAS_PASSWORD` to the `env` block if you'd rather use one of those modes.\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build\n```\n\n## Authentication\n\n**fetchproxy fallback (recommended, zero-config).** Set only `CANVAS_BASE_URL`. Install the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension, sign into your Canvas instance once. The MCP reads `canvas_session` + `pseudonym_credentials` cookies from your tab at startup; all API calls go directly from Node after that. Works with any auth flow (SSO/SAML/2FA included).\n\n### Alternatives (env-var)\n\n- **Personal access token** — set `CANVAS_TOKEN`. Most institutions have disabled this for non-admins.\n- **OAuth** — set `CANVAS_CLIENT_ID`, `CANVAS_CLIENT_SECRET`, `CANVAS_REFRESH_TOKEN`. Bootstrap via `canvas-parent-mcp-qr-login`.\n- **Username/password (session-scrape)** — set `CANVAS_USERNAME` + `CANVAS_PASSWORD`. Direct Canvas accounts only (no SSO/2FA). Brittle.\n\nPrecedence when multiple are set: `CANVAS_TOKEN` > username/password > OAuth > fetchproxy. Set `CANVAS_DISABLE_FETCHPROXY=1` to opt out of the fallback.\n\n## Tools (prefix `canvas_`)\n\n### Profile & observees\n- `canvas_get_profile` — your Canvas profile\n- `canvas_list_observees` — students linked to your observer account\n\n### Courses\n- `canvas_list_courses` — your active courses with grades\n- `canvas_get_course(courseId)` — course detail with syllabus + teachers\n\n### Assignments & submissions\n- `canvas_list_assignments(courseId)` — assignments in a course\n- `canvas_list_missing_submissions` — past-due unsubmitted work\n- `canvas_get_submission(courseId, assignmentId)` — your submission with comments + rubric\n- `canvas_list_recent_submissions(courseId)` — recently graded submissions (default 14d)\n\n### Grades\n- `canvas_list_enrollments` — per-course grades\n\n### Calendar & planner\n- `canvas_list_calendar_events` — calendar events / assignments\n- `canvas_list_upcoming_events` — server-curated next 7 days\n- `canvas_list_planner_items` — unified to-do feed\n\n### Communication\n- `canvas_list_announcements(contextCodes)` — course announcements\n- `canvas_list_conversations` — inbox\n- `canvas_get_conversation(id)` — full conversation thread\n- `canvas_list_discussion_topics(courseId)` — course discussion topics\n\n### Files\n- `canvas_list_course_files(courseId)` — file metadata\n- `canvas_download_file(url, destinationPath)` — download a file to disk\n\n## Notes\n\n- Set `CANVAS_NAME` if you want a friendly label other than the host portion of the base URL.\n- All read tools that target a user accept an optional `observeeId` parameter (defaults to `self`) — useful when an observer is checking on a linked student.\n\nFile v1.1.8:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"canvas-parent-mcp\",\n  \"version\": \"1.1.8\",\n  \"publishedAt\": 1783468636121\n}\n\nFile v1.1.8:skill-card.md\n\n## Description:\n\nThis skill enables agents to answer Canvas LMS questions by using the canvas-parent-mcp server to read courses, grades, assignments, announcements, planner items, conversations, and files for a user or observed student.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to let an agent retrieve and summarize Canvas LMS information for a student account or a linked observer account, including coursework, grades, announcements, conversations, planner items, and course files.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security review says the skill recommends unpinned third-party MCP code and fetchproxy extension access to sensitive student data.\n\nMitigation: Install only after reviewing and pinning trusted package and extension versions, and prefer scoped OAuth credentials over browser session cookies or passwords.\n\nRisk: Canvas credentials and downloaded files can expose sensitive student information if stored or written carelessly.\n\nMitigation: Avoid storing secrets in project-local MCP configuration and download Canvas files only to an intentional safe location.\n\n## Reference(s):\n\n- [canvas-parent-mcp npm package](https://www.npmjs.com/package/canvas-parent-mcp)\n- [canvas-parent-mcp source](https://github.com/chrischall/canvas-parent-mcp)\n- [fetchproxy extension source](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Files, Guidance]\n\n**Output Format:** [Markdown with JSON configuration snippets and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May download Canvas course files to a user-selected destination path.]\n\n## Skill Version(s):\n\n1.1.8 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.7: 3 files, 3611 bytes\n\nFiles: skill-card.md (2755b), SKILL.md (4289b), _meta.json (136b)\n\nFile v1.1.7:SKILL.md\n\n---\nname: canvas-parent-mcp\ndescription: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canvas\", \"what's my grade\", \"Canvas inbox\", \"what's due\", \"missing assignments\", \"Canvas LMS\", \"Instructure\", \"course announcements\", \"syllabus\", or any request about courses, assignments, grades, conversations, announcements, planner items, or files in Canvas.\n---\n\n# canvas-parent-mcp\n\nMCP server for Canvas LMS (Instructure) — read courses, grades, assignments, announcements, planner items, and conversations; download course files. Mirrors the parent/observer scope of the sibling `infinitecampus-mcp`.\n\n- **npm:** [npmjs.com/package/canvas-parent-mcp](https://www.npmjs.com/package/canvas-parent-mcp)\n- **Source:** [github.com/chrischall/canvas-parent-mcp](https://github.com/chrischall/canvas-parent-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}\n```\n\nWith the [fetchproxy extension](https://github.com/chrischall/fetchproxy) installed and a signed-in Canvas tab, that's enough — the MCP reads your session cookies at startup. Add `CANVAS_TOKEN`, `CANVAS_CLIENT_*`/`CANVAS_REFRESH_TOKEN`, or `CANVAS_USERNAME`/`CANVAS_PASSWORD` to the `env` block if you'd rather use one of those modes.\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build\n```\n\n## Authentication\n\n**fetchproxy fallback (recommended, zero-config).** Set only `CANVAS_BASE_URL`. Install the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension, sign into your Canvas instance once. The MCP reads `canvas_session` + `pseudonym_credentials` cookies from your tab at startup; all API calls go directly from Node after that. Works with any auth flow (SSO/SAML/2FA included).\n\n### Alternatives (env-var)\n\n- **Personal access token** — set `CANVAS_TOKEN`. Most institutions have disabled this for non-admins.\n- **OAuth** — set `CANVAS_CLIENT_ID`, `CANVAS_CLIENT_SECRET`, `CANVAS_REFRESH_TOKEN`. Bootstrap via `canvas-parent-mcp-qr-login`.\n- **Username/password (session-scrape)** — set `CANVAS_USERNAME` + `CANVAS_PASSWORD`. Direct Canvas accounts only (no SSO/2FA). Brittle.\n\nPrecedence when multiple are set: `CANVAS_TOKEN` > username/password > OAuth > fetchproxy. Set `CANVAS_DISABLE_FETCHPROXY=1` to opt out of the fallback.\n\n## Tools (prefix `canvas_`)\n\n### Profile & observees\n- `canvas_get_profile` — your Canvas profile\n- `canvas_list_observees` — students linked to your observer account\n\n### Courses\n- `canvas_list_courses` — your active courses with grades\n- `canvas_get_course(courseId)` — course detail with syllabus + teachers\n\n### Assignments & submissions\n- `canvas_list_assignments(courseId)` — assignments in a course\n- `canvas_list_missing_submissions` — past-due unsubmitted work\n- `canvas_get_submission(courseId, assignmentId)` — your submission with comments + rubric\n- `canvas_list_recent_submissions(courseId)` — recently graded submissions (default 14d)\n\n### Grades\n- `canvas_list_enrollments` — per-course grades\n\n### Calendar & planner\n- `canvas_list_calendar_events` — calendar events / assignments\n- `canvas_list_upcoming_events` — server-curated next 7 days\n- `canvas_list_planner_items` — unified to-do feed\n\n### Communication\n- `canvas_list_announcements(contextCodes)` — course announcements\n- `canvas_list_conversations` — inbox\n- `canvas_get_conversation(id)` — full conversation thread\n- `canvas_list_discussion_topics(courseId)` — course discussion topics\n\n### Files\n- `canvas_list_course_files(courseId)` — file metadata\n- `canvas_download_file(url, destinationPath)` — download a file to disk\n\n## Notes\n\n- Set `CANVAS_NAME` if you want a friendly label other than the host portion of the base URL.\n- All read tools that target a user accept an optional `observeeId` parameter (defaults to `self`) — useful when an observer is checking on a linked student.\n\nFile v1.1.7:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"canvas-parent-mcp\",\n  \"version\": \"1.1.7\",\n  \"publishedAt\": 1783291100792\n}\n\nFile v1.1.7:skill-card.md\n\n## Description: <br>\nProvides Canvas LMS access so agents can read courses, grades, assignments, announcements, planner items, conversations, and files for a user or linked observer account. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[chrischall](https://clawhub.ai/user/chrischall) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to connect an agent to Canvas LMS for checking coursework, grades, due items, messages, announcements, and downloadable course files. It is especially relevant for parent or observer workflows where linked student records may be queried. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can expose sensitive Canvas account data, including linked student records, grades, messages, and downloaded course files. <br>\nMitigation: Install only for trusted users and accounts, use the least-privileged authentication method available, and treat downloaded files and returned records as sensitive educational data. <br>\nRisk: Authentication may rely on Canvas session cookies, username/password credentials, OAuth tokens, or a browser extension. <br>\nMitigation: Prefer institution-supported token or OAuth flows when available, avoid username/password or cookie-based access when possible, and review the external npm package and fetchproxy extension before use. <br>\nRisk: Broad Canvas routing and file download behavior can move sensitive data into the local workspace. <br>\nMitigation: Run the skill only in trusted environments, review requested Canvas actions before execution, and verify download destinations before storing course files. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/canvas-parent-mcp) <br>\n- [canvas-parent-mcp npm package](https://www.npmjs.com/package/canvas-parent-mcp) <br>\n- [fetchproxy extension](https://github.com/chrischall/fetchproxy) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, configuration, shell commands] <br>\n**Output Format:** [Markdown with inline JSON and shell command blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May guide an agent to configure or call Canvas MCP tools that return Canvas account, course, assignment, grade, message, planner, and file data.] <br>\n\n## Skill Version(s): <br>\n1.1.7 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.1.6: 3 files, 3501 bytes\n\nFiles: skill-card.md (2451b), SKILL.md (4289b), _meta.json (136b)\n\nFile v1.1.6:SKILL.md\n\n---\nname: canvas-parent-mcp\ndescription: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canvas\", \"what's my grade\", \"Canvas inbox\", \"what's due\", \"missing assignments\", \"Canvas LMS\", \"Instructure\", \"course announcements\", \"syllabus\", or any request about courses, assignments, grades, conversations, announcements, planner items, or files in Canvas.\n---\n\n# canvas-parent-mcp\n\nMCP server for Canvas LMS (Instructure) — read courses, grades, assignments, announcements, planner items, and conversations; download course files. Mirrors the parent/observer scope of the sibling `infinitecampus-mcp`.\n\n- **npm:** [npmjs.com/package/canvas-parent-mcp](https://www.npmjs.com/package/canvas-parent-mcp)\n- **Source:** [github.com/chrischall/canvas-parent-mcp](https://github.com/chrischall/canvas-parent-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}\n```\n\nWith the [fetchproxy extension](https://github.com/chrischall/fetchproxy) installed and a signed-in Canvas tab, that's enough — the MCP reads your session cookies at startup. Add `CANVAS_TOKEN`, `CANVAS_CLIENT_*`/`CANVAS_REFRESH_TOKEN`, or `CANVAS_USERNAME`/`CANVAS_PASSWORD` to the `env` block if you'd rather use one of those modes.\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build\n```\n\n## Authentication\n\n**fetchproxy fallback (recommended, zero-config).** Set only `CANVAS_BASE_URL`. Install the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension, sign into your Canvas instance once. The MCP reads `canvas_session` + `pseudonym_credentials` cookies from your tab at startup; all API calls go directly from Node after that. Works with any auth flow (SSO/SAML/2FA included).\n\n### Alternatives (env-var)\n\n- **Personal access token** — set `CANVAS_TOKEN`. Most institutions have disabled this for non-admins.\n- **OAuth** — set `CANVAS_CLIENT_ID`, `CANVAS_CLIENT_SECRET`, `CANVAS_REFRESH_TOKEN`. Bootstrap via `canvas-parent-mcp-qr-login`.\n- **Username/password (session-scrape)** — set `CANVAS_USERNAME` + `CANVAS_PASSWORD`. Direct Canvas accounts only (no SSO/2FA). Brittle.\n\nPrecedence when multiple are set: `CANVAS_TOKEN` > username/password > OAuth > fetchproxy. Set `CANVAS_DISABLE_FETCHPROXY=1` to opt out of the fallback.\n\n## Tools (prefix `canvas_`)\n\n### Profile & observees\n- `canvas_get_profile` — your Canvas profile\n- `canvas_list_observees` — students linked to your observer account\n\n### Courses\n- `canvas_list_courses` — your active courses with grades\n- `canvas_get_course(courseId)` — course detail with syllabus + teachers\n\n### Assignments & submissions\n- `canvas_list_assignments(courseId)` — assignments in a course\n- `canvas_list_missing_submissions` — past-due unsubmitted work\n- `canvas_get_submission(courseId, assignmentId)` — your submission with comments + rubric\n- `canvas_list_recent_submissions(courseId)` — recently graded submissions (default 14d)\n\n### Grades\n- `canvas_list_enrollments` — per-course grades\n\n### Calendar & planner\n- `canvas_list_calendar_events` — calendar events / assignments\n- `canvas_list_upcoming_events` — server-curated next 7 days\n- `canvas_list_planner_items` — unified to-do feed\n\n### Communication\n- `canvas_list_announcements(contextCodes)` — course announcements\n- `canvas_list_conversations` — inbox\n- `canvas_get_conversation(id)` — full conversation thread\n- `canvas_list_discussion_topics(courseId)` — course discussion topics\n\n### Files\n- `canvas_list_course_files(courseId)` — file metadata\n- `canvas_download_file(url, destinationPath)` — download a file to disk\n\n## Notes\n\n- Set `CANVAS_NAME` if you want a friendly label other than the host portion of the base URL.\n- All read tools that target a user accept an optional `observeeId` parameter (defaults to `self`) — useful when an observer is checking on a linked student.\n\nFile v1.1.6:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"canvas-parent-mcp\",\n  \"version\": \"1.1.6\",\n  \"publishedAt\": 1781312079523\n}\n\nFile v1.1.6:skill-card.md\n\n## Description: <br>\nProvides an agent-facing MCP server for authorized Canvas LMS users and observers to read courses, grades, assignments, announcements, planner items, conversations, and course files. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[chrischall](https://clawhub.ai/user/chrischall) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nStudents, parents, observers, and agents acting for authorized Canvas users can use this skill to check coursework, grades, announcements, inbox conversations, calendar items, planner items, and linked student data. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can access Canvas account data, including observed-student data, through tokens, OAuth credentials, username/password credentials, or browser-session cookies. <br>\nMitigation: Use it only for Canvas accounts you control or are authorized to observe, prefer the most scoped official authentication option available, and avoid storing passwords or refresh tokens in shared configuration files. <br>\nRisk: The fetchproxy browser-session fallback can reuse signed-in Canvas session cookies. <br>\nMitigation: Disable fetchproxy with CANVAS_DISABLE_FETCHPROXY=1 when browser-session cookie reuse is not intended. <br>\nRisk: The skill can download course files to local disk. <br>\nMitigation: Download files only to a safe directory chosen for this purpose. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/chrischall/canvas-parent-mcp) <br>\n- [Canvas Parent MCP npm package](https://www.npmjs.com/package/canvas-parent-mcp) <br>\n- [Fetchproxy extension](https://github.com/chrischall/fetchproxy) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Files] <br>\n**Output Format:** [Markdown or text responses with JSON configuration and shell command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May download Canvas course files to a user-selected local path.] <br>\n\n## Skill Version(s): <br>\n1.1.6 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.1.5: 3 files, 4758 bytes\n\nFiles: skill-card.md (2336b), SKILL.md (8163b), _meta.json (136b)\n\nFile v1.1.5:SKILL.md\n\n---\nname: canvas\ndescription: This skill should be used when the user asks about Canvas LMS (Instructure) data for themselves or any student they observe. Triggers on phrases like \"check Canvas\", \"what's my grade\", \"Canvas inbox\", \"what's due\", \"missing assignments\", \"Canvas LMS\", \"Instructure\", \"course announcements\", \"syllabus\", or any request about courses, assignments, grades, conversations, announcements, planner items, or files.\n---\n\n# canvas-parent-mcp\n\nMCP server for Canvas LMS (Instructure) — 18 tools covering profile, observees, courses, assignments, submissions, grades, calendar, planner, announcements, conversations, discussions, and files. Read-only except for one file-download tool.\n\n- **Source:** [github.com/chrischall/canvas-parent-mcp](https://github.com/chrischall/canvas-parent-mcp)\n- **npm:** [npmjs.com/package/canvas-parent-mcp](https://www.npmjs.com/package/canvas-parent-mcp)\n\n## Setup\n\nPick one auth mode. **Username/password is recommended** — most schools have disabled personal-access-token creation.\n\n### Option A — Claude Code (direct MCP, no mcporter)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\",\n        \"CANVAS_USERNAME\": \"me@example.com\",\n        \"CANVAS_PASSWORD\": \"your-canvas-password\",\n        \"CANVAS_NAME\": \"CMS\"\n      }\n    }\n  }\n}\n```\n\nThe server logs in lazily on the first request and silently re-mints cookies on 401, so you never have to re-bootstrap. Direct Canvas accounts only — won't work with SAML/Google/Microsoft SSO or 2FA.\n\n#### Advanced alternatives\n\nIf your admin still allows tokens, swap `CANVAS_USERNAME`/`CANVAS_PASSWORD` for `CANVAS_TOKEN`:\n\n```json\n\"env\": {\n  \"CANVAS_BASE_URL\": \"https://cms.instructure.com\",\n  \"CANVAS_TOKEN\": \"your-personal-access-token\"\n}\n```\n\nIf your account uses SSO (so username/password won't work), mint OAuth credentials by reusing the Canvas mobile-app QR-login flow (`canvas-parent-mcp-qr-login`), then:\n\n```json\n\"env\": {\n  \"CANVAS_BASE_URL\": \"https://cms.instructure.com\",\n  \"CANVAS_CLIENT_ID\": \"...\",\n  \"CANVAS_CLIENT_SECRET\": \"...\",\n  \"CANVAS_REFRESH_TOKEN\": \"...\"\n}\n```\n\n### Option B — mcporter\n\n#### 1. Install\n\n```bash\nnpm install -g canvas-parent-mcp\n```\n\nOr from source:\n```bash\ngit clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build\n```\n\n#### 2. Configure credentials\n\n```bash\ncp .env.example .env\n# Edit .env: set CANVAS_BASE_URL plus one of CANVAS_TOKEN, CANVAS_USERNAME+CANVAS_PASSWORD, or the OAuth triple.\n```\n\n#### 3. Register with mcporter\n\n```bash\nmcporter config add canvas \\\n  --command \"canvas-parent-mcp\" \\\n  --env \"CANVAS_BASE_URL=https://cms.instructure.com\" \\\n  --env \"CANVAS_USERNAME=me@example.com\" \\\n  --env \"CANVAS_PASSWORD=your-canvas-password\" \\\n  --env \"CANVAS_NAME=CMS\" \\\n  --config ~/.mcporter/mcporter.json\n```\n\n(Or substitute `CANVAS_TOKEN` / OAuth env vars per the alternatives above.)\n\n#### 4. Verify\n\n```bash\nmcporter list --config ~/.mcporter/mcporter.json\nmcporter call canvas.canvas_get_profile --config ~/.mcporter/mcporter.json\n```\n\n## Calling tools (mcporter)\n\n```bash\nmcporter call canvas.<tool_name> [key=value ...] --config ~/.mcporter/mcporter.json\n```\n\nAlways pass `--config ~/.mcporter/mcporter.json` unless a local `config/mcporter.json` exists.\n\nMost tools accept an optional `observeeId` (defaults to `self`) — set it to a student's user ID when an observer is checking on a linked student. List the candidates with `canvas_list_observees`.\n\n## Tools\n\n### Profile & observees\n| Tool | Notes |\n|------|-------|\n| `canvas_get_profile` | Your Canvas profile (id, name, email, login, locale, timezone). Call this first to confirm credentials work. |\n| `canvas_list_observees` | Students linked to your observer account. Returns `[]` for plain student tokens. |\n\n### Courses\n| Tool | Notes |\n|------|-------|\n| `canvas_list_courses(observeeId?)` | Active courses with course-level grades. Includes total scores + current grading period scores. |\n| `canvas_get_course(courseId)` | Course detail: syllabus, teachers, term. |\n\n### Assignments & submissions\n| Tool | Notes |\n|------|-------|\n| `canvas_list_assignments(courseId, bucket?)` | Assignments for a course. `bucket` can be `upcoming`, `overdue`, `past`, or `undated`. Includes the user's submission inline. |\n| `canvas_list_missing_submissions(observeeId?, courseIds?)` | Past-due unsubmitted assignments. For an observee, `courseIds` is required. |\n| `canvas_get_submission(courseId, assignmentId, userId?)` | A single submission with comments + rubric assessment. `userId` defaults to `self`. |\n| `canvas_list_recent_submissions(courseId, since?)` | Recently graded submissions in a course. Defaults to a 14-day window. |\n\n### Grades\n| Tool | Notes |\n|------|-------|\n| `canvas_list_enrollments(observeeId?)` | Active student enrollments with `grades` (current_score, final_score, current_grade, final_grade, current grading period). |\n\n### Calendar & planner\n| Tool | Notes |\n|------|-------|\n| `canvas_list_calendar_events(contextCodes?, type?, startDate?, endDate?)` | Calendar events / assignments. `contextCodes` is an array like `[\"course_123\", \"user_456\"]`. |\n| `canvas_list_upcoming_events` | Canvas's curated next-7-days view. |\n| `canvas_list_planner_items(observeeId?, startDate?, endDate?, contextCodes?)` | Unified planner: assignments + announcements + planner notes + calendar events. |\n\n### Communication\n| Tool | Notes |\n|------|-------|\n| `canvas_list_announcements(contextCodes, startDate?, endDate?)` | Announcements across one or more courses. `contextCodes` is required (e.g. `[\"course_123\"]`). Defaults to the last 14 days. |\n| `canvas_list_conversations(scope?)` | Inbox conversation list. `scope` ∈ `unread` / `starred` / `archived`. |\n| `canvas_get_conversation(id)` | Full conversation thread with messages. |\n| `canvas_list_discussion_topics(courseId)` | Discussion topic list for a course (read-only). |\n\n### Files\n| Tool | Notes |\n|------|-------|\n| `canvas_list_course_files(courseId, searchTerm?)` | File metadata: id, display_name, size, content-type, **`url`**. |\n| `canvas_download_file(url, destinationPath, overwrite?)` | Writes the file to `destinationPath` on disk. **`destinationPath` is required** — confirm the path with the user before calling. |\n\n## Workflows\n\n**Discovery (first time):**\n1. `canvas_get_profile` → confirm credentials\n2. `canvas_list_observees` → if empty, you're a student; otherwise capture observee IDs\n3. `canvas_list_courses` → capture course IDs\n\n**Is everything OK at school?**\n1. `canvas_list_courses` (capture IDs)\n2. `canvas_list_recent_submissions(courseId)` for each — last 14 days of grading\n3. `canvas_list_missing_submissions` — past-due work\n4. `canvas_list_announcements(contextCodes=[\"course_<id>\"])` — recent announcements\n\n**What got graded this week?**\n- `canvas_list_recent_submissions(courseId, since=\"YYYY-MM-DDTHH:MM:SSZ\")`\n\n**What's due soon?**\n- `canvas_list_planner_items(startDate=..., endDate=...)` — unified planner\n- Or `canvas_list_assignments(courseId, bucket=\"upcoming\")` per course\n\n**Today's calendar:**\n- `canvas_list_upcoming_events`\n\n**Read a syllabus:**\n- `canvas_get_course(courseId)` — `syllabus_body` is included\n\n**Inbox:**\n1. `canvas_list_conversations` — find a thread\n2. `canvas_get_conversation(id)` — read it\n\n**Download a file:**\n1. `canvas_list_course_files(courseId)` → find the file's `url`\n2. Confirm destination path with the user\n3. `canvas_download_file(url, destinationPath=\"/Users/.../file.pdf\")`\n\n## Caution\n\n- `canvas_download_file` writes to disk at `destinationPath` — confirm the path with the user; pass `overwrite:true` to replace.\n- All auth credentials (password, token, refresh token) grant the same access as the user account. Treat them as secrets — never commit `.env`.\n- Endpoints that return paginated results follow Canvas's RFC 5988 `Link` headers automatically up to 50 pages (5,000 items at the default `per_page=100`).\n\nFile v1.1.5:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"canvas-parent-mcp\",\n  \"version\": \"1.1.5\",\n  \"publishedAt\": 1780547370381\n}\n\nFile v1.1.5:skill-card.md\n\n## Description: <br>\nHelps agents retrieve Canvas LMS information for a user or observed student, including courses, assignments, grades, planner items, announcements, conversations, discussions, and files. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[chrischall](https://clawhub.ai/user/chrischall) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nStudents, parents, and education-support agents use this skill to inspect Canvas LMS activity, grades, due work, messages, announcements, and course files through an MCP server configured with the user's Canvas credentials. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires sensitive Canvas credentials or tokens that can grant the same access as the user account. <br>\nMitigation: Install only when the external Canvas MCP package is trusted, use the least-privileged supported authentication option, and keep credentials out of repositories. <br>\nRisk: The file download tool can write Canvas files to disk. <br>\nMitigation: Confirm the destination path before allowing downloads and avoid overwriting files unless explicitly intended. <br>\nRisk: Broad Canvas-related activation may expose school records or observer-linked student data in agent workflows. <br>\nMitigation: Use the skill only for authorized Canvas accounts and verify the requested student or observee context before retrieving data. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/chrischall/canvas-parent-mcp) <br>\n- [Publisher profile](https://clawhub.ai/user/chrischall) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with JSON and shell command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include Canvas MCP tool calls and file download guidance when requested.] <br>\n\n## Skill Version(s): <br>\n1.1.5 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.1.4: 3 files, 4731 bytes\n\nFiles: skill-card.md (2301b), SKILL.md (8163b), _meta.json (136b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: canvas\ndescription: This skill should be used when the user asks about Canvas LMS (Instructure) data for themselves or any student they observe. Triggers on phrases like \"check Canvas\", \"what's my grade\", \"Canvas inbox\", \"what's due\", \"missing assignments\", \"Canvas LMS\", \"Instructure\", \"course announcements\", \"syllabus\", or any request about courses, assignments, grades, conversations, announcements, planner items, or files.\n---\n\n# canvas-parent-mcp\n\nMCP server for Canvas LMS (Instructure) — 18 tools covering profile, observees, courses, assignments, submissions, grades, calendar, planner, announcements, conversations, discussions, and files. Read-only except for one file-download tool.\n\n- **Source:** [github.com/chrischall/canvas-parent-mcp](https://github.com/chrischall/canvas-parent-mcp)\n- **npm:** [npmjs.com/package/canvas-parent-mcp](https://www.npmjs.com/package/canvas-parent-mcp)\n\n## Setup\n\nPick one auth mode. **Username/password is recommended** — most schools have disabled personal-access-token creation.\n\n### Option A — Claude Code (direct MCP, no mcporter)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\",\n        \"CANVAS_USERNAME\": \"me@example.com\",\n        \"CANVAS_PASSWORD\": \"your-canvas-password\",\n        \"CANVAS_NAME\": \"CMS\"\n      }\n    }\n  }\n}\n```\n\nThe server logs in lazily on the first request and silently re-mints cookies on 401, so you never have to re-bootstrap. Direct Canvas accounts only — won't work with SAML/Google/Microsoft SSO or 2FA.\n\n#### Advanced alternatives\n\nIf your admin still allows tokens, swap `CANVAS_USERNAME`/`CANVAS_PASSWORD` for `CANVAS_TOKEN`:\n\n```json\n\"env\": {\n  \"CANVAS_BASE_URL\": \"https://cms.instructure.com\",\n  \"CANVAS_TOKEN\": \"your-personal-access-token\"\n}\n```\n\nIf your account uses SSO (so username/password won't work), mint OAuth credentials by reusing the Canvas mobile-app QR-login flow (`canvas-parent-mcp-qr-login`), then:\n\n```json\n\"env\": {\n  \"CANVAS_BASE_URL\": \"https://cms.instructure.com\",\n  \"CANVAS_CLIENT_ID\": \"...\",\n  \"CANVAS_CLIENT_SECRET\": \"...\",\n  \"CANVAS_REFRESH_TOKEN\": \"...\"\n}\n```\n\n### Option B — mcporter\n\n#### 1. Install\n\n```bash\nnpm install -g canvas-parent-mcp\n```\n\nOr from source:\n```bash\ngit clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build\n```\n\n#### 2. Configure credentials\n\n```bash\ncp .env.example .env\n# Edit .env: set CANVAS_BASE_URL plus one of CANVAS_TOKEN, CANVAS_USERNAME+CANVAS_PASSWORD, or the OAuth triple.\n```\n\n#### 3. Register with mcporter\n\n```bash\nmcporter config add canvas \\\n  --command \"canvas-parent-mcp\" \\\n  --env \"CANVAS_BASE_URL=https://cms.instructure.com\" \\\n  --env \"CANVAS_USERNAME=me@example.com\" \\\n  --env \"CANVAS_PASSWORD=your-canvas-password\" \\\n  --env \"CANVAS_NAME=CMS\" \\\n  --config ~/.mcporter/mcporter.json\n```\n\n(Or substitute `CANVAS_TOKEN` / OAuth env vars per the alternatives above.)\n\n#### 4. Verify\n\n```bash\nmcporter list --config ~/.mcporter/mcporter.json\nmcporter call canvas.canvas_get_profile --config ~/.mcporter/mcporter.json\n```\n\n## Calling tools (mcporter)\n\n```bash\nmcporter call canvas.<tool_name> [key=value ...] --config ~/.mcporter/mcporter.json\n```\n\nAlways pass `--config ~/.mcporter/mcporter.json` unless a local `config/mcporter.json` exists.\n\nMost tools accept an optional `observeeId` (defaults to `self`) — set it to a student's user ID when an observer is checking on a linked student. List the candidates with `canvas_list_observees`.\n\n## Tools\n\n### Profile & observees\n| Tool | Notes |\n|------|-------|\n| `canvas_get_profile` | Your Canvas profile (id, name, email, login, locale, timezone). Call this first to confirm credentials work. |\n| `canvas_list_observees` | Students linked to your observer account. Returns `[]` for plain student tokens. |\n\n### Courses\n| Tool | Notes |\n|------|-------|\n| `canvas_list_courses(observeeId?)` | Active courses with course-level grades. Includes total scores + current grading period scores. |\n| `canvas_get_course(courseId)` | Course detail: syllabus, teachers, term. |\n\n### Assignments & submissions\n| Tool | Notes |\n|------|-------|\n| `canvas_list_assignments(courseId, bucket?)` | Assignments for a course. `bucket` can be `upcoming`, `overdue`, `past`, or `undated`. Includes the user's submission inline. |\n| `canvas_list_missing_submissions(observeeId?, courseIds?)` | Past-due unsubmitted assignments. For an observee, `courseIds` is required. |\n| `canvas_get_submission(courseId, assignmentId, userId?)` | A single submission with comments + rubric assessment. `userId` defaults to `self`. |\n| `canvas_list_recent_submissions(courseId, since?)` | Recently graded submissions in a course. Defaults to a 14-day window. |\n\n### Grades\n| Tool | Notes |\n|------|-------|\n| `canvas_list_enrollments(observeeId?)` | Active student enrollments with `grades` (current_score, final_score, current_grade, final_grade, current grading period). |\n\n### Calendar & planner\n| Tool | Notes |\n|------|-------|\n| `canvas_list_calendar_events(contextCodes?, type?, startDate?, endDate?)` | Calendar events / assignments. `contextCodes` is an array like `[\"course_123\", \"user_456\"]`. |\n| `canvas_list_upcoming_events` | Canvas's curated next-7-days view. |\n| `canvas_list_planner_items(observeeId?, startDate?, endDate?, contextCodes?)` | Unified planner: assignments + announcements + planner notes + calendar events. |\n\n### Communication\n| Tool | Notes |\n|------|-------|\n| `canvas_list_announcements(contextCodes, startDate?, endDate?)` | Announcements across one or more courses. `contextCodes` is required (e.g. `[\"course_123\"]`). Defaults to the last 14 days. |\n| `canvas_list_conversations(scope?)` | Inbox conversation list. `scope` ∈ `unread` / `starred` / `archived`. |\n| `canvas_get_conversation(id)` | Full conversation thread with messages. |\n| `canvas_list_discussion_topics(courseId)` | Discussion topic list for a course (read-only). |\n\n### Files\n| Tool | Notes |\n|------|-------|\n| `canvas_list_course_files(courseId, searchTerm?)` | File metadata: id, display_name, size, content-type, **`url`**. |\n| `canvas_download_file(url, destinationPath, overwrite?)` | Writes the file to `destinationPath` on disk. **`destinationPath` is required** — confirm the path with the user before calling. |\n\n## Workflows\n\n**Discovery (first time):**\n1. `canvas_get_profile` → confirm credentials\n2. `canvas_list_observees` → if empty, you're a student; otherwise capture observee IDs\n3. `canvas_list_courses` → capture course IDs\n\n**Is everything OK at school?**\n1. `canvas_list_courses` (capture IDs)\n2. `canvas_list_recent_submissions(courseId)` for each — last 14 days of grading\n3. `canvas_list_missing_submissions` — past-due work\n4. `canvas_list_announcements(contextCodes=[\"course_<id>\"])` — recent announcements\n\n**What got graded this week?**\n- `canvas_list_recent_submissions(courseId, since=\"YYYY-MM-DDTHH:MM:SSZ\")`\n\n**What's due soon?**\n- `canvas_list_planner_items(startDate=..., endDate=...)` — unified planner\n- Or `canvas_list_assignments(courseId, bucket=\"upcoming\")` per course\n\n**Today's calendar:**\n- `canvas_list_upcoming_events`\n\n**Read a syllabus:**\n- `canvas_get_course(courseId)` — `syllabus_body` is included\n\n**Inbox:**\n1. `canvas_list_conversations` — find a thread\n2. `canvas_get_conversation(id)` — read it\n\n**Download a file:**\n1. `canvas_list_course_files(courseId)` → find the file's `url`\n2. Confirm destination path with the user\n3. `canvas_download_file(url, destinationPath=\"/Users/.../file.pdf\")`\n\n## Caution\n\n- `canvas_download_file` writes to disk at `destinationPath` — confirm the path with the user; pass `overwrite:true` to replace.\n- All auth credentials (password, token, refresh token) grant the same access as the user account. Treat them as secrets — never commit `.env`.\n- Endpoints that return paginated results follow Canvas's RFC 5988 `Link` headers automatically up to 50 pages (5,000 items at the default `per_page=100`).\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"canvas-parent-mcp\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1780090622218\n}\n\nFile v1.1.4:skill-card.md\n\n## Description: <br>\nConnects an agent to Canvas LMS so it can read profile, observee, course, assignment, grade, calendar, announcement, conversation, discussion, and file information, with a separate file-download tool. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[chrischall](https://clawhub.ai/user/chrischall) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to let an agent retrieve Canvas LMS academic records, course activity, inbox messages, planner items, and related files for the authenticated user or observed students. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Canvas passwords, tokens, or refresh tokens can grant access to the same records available to the user account. <br>\nMitigation: Use a dedicated token or OAuth flow when available, keep credentials out of committed files and shared MCP configs, and install only when the agent should access the Canvas account or linked student records. <br>\nRisk: The file-download tool can write Canvas files to a user-supplied destination path. <br>\nMitigation: Confirm the destination path before download and use overwrite only when replacing an existing file is intentional. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/chrischall/canvas-parent-mcp) <br>\n- [canvas-parent-mcp source](https://github.com/chrischall/canvas-parent-mcp) <br>\n- [canvas-parent-mcp npm package](https://www.npmjs.com/package/canvas-parent-mcp) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown with inline JSON and shell command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May return Canvas account and academic data through MCP tool calls; file download requires a destination path.] <br>\n\n## Skill Version(s): <br>\n1.1.4 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: Tmp.TZBLh1MWPh Owner: chrischall Summary: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva... Tags: latest:1.1.8 Version history: v1.1.8 | 2026-07-07T23:57:16.121Z | auto Version 1.1.8 of canvas-parent-mcp - No file changes were detected in this release. - Documentation and features remain the same as t","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: canvas-parent-mcp\ndescription: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canvas\", \"what's my grade\", \"Canvas inbox\", \"what's due\", \"missing assignments\", \"Canvas LMS\", \"Instructure\", \"course announcements\", \"syllabus\", or any request about courses, assignments, grades, conversations, announcements, planner items, or files in Canvas.\n---\n\n# canvas-parent-mcp\n\nMCP server for Canvas LMS (Instructure) — read courses, grades, assignments, announcements, planner items, and conversations; download course files. Mirrors the parent/observer scope of the sibling `infinitecampus-mcp`.\n\n- **npm:** [npmjs.com/package/canvas-parent-mcp](https://www.npmjs.com/package/canvas-parent-mcp)\n- **Source:** [github.com/chrischall/canvas-parent-mcp](https://github.com/chrischall/canvas-parent-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"canvas-parent-mcp\"],\n      \"env\": {\n        \"CANVAS_BASE_URL\": \"https://cms.instructure.com\"\n      }\n    }\n  }\n}\n```\n\nWith the [fetchproxy extension](https://github.com/chrischall/fetchproxy) installed and a signed-in Canvas tab, that's enough — the MCP reads your session cookies at startup. Add `CANVAS_TOKEN`, `CANVAS_CLIENT_*`/`CANVAS_REFRESH_TOKEN`, or `CANVAS_USERNAME`/`CANVAS_PASSWORD` to the `env` block if you'd rather use one of those modes.\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/canvas-parent-mcp\ncd canvas-parent-mcp\nnpm install && npm run build\n```\n\n## Authentication\n\n**fetchproxy fallback (recommended, zero-config).** Set only `CANVAS_BASE_URL`. Install the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension, sign into your Canvas instance once. The MCP reads `canvas_session` + `pseudonym_credentials` cookies from your tab at startup; all API calls go directly from Node after that. Works with any auth flow (SSO/SAML/2FA included).\n\n### Alternatives (env-var)\n\n- **Personal access token** — set `CANVAS_TOKEN`. Most institutions have disabled this for non-admins.\n- **OAuth** — set `CANVAS_CLIENT_ID`, `CANVAS_CLIENT_SECRET`, `CANVAS_REFRESH_TOKEN`. Bootstrap via `canvas-parent-mcp-qr-login`.\n- **Username/password (session-scrape)** — set `CANVAS_USERNAME` + `CANVAS_PASSWORD`. Direct Canvas accounts only (no SSO/2FA). Brittle.\n\nPrecedence when multiple are set: `CANVAS_TOKEN` > username/password > OAuth > fetchproxy. Set `CANVAS_DISABLE_FETCHPROXY=1` to opt out of the fallback.\n\n## Tools (prefix `canvas_`)\n\n### Profile & observees\n- `canvas_get_profile` — your Canvas profile\n- `canvas_list_observees` — students linked to your observer account\n\n### Courses\n- `canvas_list_courses` — your active courses with grades\n- `canvas_get_course(courseId)` — course detail with syllabus + teachers\n\n### Assignments & s"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"canvas-parent-mcp\",\n  \"version\": \"1.1.8\",\n  \"publishedAt\": 1783468636121\n}"},{"path":"skill-card.md","content":"## Description:\n\nThis skill enables agents to answer Canvas LMS questions by using the canvas-parent-mcp server to read courses, grades, assignments, announcements, planner items, conversations, and files for a user or observed student.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to let an agent retrieve and summarize Canvas LMS information for a student account or a linked observer account, including coursework, grades, announcements, conversations, planner items, and course files.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security review says the skill recommends unpinned third-party MCP code and fetchproxy extension access to sensitive student data.\n\nMitigation: Install only after reviewing and pinning trusted package and extension versions, and prefer scoped OAuth credentials over browser session cookies or passwords.\n\nRisk: Canvas credentials and downloaded files can expose sensitive student information if stored or written carelessly.\n\nMitigation: Avoid storing secrets in project-local MCP configuration and download Canvas files only to an intentional safe location.\n\n## Reference(s):\n\n- [canvas-parent-mcp npm package](https://www.npmjs.com/package/canvas-parent-mcp)\n- [canvas-parent-mcp source](https://github.com/chrischall/canvas-parent-mcp)\n- [fetchproxy extension source](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Files, Guidance]\n\n**Output Format:** [Markdown with JSON configuration snippets and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May download Canvas course files to a user-selected destination path.]\n\n## Skill Version(s):\n\n1.1.8 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva... Skill: Tmp.TZBLh1MWPh Owner: chrischall Summary: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like \"check Canva... Tags: latest:1.1.8 Version history: v1.1.8 | 2026-07-07T23:57:16.121Z | auto Version 1.1.8 of canvas-parent-mcp - No file changes were detected in this release. - Documentation and features remain the same as t","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1187,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:20:34.014Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:20:34.014Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:59:17.402Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}