canvas-student-mcp
canvas-student-mcp
学校がAPIトークンを無効にしても動作するCanvas LMS MCPサーバー。
Claude(または任意のMCPクライアント)に、Canvasアカウントへのライブな読み取り専用アクセスを提供します:コース、シラバス、提出状況付きの課題、成績、お知らせ、モジュール、ページ、ファイル、ディスカッション、小テスト、ToDo、カレンダー。Notionコネクタと組み合わせて、1つのプロンプトでコース全体をアーカイブできます。
なぜ別のCanvas MCPなのか?
すでにいくつかの優れたCanvas MCPサーバーが存在します — vishalsachdev/canvas-mcp、DMontgomery40/mcp-canvas-lms、mtgibbs/canvas-lms-mcpなど。それらはすべて個人用APIトークンを必要とします。
ここに問題があります:多くの大学では、学生が自分でトークンを生成する機能を無効にしています。アカウント → 設定を開いても、+ 新しいアクセストークンボタンがありません。そのような学校では、トークンベースのサーバーはすべて行き止まりです。
このサーバーはセッションクッキー認証でそれを解決します:ブラウザでCanvasにログインし、セッションクッキーを一度コピーすれば接続完了です。CanvasのWeb UIは同じクッキーで同じ/api/v1 REST APIと通信するため、管理者ポリシーでブロックすることはできません(ブロックするとCanvas自体が壊れます)。
そのために内部で必要なこと(トークンベースのサーバーでは不要):
XSSIガードの除去 — クッキー認証されたCanvasのレスポンスには
while(1);というプレフィックスが付いており、単純なJSONパースが壊れますログインリダイレクトの検出 — 期限切れのセッションは401を返さずにログインページにリダイレクトします。サーバーはリダイレクトと非JSONボディをキャッチし、暗号めいたエラーではなく、更新方法を正確に伝えます
認証付きファイルダウンロード — トークンセッションでは
verifier=パラメータによりファイルURLが自己認証されますが、クッキーセッションではそれがなく、ダウンロード時にセッションクッキーを保持する必要があります(そうしないとCanvasは500を返します)。リダイレクトは手動で追跡され、認証情報がCDNに転送されることはありません期限切れ対応エラー — すべての障害モードで、エラーメッセージ自体に修正方法が説明されます
認証以外で差別化する設計原則:
設計上読み取り専用。 すべてのツールはGETです。サーバーは物理的に課題の提出、ディスカッションの投稿、または何かの変更ができません — 自律エージェントに渡しても安全です。
コンテキスト効率の良いレスポンス。 Canvas APIのペイロードは巨大です。すべてのツールはLLMが実際に必要とするフィールドにトリミングし、HTMLをクリーンなテキストに変換し(リンクURLは保持)、ページネーションを明示的な切り捨て通知付きで制限します。
小さく監査可能。 厳格なTypeScript、3つのランタイム依存関係(MCP SDK、zod、PDFテキスト用
unpdf)。学校のアカウントを任せる前に全体を読むことができます。
学校が許可する場合はトークン認証も引き続きサポートされています — クッキーはフォールバックであり、唯一の方法ではありません。
Related MCP server: canvas-parent-mcp
ツール(29個)
ツール | 機能 |
| 認証情報の確認 / 自分は誰か |
| 現在の成績付きコース(アクティブ / 完了 / すべて) |
| コース詳細 + シラバス全文(テキスト) |
| 期限日順の課題と自分の提出状況;バケットフィルター(近日、期限切れ、…) |
| 完全な説明、ルーブリック、自分の提出 + スコア |
| 全コースの成績概要、または1コースの課題別内訳 |
| アクティブなコース全体、または1コース / 日付範囲のお知らせ |
| 項目付きコースコンテンツの概要 |
| コースWikiページ、全文 |
| コースファイル + 一時ダウンロードURL |
| ディスカッショントピックと完全なスレッド |
| 期限、制限時間、試行回数付き小テスト |
| 自分のToDoリストと今後の期限 |
| 日付範囲内のイベントまたは課題の期限 |
| Canvasの受信トレイスレッドを読む — 既読にせずに |
| 自分の提出に対する採点者のコメントとルーブリック評価 |
| 課題グループ別の成績 + what-if計算機:「Aを取るには最終試験で何点必要?」 |
| 新しいアクティビティフラグと提出状態付きプランナーフィード |
| コースファイルからテキストを抽出 — PDF、Word、PowerPoint、Excel、HTML、プレーンテキスト |
| シラバスをテキストとして取得(Canvasに入力されている場合も、添付PDF/Wordファイルの場合も) |
| 自分のグループメンバーシップ |
| モジュールの完了状態と各項目にまだ必要なもの |
| 自分に割り当てられたピアレビュー |
| コース全体のワンショットMarkdownエクスポート — Notionアーカイブ用 |
| 接続を診断:どの認証情報、どこに保存、まだ有効? |
そのうち3つは特筆に値します。
canvas_read_file はコース教材を読み取り可能なテキストに変換し、「今週のスライドについてクイズを出して」や「遅刻のポリシーは?」を実際に機能させます。PDFはunpdfを通し、Office形式はリポジトリ内で処理 — .docx、.pptx、.xlsxはXMLのZIPコンテナなので、Node組み込みのzlibを使った小さなZIPリーダーで3つすべてを依存関係なしでカバーします。canvas_read_syllabusはそれを拡張し、シラバスがファイルリンクのみの場合に添付ファイルを読み取ります。これは一般的なケースです(テストした3コース中2コース)。canvas_grade_breakdown はCanvasの2つの成績モデル(グループ別加重と合計点)の両方を実装し、計算結果をCanvas自身が報告するスコアと相互検証し、ドロップルールや未公開の課題グループがある場合に予測が信頼できないことを伝えます — 間違った数値を静かに返すことはありません。canvas_get_conversation はauto_mark_as_read=falseを渡すため、エージェントが受信トレイを読んでもメッセージを静かに既読にしません。この動作は実際の未読スレッドで検証されており、単なる想定ではありません。
今後の計画と、書き込みが意図的に範囲外である理由についてはROADMAP.mdを参照してください。
クイックスタート
インストール不要 — npxが必要に応じて取得します:
npx canvas-student-mcpまたはソースから:
git clone https://github.com/xmike04/canvas-student-mcp.git
cd canvas-student-mcp
npm install && npm run build認証情報を取得する
オプションA — APIトークン(学校が許可する場合):Canvas → アカウント → 設定 → 承認済み統合 → + 新しいアクセストークン。
オプションB — セッションクッキー(ロックダウンされた学校向け):
任意のブラウザで学校のCanvasにログインします
DevTools(
Cmd/Ctrl+Shift+I)→ ネットワークタブ → リフレッシュCanvasドメインへの任意のリクエストをクリック → リクエストヘッダー →
cookie:の値をすべてコピーします (またはcanvas_session=...のペアだけでも十分です — その1つのクッキーで十分です)
どちらの認証情報でもCanvasアカウントへの読み取りアクセスが許可されます。パスワードのように扱ってください。
認証情報を保存する(macOS:キーチェーンを使用)
MCPクライアントの設定はプレーンテキストのJSONです。macOSでは認証情報を設定ファイルから完全に除外できます:
security add-generic-password -s canvas-student-mcp -a cookie -w 'canvas_session=PASTE_VALUE_HERE' -UAPIトークンの場合は-a cookieの代わりに-a tokenを使用します。サーバーは最初に環境変数をチェックし、次にキーチェーンをチェックするため、これはオプトインであり、スキップしても何も壊れません。CANVAS_NO_KEYCHAIN=1でルックアップを無効にします。
Claudeに登録する
Claude Code — 認証情報をキーチェーンに保存した場合、設定には秘密情報が一切含まれません:
claude mcp add canvas --scope user \
--env CANVAS_BASE_URL=https://yourschool.instructure.com \
-- npx -y canvas-student-mcpキーチェーンを使わずに認証情報をインラインで渡す場合:
claude mcp add canvas --scope user \
--env 'CANVAS_COOKIE=canvas_session=PASTE_VALUE_HERE' \
--env CANVAS_BASE_URL=https://yourschool.instructure.com \
-- npx -y canvas-student-mcpClaude Desktop(claude_desktop_config.json):
{
"mcpServers": {
"canvas": {
"command": "node",
"args": ["/absolute/path/to/canvas-student-mcp/dist/index.js"],
"env": {
"CANVAS_COOKIE": "canvas_session=PASTE_VALUE_HERE",
"CANVAS_BASE_URL": "https://yourschool.instructure.com"
}
}
}
}トークン認証の場合はCANVAS_COOKIEの代わりにCANVAS_API_TOKENを使用します(両方が設定されている場合はトークンが優先されます)。確認するには:「私のCanvasプロフィールを確認して」。
クッキーが期限切れになった場合(ブラウザセッションが終了した場合)、すべてのツールが明確に通知します — 再度コピーして設定を更新してください。「ログイン状態を保持する」にチェックを入れると、セッションは通常数週間持続します。
エージェントスキル
3つのパッケージ化されたワークフローがskills/に同梱されています。いずれかを~/.claude/skills/(またはプロジェクトの.claude/skills/)にコピーすると、リクエストに合致した場合にClaudeが自動的に使用します:
スキル | 機能 |
| 日次ブリーフィング:期限、新しいお知らせ、未読メッセージ、新しい成績 |
| 実際の課題を読み取り、週の日次計画を立てる |
| 成績状況とwhat-ifの回答、注意事項も含めて |
cp -R skills/canvas-morning-check ~/.claude/skills/接続後に試すこと
「今後2週間で全クラスの課題は?」
「各コースの現在の成績と、欠席している課題は?」
「今週の全コースのお知らせをまとめて。」
「BIOL 1710コースをエクスポートして、Notionの学校フォルダにアーカイブして。」(Notionコネクタを使用)*
「歴史コースの第3週のページを読んで、クイズを出して。」
アーキテクチャノート
stdioトランスポート、ステートレス — クライアントセッションごとに1プロセス、ポートなし、テレメトリなし、ストレージなし。データはCanvas → このプロセス → MCPクライアントに流れ、他には行きません。
自動ページネーションはCanvasの
Link: rel="next"ヘッダーに従い、最大5ページ×100アイテムで明示的な切り捨て通知を表示し、エージェントのコンテキストを制限します。HTML → テキスト変換はシラバス、説明、お知らせ、ページに対して行われます — 構造タグは改行/箇条書きに、リンクは
テキスト (url)になります。すべてのツールにZod入力スキーマがあり、MCPアノテーション(
readOnlyHint)が全体で宣言されています。
開発
npm run build # strict TypeScript compile
npm test # smoke test: MCP handshake, all 30 tools register, error pathsスモークテストは完全にオフラインで実行されます。CIはCanvasアカウントを必要とせず、CANVAS_NO_KEYCHAIN=1を設定することで、実際の保存された認証情報がテスト実行に漏洩するのを防ぎます。
リリース
公開はCI(.github/workflows/release.yml)から実行されるため、誰もラップトップから公開することはありません:
npm version minor && git push --follow-tagsタグをプッシュすると、ビルド、完全なテストスイート、パッケージ内容の検査、およびタグがpackage.jsonと一致するかのガードがトリガーされ、その後出所証明とともに公開されます。これにより、公開されたtarballがそれをビルドしたコミットとワークフローに暗号的にリンクされます。Actionsタブから手動でワークフローを実行すると、公開以外のすべてがドライランとして行われます。
セキュリティモデル
読み取り専用:すべてのCanvas呼び出しはGETです。どのツールもCanvasに書き込むことはできません。受信トレイを読んでもメッセージは未読のままです。
認証情報はMCPクライアントの環境設定またはmacOSキーチェーンに保存されます。このリポジトリのディスク上には決して保存されず、学校のCanvasドメイン以外には送信されません。ファイルダウンロードは手動でリダイレクトを追跡するため、認証情報がCDNに転送されることはありません。
いつでもローテーション可能:Canvasからログアウトする(またはトークンを無効にする)と、認証情報はどこでも無効になります。
canvas_auth_statusは、どの認証情報が使用されているか、どこに保存されているか、そしてそれがまだ機能するかを示します。
ライセンス
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityCmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.59MIT
- AlicenseAqualityAmaintenanceMCP server for Canvas LMS enabling parent observers and students to access courses, assignments, grades, and more. Supports multiple authentication methods including token, OAuth, and a convenient fetchproxy fallback.18662MIT
- Alicense-qualityDmaintenanceMCP server that provides tools to read UBC Canvas LMS data, including courses, assignments, announcements, submissions, and calendar, for use with Claude Desktop, Claude Code, or n8n AI agents.59MIT
- Alicense-qualityDmaintenanceMCP server for Canvas LMS with automatic OAuth authentication. Enables interaction with courses, assignments, grades, modules, discussions, quizzes, files, calendar, messaging, and more without manual API token management.330MIT
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xmike04/canvas-student-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server