Skip to main content
Glama

canvas-student-mcp

学校がAPIトークンを無効にしても動作するCanvas LMS MCPサーバー。

CI License: MIT Node >= 18 TypeScript

Claude(または任意のMCPクライアント)に、Canvasアカウントへのライブな読み取り専用アクセスを提供します:コース、シラバス、提出状況付きの課題、成績、お知らせ、モジュール、ページ、ファイル、ディスカッション、小テスト、ToDo、カレンダー。Notionコネクタと組み合わせて、1つのプロンプトでコース全体をアーカイブできます。

なぜ別のCanvas MCPなのか?

すでにいくつかの優れたCanvas MCPサーバーが存在します — vishalsachdev/canvas-mcpDMontgomery40/mcp-canvas-lmsmtgibbs/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個)

ツール

機能

canvas_get_profile

認証情報の確認 / 自分は誰か

canvas_list_courses

現在の成績付きコース(アクティブ / 完了 / すべて)

canvas_get_course

コース詳細 + シラバス全文(テキスト)

canvas_list_assignments

期限日順の課題と自分の提出状況;バケットフィルター(近日、期限切れ、…)

canvas_get_assignment

完全な説明、ルーブリック、自分の提出 + スコア

canvas_get_grades

全コースの成績概要、または1コースの課題別内訳

canvas_list_announcements

アクティブなコース全体、または1コース / 日付範囲のお知らせ

canvas_list_modules

項目付きコースコンテンツの概要

canvas_list_pages / canvas_get_page

コースWikiページ、全文

canvas_list_files / canvas_get_file_link

コースファイル + 一時ダウンロードURL

canvas_list_discussions / canvas_get_discussion

ディスカッショントピックと完全なスレッド

canvas_list_quizzes

期限、制限時間、試行回数付き小テスト

canvas_list_todo / canvas_list_upcoming

自分のToDoリストと今後の期限

canvas_list_calendar_events

日付範囲内のイベントまたは課題の期限

canvas_list_inbox / canvas_get_conversation

Canvasの受信トレイスレッドを読む — 既読にせずに

canvas_get_feedback

自分の提出に対する採点者のコメントとルーブリック評価

canvas_grade_breakdown

課題グループ別の成績 + what-if計算機:「Aを取るには最終試験で何点必要?」

canvas_list_planner

新しいアクティビティフラグと提出状態付きプランナーフィード

canvas_read_file

コースファイルからテキストを抽出 — PDF、Word、PowerPoint、Excel、HTML、プレーンテキスト

canvas_read_syllabus

シラバスをテキストとして取得(Canvasに入力されている場合も、添付PDF/Wordファイルの場合も)

canvas_list_groups

自分のグループメンバーシップ

canvas_get_module_progress

モジュールの完了状態と各項目にまだ必要なもの

canvas_list_peer_reviews

自分に割り当てられたピアレビュー

canvas_export_course

コース全体のワンショットMarkdownエクスポート — Notionアーカイブ用

canvas_auth_status

接続を診断:どの認証情報、どこに保存、まだ有効?

そのうち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_conversationauto_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 — セッションクッキー(ロックダウンされた学校向け):

  1. 任意のブラウザで学校のCanvasにログインします

  2. DevTools(Cmd/Ctrl+Shift+I)→ ネットワークタブ → リフレッシュ

  3. 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' -U

APIトークンの場合は-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-mcp

Claude Desktopclaude_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が自動的に使用します:

スキル

機能

canvas-morning-check

日次ブリーフィング:期限、新しいお知らせ、未読メッセージ、新しい成績

canvas-week-plan

実際の課題を読み取り、週の日次計画を立てる

canvas-grade-check

成績状況と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は、どの認証情報が使用されているか、どこに保存されているか、そしてそれがまだ機能するかを示します。

ライセンス

MIT

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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