canvas-mcp について
canvas-mcp は Canvas LMS 向けの MCP サーバーで、学生、教育者、ラーニングデザイナー、開発者向けに役割別のツールを提供します。コース照会、コンテンツ管理、採点、アクセシビリティ検査に対応し、任意のワークフロースキルも利用できます。
主な機能
- 01学生情報とコース情報の照会ツール
- 02課題、モジュール、ページ、ファイルの管理
- 03提出物の確認と一括採点
- 04コースコンテンツのアクセシビリティ検査
- 05コースワークフロー向けの任意スキル
活用シーン
- 01課題の期限やコース成績の確認
- 02コースコンテンツの作成やグループ管理
- 03提出物と採点の一括処理
- 04コース構成とアクセシビリティの確認
MCP 対応
MCP サーバーとして、互換クライアントに Canvas LMS の操作ツールを公開します。デフォルトのプロファイルではツールが絞られ、任意の機能で拡張できます。任意のスキルは複数手順のコースワークフローを支援します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Canvas MCP サーバー
Canvas LMS 用の MCP サーバーです。最大128個のツールと8個のエージェントスキルを利用できます。Claude Desktop、Cursor、Codex、Windsurf、およびその他40以上のエージェント向けに設計されています。セットアップ方法と機能はクライアントによって異なります。
クイックスタート
1. MCP サーバーをインストールします(スキルを含む、ほかのすべての機能を使うには、サーバーを起動しておく必要があります)。
- Claude Desktop: 最新リリースから
canvas-mcp.mcpbをダウンロードし、ダブルクリックします。Canvas の URL とトークンの入力を求められます。ターミナルは不要です。詳細はこちら。 - Cursor、Zed、Windsurf、Continue、Claude Code、その他のクライアント: 仮想環境に
pip installし、.envにトークンを追加して、クライアントからcanvas-mcp-serverバイナリを指定します。ローカルインストールに、クライアントごとの設定ブロックがあります。
2. 接続を確認します。 canvas-mcp-server --testを実行すると、Canvas への接続成功が報告されます。その後、クライアントを再起動してください。
3. 任意:ワークフロースキルを追加します。 これらのスキルは、ツールに加えて、複数ステップの手順(週間計画、朝の確認、一括採点、ピアレビュー、コースの品質チェック)をエージェントに教えます。
npx skills add vishalsachdev/canvas-mcp
スキルの一覧はエージェントスキルを参照してください。エージェントが Claude Code の場合、同じ手順をスラッシュコマンドとしても利用できます。
AI エージェント向け
Canvas MCP は、Canvas LMS とやり取りするための最大128個のツールを提供します。デフォルトのプロファイルでは登録されるツール数は少なく、オプションの機能ゲート付きツールを有効にすると、合計128個まで増やせます。ツールはユーザーの種類ごとに整理されています。
学生向けツール(クリックして展開)
| ツール | 用途 | プロンプトの例 |
|---|---|---|
get_my_upcoming_assignments | 今後 N 日間の提出期限 | 「今週の提出物は何ですか?」 |
get_my_todo_items | Canvas の TODO リスト | 「自分の TODO リストを表示して」 |
get_my_submission_status | 提出済みか未提出か | 「すべて提出できていますか?」 |
get_my_course_grades | 現在の成績 | 「自分の成績はどうですか?」 |
get_my_peer_reviews_todo | 未完了のピアレビュー | 「どのピアレビューをする必要がありますか?」 |
list_my_announcements | 有効なすべてのコースのお知らせ | 「今週、教授たちはどんなお知らせを出しましたか?」 |
get_my_activity_stream | 種類ごとにまとめた最近のアクティビティ | 「Canvas で何か新しいことはありますか?」 |
list_my_groups | コース ID とグループ ID を含む、自分のグループ | 「BADM 350 ではどのプロジェクトチームに所属していますか?」 |
get_group_members | 自分が所属するグループのメンバー(メールアドレスは含まれません) | 「自分のプロジェクトグループには誰がいますか?」 |
list_group_files | 自分のグループに保存されたファイル | 「グループがアップロードしたファイルは何ですか?」 |
list_quizzes | コース内の Classic Quizzes と New Quizzes。日付と自分の提出状況を含みます(読み取り専用) | 「CS 161 にはどんなクイズがありますか?」 |
get_quiz_details | 1つのクイズの設定と、使用済みおよび残りの受験回数(読み取り専用) | 「クイズ3の受験回数はあと何回残っていますか?」 |
list_calendar_events | コース全体のカレンダー予定と提出期限 | 「来週のカレンダーには何がありますか?」 |
get_calendar_event | 1つのカレンダー予定の詳細 | 「その試験予定の詳細を表示して」 |
list_planner_notes | 自分のプランナーノート | 「今週のプランナーにはどんなメモがありますか?」 |
教育者向けツール(クリックして展開)
| ツール | 目的 | プロンプトの例 | |------|---------|----------------| | `list_assignments` | コース内のすべての課題 | 「BADM 350 の課題を表示して」 | | `create_course_groups` | CSV から新しいグループセット、グループ、メンバーシップをプレビューして確定 | 「これらの Canvas ユーザー ID からプロジェクトグループを作成して」 | | `resume_course_group_creation` | 以前のグループ作成実行で残った作業をプレビューして確定。メンバーシップの競合は拒否 | 「これらの競合を解決した後、グループ作成を再開して」 | | `create_assignment` | 新しい課題を作成 | 「オンラインテキスト提出で、期限を 1 月 26 日にした課題を作成して」 | | `update_assignment` | 既存の課題を更新 | 「Assignment 3 の期限を 2 月 15 日に変更して」 | | `list_submissions` | 学生の提出物 | 「Assignment 3 を提出したのは誰?」 | | `get_student_submission` | 1 人の学生のテキストと表示可能なコメントを取得。採点権限が必要で、編集時の墨消しを保持 | 「学生 123 の Assignment 3 の提出物を読んで」 | | `bulk_grade_submissions` | 複数の提出物を一括採点 | 「この 10 人の学生を採点して」 | | `get_assignment_analytics` | 成績統計 | 「Quiz 2 の分析データを表示して」 | | `send_conversation` | 学生にメッセージを送信 | 「未提出の学生にメッセージを送って」 | | `create_announcement` | お知らせを投稿 | 「試験日の変更を告知して」 | | **モジュール管理** | | | | `create_module` | コースモジュールを作成 | 「第 5 週のモジュールを作成して」 | | `update_module` | モジュール設定を更新 | 「中間試験モジュールの名前を変更して」 | | `add_module_item` | モジュールにコンテンツを追加 | 「第 1 週にシラバスページを追加して」 | | `delete_module` | モジュールを削除 | 「空のテストモジュールを削除して」 | | **ページとコンテンツ** | | | | `create_page` | コースページを作成 | 「オフィスアワーのページを作成して」 | | `edit_page_content` | ページのコンテンツを更新 | 「シラバスページを更新して」 | | `update_page_settings` | ページを公開/非公開にする | 「第 3 週のすべてのページを公開して」 | | `bulk_update_pages` | ページの一括操作 | 「下書きのページをすべて非公開にして」 | | **ファイル管理** | | | | `upload_course_file` | ローカルファイルを Canvas にアップロード | 「syllabus.pdf をコースにアップロードして」 |共通ツール(クリックして展開)
| ツール | 目的 |
|---|---|
list_courses | 登録済みのすべてのコース |
get_course_details | コース情報とシラバス |
list_pages | コースページ |
get_page_content | ページのコンテンツを読み取る |
list_modules | コースモジュールの一覧 |
list_module_items | モジュール内の項目 |
list_discussion_topics | ディスカッションフォーラム |
list_discussion_entries | ディスカッションの投稿 |
post_discussion_entry | ディスカッションの投稿を追加 |
reply_to_discussion_entry | 投稿に返信 |
学習デザイナーツール(コース設計と品質管理)
| ツール | 目的 | プロンプトの例 |
|---|---|---|
get_course_structure | モジュールから項目までの全ツリーを JSON で取得 | 「CS 101 の構成を表示して」 |
scan_course_content_accessibility | WCAG 違反スキャナー(20 項目をチェック:見出し、表、リンク、コントラスト、代替テキスト、キャプション、DesignPLUS) | 「BADM 350 のアクセシビリティを監査して」 |
fetch_ufixit_report | 機関のアクセシビリティレポート | 「このコースの UFIXIT レポートを取得して」 |
parse_ufixit_violations | 違反項目を構造化データとして抽出 | 「UFIXIT の違反項目を解析して」 |
format_accessibility_summary | 読みやすい違反レポート | 「アクセシビリティの問題を要約して」 |
スキル: canvas-course-qc(学期開始前の監査)、canvas-accessibility-auditor(WCAG を基準としたレビュー)、canvas-course-builder(仕様/テンプレートからコースのひな形を作成)。
開発者ツール(一括操作用)
| ツール | 目的 | 使用する場面 |
|---|---|---|
search_canvas_tools | MCP ツールとコード API 操作を検索 | 利用可能なツールや一括操作を探す |
execute_typescript | TypeScript をローカルで実行 | 30 件以上の項目、カスタムロジック、項目ごとのローカル処理 |
判断の目安: 簡単なクエリ → MCP ツール。採点を一括処理(10 件以上) → bulk_grade_submissions。複雑な一括処理(30 件以上) → execute_typescript。 |
クイックリファレンス
コース識別子: Canvas ID(12345)、コースコード(badm_350_120251_246794)、または SIS ID
できないこと: コースの作成・削除、コース設定の変更、他のユーザーのデータへのアクセス
レート制限: 10 分あたり約 700 リクエスト。一括処理には max_concurrent=5 を使用してください。
詳細なドキュメント: AGENTS.md | tools/TOOL_MANIFEST.json | tools/README.md
概要
Canvas MCP Server は、AI アシスタントと Canvas Learning Management System の間をつなぎ、学生、教育者、学習デザイナー、開発者向けに役割別のワークフローを提供します。Model Context Protocol(MCP)に基づいて構築され、MCP 対応クライアント向けに設計されています。セットアップ方法とサポートされる機能は、クライアントによって異なります。
最新リリース:v1.16.0
リリース日: 2026 年 10 月 | 変更履歴の全文 | すべてのリリース
セキュリティリリースです。非公開で報告された 3 件の問題を修正し、1.13.0 のプロンプトインジェクションに関する注意喚起で残っていた最後の問題を解消しました。また、コースグループの作成機能を追加しました。ローカルコード実行に関する破壊的変更として、ローカルサンドボックスには Node.js 22.18 以降が必要になりました。
- ローカルコードサンドボックス (GHSA-7pp5-29mw-9jq3):コンテナーランタイムを使用しないデフォルトのローカルサンドボックスモードでは、
execute_typescriptは Node の権限モデルの下で実行されます。コードが読み取れるのはバンドルされたコード API のみです。また、Node は子プロセス、ワーカースレッド、ネイティブアドオン、ファイルへの書き込みを拒否します。破壊的変更:Node.js 22.18 以降が必要です。TypeScript は型を除去して実行されるため、型のインポートにはimport typeを使い、列挙型と名前空間は避けてください。ローカルモードでのネットワーク遮断は、引き続きベストエフォートです(#157)。 - Canvas トークンは Canvas に限定 (GHSA-7mj9-4mcg-hvhv):別のストレージホストからファイルをダウンロードする際、リダイレクト後も含め、Canvas トークンが送信されなくなりました。また、Canvas 外でのアップロード確認は拒否されます。
- ファイルの内容を隔離 (GHSA-hmr8-mvr2-mvw5):
read_course_fileは、返されるファイルの内容を信頼できない Canvas データとしてマークします。また、CI のレジストリテストでそのペイロードを検証します。 - Windows のダウンロード権限 (GHSA-qf6c-jv93-38gv):Windows では、ダウンロードしたファイルは保存先フォルダーの権限を継承します。Windows でのダウンロード時には毎回、この点が通知されます。これは仕様上の制限です。
- コースグループの作成:
create_course_groupsは、新しいグループセット、グループ、メンバーシップを CSV からプレビューして確認し、resume_course_group_creationは中断された処理を完了します(#526)。 - リクエストに応じた提出テキスト:
list_submissions(include_body=True)は、manage_gradesのチェック後に、匿名化され、隔離され、サイズが制限された提出テキストを返します(#523)。
報告してくださった @EQSTLab、@KKazuhaK、@bruchris に感謝します。
以前のリリース
v1.15.0 — セキュリティ強化リリースです。HTTP 呼び出し元が互いに分離され(#480、#491)、HTML は上限を設けた 1 回の処理で解析され(#515)、リリースパイプラインで公開する内容が検証されるようになりました。また、get_student_submission が新たに追加されました(#487)。
v1.13.0 — セキュリティリリースです([GHSA-hmr8-mvr2-mvw5](https://github.com/vishalsachdev/canvas-mcp/security/advisories/GHSA-hmr8-mvr2-mvw5)。何かを変更するツールは、運用担当者が許可した場合にのみ利用できます。破壊的変更:HTTP サーバーは ALLOWED_WRITE_TOOLS が設定されていない限り読み取り専用となり、send_conversation は常に事前にプレビューを表示し、get_conversation_details から auto_mark_read が削除され、設定を検証できない場合はルーブリックの採点を中止し、ローカルファイルへのエクスポートは HTTP 呼び出し元からの要求を拒否します。新機能:既存のルーブリックを保護付きで編集する update_rubric(#386)と、既存の内容を置き換える前にプレビューを表示する update_syllabus を追加しました。修正:Gradescope などの外部ツールを使う課題が未提出として報告されなくなりました(#390。@EastArctica に感謝します)。TypeScript のページネーションはページ数の上限内で Link ヘッダーに従うようになり(#403)、確認と採点のワークフローを強化しました(#394〜#408)。execute_typescript サンドボックスは、root 以外のユーザーとして読み取り専用のルートファイルシステム上で実行されるようになりました(#317、#339)。FastMCP 4 と MCP SDK 2 を基盤としています(#354)。
v1.12.0 — 安全性に関するリリースです。すべての削除ツールで、実行前に確認を求めます。破壊的変更:delete_announcement を削除し、お知らせ削除ツールから dry_run を削除し、7 つすべての削除ツールで confirmation_token が必須になりました(#318)。Python 3.10 のサポートも終了しました(#315)。新機能:delete_assignment_with_confirmation、ACCESSIBILITY_CHECKERS(#325)、コンテンツ移行ツール(#309)を追加しました。
v1.11.0 — プロトコルの正確性に関するリリースです。破壊的変更:send_peer_review_reminders の名称を send_peer_review_inbox_messages に変更しました(#303)。ツールの失敗時に MCP の isError: true を設定します(#270)。文字列を返すツールは、ペイロードを structuredContent.result に重複して格納しなくなりました(#271)。FastMCP の最低バージョンは 3.4.7 です(#293)。@jonespm に感謝します。
v1.10.0 — ライブテストを行った報告者の協力による、コミュニティ主導のバグ修正リリースです。 @khagyard、@zqian、@jonespm、@bruchris、@SHIL0018(2人目の外部コード貢献者)に感謝します。search_canvas_tools のレスポンス形式に破壊的変更が含まれています。
- 破壊的変更:
search_canvas_toolsのレスポンス形式 v2 (#281)。このツールは、TypeScript のコード API ファイルに加えて、登録済みの約99個の MCP ツールも実際に検索するようになりました(以前は後者のみを検索していたため、約10個のピアレビュー用ツールが存在していても、「ピアレビュー」では何も見つかりませんでした)。レスポンスにはschema_version: 2と、ラベル付きのmcp_tools/code_execution_apiセクションが含まれます。従来のフラットなtoolsキーは廃止されました。コード API の詳細コンテンツも2,000文字までに制限されるようになりました(#287) - 学生が自分のピアレビューを見つけられるようになりました (#275):
get_my_peer_reviews_todoに、課題ごとの直接検索と、プランナーフィードからの検出機能が追加されました。これは Canvas の学生向け UI が使用するものと同じデータソースで、報告者が提供した実際の本番環境のペイロードで検証済みです create_announcementは学生トークンで安全に失敗するようになりました (#283):Canvas は作成処理を通常のディスカッショントピックに黙って変更します。このツールはコース権限を事前に確認し、何も作成する前に処理を拒否します。変更がすり抜けた場合は、意図せず作成されたトピックを自動削除し、代替手段としてディスカッションツール経由で内容を投稿しないよう AI クライアントに促します- セキュリティ: URL 検証を厳格化(コードスキャンの修正)、Docker ベースイメージを
python:3.14-slimに更新、CI アクションを更新
v1.9.0 — プロンプトインジェクション対策の強化(#239):Canvas が作成したテキストは、指示ではなくデータとして出所を明確に区別して渡されます。複数の宛先への送信は2段階のプレビュー→確認方式に変更されました(破壊的変更)。書き込みツールは区切りマーカーを拒否します。OSSF Scorecard を公開し、CI アクションを SHA で固定し、.mcpb に SLSA の来歴情報を同梱しました。npm ウィザードを廃止しました(#249)。マージ前に敵対的レビューを11回実施
v1.8.0 — セキュリティスキャンの指摘事項への対応:12件中11件を修正し、そのうち3件は破壊的変更です(HTTPS のみの Canvas URL、stdio のみのファイル転送ツール、既存ファイルを上書きしないダウンロード)。測定された提出物の認可バイパスを一元的に解消し、CSV の数式インジェクションを防止。コード実行はフェイルクローズに変更し、依存関係の最低バージョンを引き上げました(PR #251、#255)
v1.7.0 — 講師からのバグ報告を受けた正確性向上リリース:Canvas が要求より少ない処理を黙って実行した場合に、書き込みが成功を報告しなくなりました(#219–#221)。Planner API による今後の課題の取得(#222)、check_enrollment の AMBIGUOUS 回答(#199)、ページ/受信トレイのワイヤ形式を修正(#207、#208)、MCP 仕様に準拠したツール注釈(#204)、CSV ルーブリック形式を修正(#190)、匿名化処理をクライアント層に集約(#179)。@khagyard と @zqian に感謝します
v1.6.0 — 明示的な許可リストによる Tier 1 学生向け書き込みツール(#170)、get_my_enrollments / get_my_profile(#171)、3段階の匿名化(#166、#179)、ルーブリック関連付けの修正(#180、#181)、execute_typescript をオプトイン方式に変更(#178)、ruff の CI ゲート(@w3lld1、PR #186)
v1.5.0 — get_syllabus(#134)、create_rubric_from_csv(#119)、update_discussion_topic(#154)、fastmcp 2.x への移行(#145)、ゲート付き CI スキャンにより依存関係の勧告を 33 件から 0 件に削減(PR #156)
v1.4.0 — check_enrollment(PR #126)、Claude Desktop Extension .mcpb、Entra ID 認証による教育機関向けホスティング(#115、PR #125)、認証ゲートなしの HTTP はフェイルクローズ(PR #123)
v1.3.0 — create_rubric(PR #100)、read_course_file(@DomBarker99、PR #90)、ユーザー単位のツールにおけるイベントループの修正(PR #99)、一括削除の安全上限(PR #96)、依存関係の整理(PR #93)
v1.2.0 — ロールベースのツールフィルタリング(@Promithius-DR、PR #84)、アクセシビリティの改善(fix_accessibility_issues、スキャナーのチェック項目を 4 件から 20 件に拡張)、セキュリティ強化(パストラバーサル/シンボリックリンクの保護)、execute_typescript の Windows サポート(PR #85)、CI の統合(チェック項目を 11 件から 8 件に削減)
v1.1.0 — ホスト型サーバー(mcp.illinihunt.org)、ラーニングデザイナー向けツールと 3 つのスキル、skills.sh の Agent Skills、ファイル管理(@Metzpapa、PR #75)、トークンの最適化、汎用配布
v1.0.8 — セキュリティ強化(PII のサニタイズ、監査ログ、デフォルトでのサンドボックス化)、Ruff によるリンティング、235 件以上のテスト
v1.0.7 — 課題更新ツール(update_assignment)、CRUD 完全対応、9 件のテスト
v1.0.6 — モジュール管理(7 ツール)、ページ設定(2 ツール)、235 件以上のテスト
v1.0.5 — Claude Code スキル、GitHub Pages サイト
v1.0.4 — トークン効率の高い一括操作のためのコード実行 API、MCP 2.14 準拠
学生向け 👨🎓
AI を活用したサポートで、次のことができます。
- これから提出する課題と締め切りの確認
- すべてのコースの成績の把握
- ピアレビュー課題の管理
- コースのコンテンツとディスカッションへのアクセス
- TODO リストの整理
教育者向け 👨🏫
次の機能で授業をより効果的に進められます。
- 課題と採点の管理
- 学生の分析と成績状況の把握
- ディスカッションとピアレビューの進行
- FERPA に配慮したワークフローを支援するプライバシー制御
- 一括メッセージ送信とコミュニケーションツール
学習デザイナー向け 🎨
AI を活用したコース設計と品質保証:
- コースの骨組み作成 — 仕様書、テンプレート、または既存のコースの複製をもとに、コース全体の構成を作成します
- 品質監査 — 学期開始前に、構成、コンテンツ、公開状況、完全性を確認する QC チェックを実施します
- アクセシビリティレビュー — 20 項目の WCAG 指向スキャナー(見出し、表、スコープ、コントラスト、代替テキスト、リンク、キャプション、DesignPLUS への移行)、優先順位付きレポート、ガイド付き修正、検証を提供します
- コース構成の分析 — 1 回の呼び出しでモジュールから項目までのツリー全体を取得し、コースをすばやくレビューできます
専用スキル 3 種(canvas-course-qc、canvas-accessibility-auditor、canvas-course-builder)と、get_course_structure ツールを利用できます。
🤖 エージェントスキル
AI エージェントが Canvas MCP ツールを効果的に使えるようにする、事前構築済みのワークフローレシピです。skills.sh を通じて 40 以上のコーディングエージェントで利用できるほか、Claude Code 専用のスラッシュコマンドとしても利用できます。
skills.sh からインストール(すべてのエージェント)
スキルは MCP ツールを呼び出すため、まずサーバーをインストールしてください。サーバーがなければ、スキルを実行できません。
npx skills add vishalsachdev/canvas-mcp
これを実行すると、任意のエージェント(Claude Code、Cursor、Codex、OpenCode、Cline、Zed、その他多数)にスキルをインストールするための対話型ピッカーが起動します。
| スキル | 対象 | 機能 |
|---|---|---|
canvas-week-plan | 学生 | 週間プランナー:締切、提出状況、成績、ピアレビュー |
canvas-morning-check | 教育者 | コースの健全性ダッシュボード:提出率、学習に苦戦している学生、締切 |
canvas-bulk-grading | 教育者 | 採点の判断ツリー:単独 → 一括 → 安全確認付きコード実行 |
canvas-peer-review-manager | 教育者 | ピアレビューの全工程:分析、品質分析、リマインダー、レポート |
canvas-discussion-facilitator | 両方 | ディスカッションの閲覧、参加状況の監視、返信、進行 |
canvas-course-qc | 学習デザイナー | 学期開始前の品質監査:構成、コンテンツ、公開状況、完全性 |
canvas-accessibility-auditor | 学習デザイナー | WCAG スキャン、優先順位付きレポート、ガイド付き修正、検証 |
canvas-course-builder | 学習デザイナー | 仕様書、テンプレート、または既存のコースをもとにコースの骨組みを作成 |
特定のスキルをインストールするには:
npx skills add vishalsachdev/canvas-mcp -s canvas-week-plan
Claude Code のスラッシュコマンド
Claude Code を使用している場合、同じワークフローをスラッシュコマンドとしても利用できます:
You: /canvas-morning-check CS 101
Claude: [Generates comprehensive course status report]
You: /canvas-week-plan
Claude: [Shows prioritized weekly assignment plan]
Claude Code のスキルは .claude/skills/ にあり、ワークフローに合わせてカスタマイズできます。
カスタムスキルをお求めですか? 繰り返し行うワークフローの内容を記載して、リクエストを送信してください!
🔒 プライバシーとデータ保護
教育者向け:FERPA に配慮したデータ取り扱い
Canvas MCP には、教育機関の FERPA 上の義務への対応に役立つ、オプションのプライバシー制御機能があります。ただし、コンプライアンスはデプロイ方法、設定、教育機関のポリシー、AI プロバイダーにも左右されます。
- 応答の匿名化により、対応する ID フィールドを一貫した匿名 ID(Student_xxxxxxxx)に変換します
- ディスカッション投稿および提出物に含まれるメールアドレスのマスキングと、対応する PII パターンのフィルタリング
- 設定可能なプライバシー制御(
ENABLE_DATA_ANONYMIZATION=true)を備えたローカルサーバーのデプロイ - プライバシーに配慮した分析:「サポートが必要な学生は誰ですか?」と尋ねながら、AI クライアントに返される個人を特定するデータを減らせます
- 教職員が匿名 ID と実際の学生をローカルで照合するための匿名化解除マッピングツール
ENABLE_DATA_ANONYMIZATION=true を有効にすると、ツールの結果が AI クライアントに渡される前に、対応する ID フィールドが匿名化されます。学生データを使用する前に、教育者向けガイドと所属機関の要件を確認してください。
学生向け:データの範囲とプライバシー
- Canvas のスコープに限定されたアクセス:学生固有のツールは Canvas の「self」エンドポイントを使用します。共有コースコンテンツのツールは、Canvas がアカウントに付与する権限に従います
- 共有サーバーでの認証情報の保存なし:ローカルモードでは、自分の
.envから Canvas トークンを読み取ります。認証済みの組織向け HTTP 環境では、各リクエストでユーザーの Canvas トークンを送信し、サーバーはこれを保存しません - 組み込みのプロダクト分析機能なし:Canvas MCP はテレメトリーを追加しません。Canvas と AI クライアントには、それぞれ独自のログ記録とデータポリシーが適用されます
- 匿名化は任意:学生向けツールは自分の Canvas データに限定されていますが、AI クライアントのプライバシーポリシーは引き続き適用されます
ホステッドサーバー(提供終了)
公開ホステッドサーバー(mcp.illinihunt.org)は提供を終了しました。アクセス制御のない公開 MCP エンドポイントは、組み込みのコード実行ツールが公開されるため、安全に運用できません。そのため、推奨される方法は、以下の**ローカルインストール**です。
HTTP/ストリーム可能なトランスポート自体は、独自の認証の背後でセルフホストする場合、引き続き完全にサポートされます(canvas-mcp-server --transport streamable-http)。組織向けに、認証付きの共有インスタンスを運用する場合は、サンプルのワークフローと設定テンプレートを含む、本番環境での動作確認済みのデプロイ仕様(Azure App Service + Entra ID プラットフォーム認証、ユーザーごとの Canvas トークン)について、**deploy/azure/**を参照してください。
前提条件(ローカルインストール)
- Python 3.11+ - モダンな機能と型ヒントに必要です
- Canvas API へのアクセス - API トークンと組織の URL が必要です
- MCP クライアント - MCP 互換クライアント(Claude Desktop、Cursor、Zed、Windsurf、Continue など)。セットアップ方法と機能はクライアントによって異なります
対応する MCP クライアント
Canvas MCP は、Claude Desktop、Codex、Cursor、Zed、Windsurf、Continue、Replit、Copilot Studioなどの MCP 互換クライアント向けに設計されています。セットアップの詳細と対応する機能は、クライアントによって異なります。
Canvas MCP は、User-Agent ヘッダーや per_page によるページネーションなど、文書化された Canvas API のパターンを使用します。Canvas Cloud と、互換性のあるセルフホスト型インスタンスを対象としています。
Claude Desktop Extension としてインストール(最も簡単)
Claude Desktop を使用している場合、Canvas MCP はワンクリックでインストールできます。ターミナルも設定ファイルの編集も不要です。
- 最新のリリースから
canvas-mcp.mcpbをダウンロードします。 - ファイルをダブルクリックするか、Claude Desktop → Settings → Extensions にドラッグします。
- プロンプトが表示されたら、
/api/v1パスを含む Canvas API URL(例:https://canvas.youruniversity.edu/api/v1)と、Canvas API token(Canvas → Account → Settings → New Access Token。一部の機関では代わりに申請フォームから発行されます。下記を参照)を入力します。トークンは OS のキーチェーンに保存されます。
この拡張機能はサーバーをローカルで実行し、ご自身のトークンを使って Canvas を呼び出すため、リクエストにはそのトークンの Canvas 権限が適用されます。Canvas とお使いの AI クライアントには、それぞれ独自のアクティビティ記録が保持される場合があります。この拡張機能は uv を使用して Python 3.13 を選択し、依存関係を管理します。Python 3.13 が見つからない場合、初回起動時に uv がダウンロードします(インターネット接続が必要で、Python のダウンロードが許可されている必要があります)。Python を別途インストールしたり、システムのデフォルト Python を変更したりする必要はありません。他のクライアントで使用する場合や、ソースから実行する場合は、以下の手動セットアップを使用してください。
Windows のトラブルシューティング: spawn uv ENOENT は、Claude Desktop が uv を見つけられないことを意味します。uv をインストールしてから、Claude Desktop を完全に終了して再起動し、更新された PATH を読み込ませてください。古い拡張機能バンドルでは Python 3.15 が選択され、cffi のコンパイル時に「Microsoft Visual C++ 14.0 or greater is required」というエラーが発生することがあります。コンパイラーをインストールする代わりに、手動のクライアント設定で uv run --python 3.13 を使い、Python 3.13 を明示的に選択してください。issue #391 を参照してください。既存のリリース済みバンドルには、変更を含むリリースをインストールしない限り、ランチャーの変更は反映されません。
ローカルインストール
1. 依存関係をインストールする
# (Recommended) Use a dedicated virtualenv so the MCP binary is in a stable location
python3 -m venv .venv
. .venv/bin/activate
# Install the package editable
pip install -e .
2. 環境を設定する
# Copy environment template
cp env.template .env
# Edit with your Canvas credentials
# Required: CANVAS_API_TOKEN, CANVAS_API_URL
Canvas API token の取得先:Canvas → Account → Settings → New Access Token
一部の機関では、トークンの作成が制限されています。 セルフサービスが無効になっている場合、 「New Access Token」ボタンが表示されないか、操作時にエラーが発生し、代わりに IT の申請フォームから トークンが発行されます。API にアクセスできないと判断する前に、所属機関の IT ナレッジベースを確認してください。
University of Illinois Urbana-Champaign では、学生も教員も例外なくこの方式です。
Canvas API Token Request form からトークンを申請してください(NetID でのログインが必要です)。承認されたら:
- Canvas → Account → Settings → Approved Integrations に移動し、新しいトークンを見つけて、 Activate をクリックし、ページを更新します。
- Technology Services から送信される U of I Box のリンクで、トークンの値を取得します。
2026 年 8 月時点で、新しい Illinois トークンはすべて 有効期限が 30 日です(上流の Instructure の要件によるものです)。有効期限は監視も通知もされず、期限切れのトークンは 予告なく削除されます。現在のトークンが期限切れになる前に、後継のトークンを申請してください。 詳細:Answers KB 150325。
他の地域の学生:「There is a limit to the number of access tokens you can create」と表示される場合や、トークン作成のオプションが見つからない場合は、所属機関の Canvas 管理者または IT サポート部門に連絡して、API アクセスを申請してください。
3. MCP クライアントの設定
Canvas MCP は、MCP 互換クライアント向けに設計されています。以下に一般的なクライアントの設定例を示します。正確な設定方法や機能はクライアントによって異なります。
Claude Desktop(最も一般的)
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
設定:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
注:シェル固有の PATH エントリ(例:pyenv の shim)による問題を避けるため、仮想環境のバイナリには絶対パスを使用してください。
Codex
Codex は、ローカルの stdio MCP サーバーとしてサーバーを起動できます。~/.codex/config.toml に以下のエントリを追加し、例のパスをお使いのマシン上の絶対パスに置き換えてください。
[mcp_servers.canvas-api]
command = "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
cwd = "/absolute/path/to/canvas-mcp"
cwd をリポジトリに設定すると、別の場所から Codex を起動した場合でも、サーバーが上記で作成した .env ファイルを見つけられます。または、Codex CLI でコマンドを登録してください。
codex mcp add canvas-api -- /absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server
CLI コマンドでは、作業ディレクトリは永続的に設定されません。コマンドを実行した後、~/.codex/config.toml にある既存の [mcp_servers.canvas-api] テーブルに cwd 行を追加してください。同じ名前のテーブルを二つ作成しないでください。
codex mcp list を実行して登録を確認し、その後 Codex を再起動してください。Codex TUI で /mcp を実行すると、アクティブなサーバーとそのツールが表示されます。
Cursor
設定ファイルの場所:
- macOS/Linux:
~/.cursor/mcp_config.json - Windows:
%USERPROFILE%\.cursor\mcp_config.json
設定:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Zed
設定: Zed の settings.json に追加します(Settings メニューからアクセスできます)。
{
"context_servers": {
"canvas-api": {
"command": {
"path": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server",
"args": []
}
}
}
}
Windsurf IDE
設定ファイルの場所:
- macOS:
~/Library/Application Support/Windsurf/mcp_config.json - Windows:
%APPDATA%\Windsurf\mcp_config.json
設定:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Continue
設定: Continue の config.json に追加します(Continue の設定からアクセスできます)。
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
その他の MCP クライアント
その他の MCP 互換クライアントでは、一般的に次の手順で設定します。
- クライアントの MCP 設定ファイルを探します
- 次の内容でサーバーエントリを追加します:
- サーバー名:
canvas-api(または任意の名前) - コマンド:
canvas-mcp-serverバイナリへのフルパス - 任意の引数:必要に応じて追加の引数を指定します
- サーバー名:
具体的な設定形式とファイルの場所については、クライアントの MCP ドキュメントを参照してください。
Windows ユーザー向け:パス内のスラッシュをバックスラッシュに置き換えてください(例:
C:\Users\YourName\canvas-mcp\.venv\Scripts\canvas-mcp-server.exe)
動作確認
設定をテストします。
# Test Canvas API connection
canvas-mcp-server --test
# View configuration
canvas-mcp-server --config
# Start server (for manual testing)
canvas-mcp-server
利用可能なツール
Canvas MCP Server は、Canvas LMS API を操作するためのツールセットを提供します。これらのツールは、見つけやすさと保守性を高めるため、用途別に分類されています。
ツールのカテゴリ
学生向けツール(新機能!)
- 個人の課題の追跡と締切の管理
- すべてのコースの成績をモニタリング
- TODO リストと相互レビューの管理
- 提出状況の追跡
共有ツール(学生と教育者の両方が利用)
- コースツール - コースの一覧表示と管理、詳細情報の取得、シラバスの内容を使った概要の生成
- ディスカッションとお知らせのツール - ディスカッション、お知らせ、返信の管理
- ページとコンテンツのツール - ページ、モジュール、コースコンテンツへのアクセス
教育者向けツール
4. 課題ツール - 分析機能を備えた課題、提出物、相互レビューの管理
5. ルーブリックツール - ルーブリックの作成、安全な更新と一覧表示、課題との関連付け、提出物の採点(効率的な一括採点を行うbulk_grade_submissionsを含む)。update_rubricは保護された全置換操作です。既存の評価基準と評価の ID を保持し、プレビューと確認を必須とし、結果を検証します。ルーブリック API の動作と採点に関する注意事項を参照してください。
6. ユーザーと登録ツール - 登録、ユーザー、グループの管理
7. 分析ツール - 学生の分析データ、課題の統計、進捗状況の追跡を表示
8. メッセージングツール - 学生へのメッセージとお知らせの送信
開発者向けツール
9. 検索ツール - search_canvas_toolsで登録済みの MCP ツールとコード実行 API 操作を検索し、list_code_api_modulesでコード実行モジュールを一覧表示
10. コード実行ツール - execute_typescriptでTypeScriptコードを実行し、一括項目処理をモデルのコンテキスト外で行えるようにします
📖 利用可能なツールの詳細については、ツールのドキュメント全文を見る。
コード実行 API
一括操作(30項目以上)では、Canvas MCP はTypeScriptコード実行に対応しています。すべての項目をモデルのコンテキストに読み込まずに、一括操作をローカルで処理できます。
| 方法 | 最適な用途 | コンテキストでの動作 |
|---|---|---|
| MCP ツール | シンプルなクエリ、小規模なデータセット | ツールの結果をモデルに返します |
bulk_grade_submissions | 10~29項目の一括採点 | 定義された一括処理を1回のツール呼び出しで実行します |
execute_typescript | 30項目以上、カスタムロジック | 項目をローカルで処理し、選択した出力を返します |
search_canvas_toolsで利用可能な操作を検索し、続いてexecute_typescriptでローカル実行します。デフォルトのサンドボックスでは、時間、メモリ、環境、およびベストエフォートのネットワーク制御が適用されますが、完全なセキュリティ境界ではありません。信頼できないコードや厳格な送信トラフィック制御が必要な場合は、より強力な外部隔離を使用してください(issue #157を参照)。macOS、Linux、Windowsで動作します。
コード実行の例とセキュリティの詳細
一括採点の例
import { bulkGrade } from './canvas/grading/bulkGrade';
await bulkGrade({
courseIdentifier: "60366",
assignmentId: "123",
gradingFunction: (submission) => {
const notebook = submission.attachments?.find(f =>
f.filename.endsWith('.ipynb')
);
if (!notebook) return null;
return { points: 100, comment: "Great work!" };
}
});
セキュリティモード
| モード | 設定 | 動作 |
|---|---|---|
| ローカルサンドボックス(デフォルト) | Node.js 22.18+ | Node の権限モデル(コード API の読み取りのみ。ファイル書き込み、子プロセス、ネイティブアドオンは不可)、タイムアウト120秒、メモリ512MB、環境変数のフィルタリング、ベストエフォートのネットワーク制御 |
| コンテナーサンドボックス | TS_SANDBOX_MODE=container | Docker/Podman によるコンテナーファイルシステムの隔離。送信トラフィックの保証はデプロイ設定によって異なります |
| サンドボックスなし | ENABLE_TS_SANDBOX=false | ローカル環境への完全なアクセス(推奨されません) |
詳しい手順については、一括採点の例を参照してください。
使い方
MCP クライアントがサーバーを自動的に起動します。自然な言葉で質問するだけです。
- 「今週の締切は何ですか?」 / 「自分の成績を表示して」 / 「必要な相互レビューは何ですか?」
- 「課題3をまだ提出していないのは誰ですか?」 / 「未提出の学生にリマインダーを送って」
クイックスタートガイド:学生向け | 教育者向け | 実際のワークフロー | トラブルシューティング
ドキュメント
- ツールのドキュメント — 利用可能なツール(オプションの機能フラグ付きツールを含む)のリファレンス
- 学生向けガイド — 学生向けの入門ガイド
- 教育者向けガイド — FERPA に関する考慮事項と教育者向けのワークフロー
- 一括採点の例 — 一括採点の手順
- 開発ガイド — アーキテクチャと貢献方法
技術的な詳細
FastMCP を基盤とし、非同期の httpx、pydantic による検証、python-dotenv による設定を採用しています。最新の src/ レイアウトを使用し、pyproject.toml、主要なコードパス全体の型ヒント、コネクションプーリング、ページネーション、レート制限に対応しています。自動テストスイートに加え、コード品質を保つための ruff と black をサポートしています。
トラブルシューティング
問題が発生した場合は、次の項目をご確認ください。
- サーバーが起動しない —
.envファイル、仮想環境のパス、依存関係など、ローカルインストールの設定を確認してください - 認証エラー — Canvas API トークンの有効性と権限を確認してください
- 接続の問題 — Canvas API の URL が正しいことと、ネットワークにアクセスできることを確認してください
- デバッグ — MCP クライアントのコンソールログ(例:Claude Desktop の開発者コンソール)を確認するか、サーバーを手動で実行してエラー出力を確認してください
セキュリティ
実行時のセキュリティとプライバシー制御:
| レイヤー | デフォルト |
|---|---|
| ログ内の個人を特定できる情報(PII)のサニタイズ | LOG_REDACT_PII=true |
| 起動時のトークン検証 | 常に有効 |
| 構造化監査ログ | オプトイン:LOG_ACCESS_EVENTS=true |
| コード実行のガードレール | ENABLE_TS_SANDBOX=true(ローカルモードではベストエフォート) |
FERPA に配慮した教育者向けワークフローでは、オプションで匿名化を有効にできます:ENABLE_DATA_ANONYMIZATION=true。適用範囲と設定の詳細については、教育者向けガイドをご覧ください。
公開
PyPI、MCP Registry、skills.sh(エージェントスキル)で公開されています。リリースは GitHub Actions により自動化されています。バージョンにタグを付け(git tag vX.Y.Z && git push origin vX.Y.Z)、あとは CI が処理します。
関連プロジェクト:UIUC Course MCP
Canvas MCP の作者である Vishal Sachdev による UIUC Course MCP は、イリノイ大学の公開コース検索、説明、セクションのスケジュールをローカルの AI アシスタントで利用できるようにします。読み取り専用で、アカウントや API キーは不要です。コースの検索にはこちらを、Canvas コース内でサポート対象のワークフローを実行するには Canvas MCP をご利用ください。サーバーのセットアップはそれぞれ別々で、自動アカウント連携機能はありません。
貢献
貢献を歓迎します!お気軽にどうぞ:
- バグや機能リクエストについて issue を提出する
- 改善を含むプルリクエストを作成する
- ユースケースやフィードバックを共有する
貢献者
Canvas MCP に貢献してくださった皆さん、ありがとうございます。
- @KKazuhaK — 学生グループ、成績、クイズ、カレンダー、フィード、受信トレイのツール、Windows CI、コース識別子の解決、完全な全コンテンツの読み取り(#456 から #470)
- @bruchris — テストスイート内のすべてのテキストの読み取りと書き込みで UTF-8 を使用(#445)
- @papatistos — GraphQL を介したグループスペースのディスカッションと匿名ディスカッションの読み取り(#433、#439)
- @lindsay-cheng — 期限超過の提出物に対する Canvas の
missingフラグ(#423) - @EastArctica — 外部ツールの課題が未提出として報告されないように修正(#390)
- @DomBarker99 — リモート MCP デプロイ向けの
read_course_fileツール(#90) - @Promithius-DR — ロールベースのツールフィルタリングとツールアノテーション(#84)
- @Metzpapa — ファイルのダウンロードおよび一覧表示ツール(#75)
- @JCSnap — 学生向けツールのバグ修正(#72、#73)
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルをご覧ください。
Vishal Sachdev が作成
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。