Canvas LMS (Local-First) について
Canvas LMSのコース、課題、期限、成績などを対応クライアントから扱える、ローカル優先のMCPサーバーです。学生、教育者、MCP開発者向けで、stdioで公式APIに接続し、トークンをローカルに保持します。
主な機能
- 01コースと課題の一覧表示
- 02モジュール、アナウンス、ページの取得
- 03成績、予定、ToDoの確認
- 04コースファイルの一括ダウンロード
- 05stdioでのローカル実行
活用シーン
- 01複数コースの今週の課題を集約
- 02来週のイベントとプランナー項目を確認
- 03コースごとの現在の成績を確認
- 04オフラインインデックス用にコース内容を取得
MCP 対応
Claude CodeやClaude Desktopなどの対応クライアントに、stdio経由でCanvasの照会ツールを提供します。ローカル設定を読み込み、外部のトークン仲介なしでCanvas公式APIを呼び出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx canvas-local-mcpCANVAS_BASE_URLCanvas institution root URL (no /api/v1 suffix), e.g. https://your-institution.instructure.comCANVAS_TOKENシークレットCanvas personal access token (Account -> Settings -> Approved Integrations -> New Access Token)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
10掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| active_only | boolean | いいえ |
詳細
Canvas LMS MCP サーバー(canvas-mcp)
Canvas のコース、課題、締め切り、モジュール、成績について、Claude にまとめて質問できます。
canvas-mcp は、Canvas LMS ユーザー(学生、教員、MCP ビルダー)向けのローカルファーストな MCP サーバーです。Canvas REST API の操作を、Claude Code、Claude Desktop、その他の MCP 互換クライアントで使える MCP ツールに変換します。
ステータス: アルファ版です。単一ユーザー向けで、保証はなく、API の仕様は今後変更される可能性があります。問題が発生した場合は、イシューを報告してください。
対象ユーザー
- 学生:複数のコースをまとめて確認したい方
- 教育関係者:課題、モジュール、お知らせにすばやくアクセスしたい方
- MCP ユーザー:ローカルの Claude ワークフローで Canvas データを使いたい方
Claude に質問できること
- 「現在受講中のすべてのコースで、今週締め切りの課題は何ですか?」
- 「来週の今後のイベントとプランナー項目を表示してください。」
- 「コースごとに現在の成績を一覧表示してください。」
- 「コース
12345のモジュール(項目を含む)を取得してください。」 - 「コース
12345のお知らせを表示してください。」 - 「コース
12345からページsyllabusを取得してください。」
クイックスタート
前提条件:Python 3.10+。
1) Canvas の個人用アクセストークンを作成する
Canvas で、Account → Settings → Approved Integrations → + New Access Token に進みます。 表示されたトークンをコピーしてください(Canvas では後から再表示できません)。
2) インストールする
PyPI から(推奨):
pip install canvas-local-mcp
または、ソースから:
git clone https://github.com/admin978/canvas-mcp.git && cd canvas-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
3) ~/.canvas.env を設定する
curl -fsSL https://raw.githubusercontent.com/admin978/canvas-mcp/main/.canvas.env.example -o ~/.canvas.env
chmod 600 ~/.canvas.env
# edit ~/.canvas.env: set CANVAS_BASE_URL (institution root, no /api/v1)
# and paste the token into CANVAS_TOKEN
トークンの安全な取り扱いに関するガイダンス(最小権限、ファイルのアクセス許可、ローテーション/失効、脆弱性の報告)については、SECURITY.md を参照してください。
4) MCP クライアントに登録する
Claude Code:
claude mcp add canvas-local -- canvas-local-mcp
Claude Desktop:
- macOS のパスの例:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows のパスの例:
%APPDATA%\Claude\claude_desktop_config.json - Linux のパスの例:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"canvas-local": {
"command": "canvas-local-mcp"
}
}
}
公開されるツール
list_courseslist_assignmentslist_moduleslist_announcementsget_pageget_file_infoget_gradesplanner_itemsupcoming_eventstodo
一括ダンプ
canvas-local-mcp-dump は、オフラインでのインデックス作成用に、コースファイルと関連コンテンツをダウンロードします。
canvas-local-mcp-dump # all active courses
canvas-local-mcp-dump 12345 67890 # specific course IDs
デフォルトでは、出力先は ./canvas-dump/ です。CANVAS_DUMP_DIR=/path/to/dir で変更できます。
ローカルファースト、プライバシー、トークンのフロー
- サーバーはローカルで動作し、MCP クライアントとの通信には stdio トランスポートを使用します。
- 設定は
~/.canvas.env(CANVAS_BASE_URL、CANVAS_TOKEN)から読み込まれます。 - リクエストはローカルサーバーから公式の Canvas API エンドポイントに送信されます。
- リクエストの経路では外部のトークンブローカーを使用しません。
- セキュリティガイダンスと脆弱性開示ポリシーについては、SECURITY.md を参照してください。
デモ
現在、デモ GIF はまだコミットされていません。次の手順でワークフローをすぐに確認できます。
次のプロンプトを試す
MCP サーバーを登録した後、Claude に質問します。
- 「現在受講中の Canvas コースを一覧表示してください。」
- 「現在受講中のすべてのコースで、今週締め切りの課題は何ですか?」
- 「来週の今後のイベントとプランナー項目を表示してください。」
- 「コースごとに現在の成績を一覧表示してください。」
プレースホルダー:今後の PR で、短いターミナル/GIF のウォークスルーを追加してください。
開発
Python 3.10+ が必要です。
pip install -e ".[dev]"
ruff check canvas_local_mcp tests # lint
pytest # tests run against a mocked Canvas API — no token needed
CI では、プッシュとプルリクエストのたびに Python 3.10~3.13 でリンターとテストを実行します。
新しいリリースの公開
PyPI と MCP Registry で一貫性を保って新しいバージョン(例:0.1.4)を公開するには、次の順序に従ってください。
1. すべての箇所でバージョンを更新する
1 つの PR で、以下の 3 つのファイルすべてを新しいバージョン文字列に更新します。
| ファイル | フィールド |
|---|---|
pyproject.toml | [project].version |
canvas_local_mcp/__init__.py | __version__ |
server.json | ルートの version および packages[0].version |
3 つのバージョンが一致していない場合、CI テスト test_server_json_version_matches_package とワークフローの検証ステップは失敗します。
2. PR を main にマージする
マージする前に、すべての CI チェックが通るまで待ちます。
3. canvas-local-mcp を PyPI に公開する
このプロジェクトでは、PyPI へのアップロードに Trusted Publisher (OIDC) を使用しています。
PyPI 公開ワークフローを実行するか(または認証情報を設定済みの場合は python -m build && twine upload dist/* を実行して)、タグを作成する前に公開します。こうすることで、MCP Registry がパッケージを取得するときに利用できる状態になります。
4. タグ vX.Y.Z を作成してプッシュする
git tag v0.1.4
git push origin v0.1.4
これにより Publish to MCP Registry ワークフローが実行され、以下が行われます。
server.json、pyproject.toml、タグのすべてで同じバージョンが指定されていることを検証します。- GitHub OIDC を使って
server.jsonを MCP Registry に公開します(シークレットは不要です)。
5. 検証する
- PyPI:
https://pypi.org/project/canvas-local-mcp/ - MCP Registry:
https://registry.modelcontextprotocol.io/?q=canvas-mcp - GitHub Actions:
https://github.com/admin978/canvas-mcp/actions
重要:既存のタグを再利用したり、移動したりしないでください。誤りがあり、再公開が必要な場合は、 次のパッチバージョン(例:
0.1.4)に更新して、手順 1 からやり直してください。
コントリビューション、ロードマップ、サポート
- イシュー/機能リクエスト
- バグ修正や Canvas ワークフローの改善に関するプルリクエストを歓迎します
- ロードマップの方針は、現在、オープンイシューや今後の PR で確認できます
このプロジェクトが Claude を使った Canvas の管理に役立った場合は、上記の手順を試して、⭐ を付けていただけると、ほかの学生や教育者にも見つけてもらいやすくなります。
ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。