CanvasLMS-API
CanvasLMS - API
CanvasLMS - API は、Canvas LMS アカウントを AI アシスタントの前に置くローカル MCP サーバーです。お使いのマシン上で動作し、ご自身の個人アクセストークンで Canvas と通信し、コース、課題、採点、ディスカッション、モジュール、ページ、ファイル、メッセージング、ピアレビュー、アクセシビリティをカバーする約 100 のツールを公開します。すべてのツールは Markdown を返します。Canvas を変更するすべてのツールは、まず変更内容のプレビューを表示し、確認後にのみ変更を適用します。
クイックスタート
Canvas の個人アクセストークンを取得します。Canvas で Account > Settings > Approved Integrations > New Access Token に移動します。
リポジトリをクローンしてインストールします。
git clone https://github.com/harryx2011-boop/CanvasLMS-API.git cd CanvasLMS-API uv venv .venv uv pip install -e .uvを使用しない場合は、代わりに標準の仮想環境を使用します。python -m venv .venv .venv\Scripts\activate # Windows source .venv/bin/activate # macOS/Linux pip install -e .サンプル環境ファイルをコピーし、Canvas のホストとトークンを入力します。
cp .env.example .env接続を確認します。
canvaslms-api --testこれにより、名前、ユーザー ID、アクティブなコースが表示されます。失敗した場合は、
.env内のCANVAS_URLとCANVAS_TOKENを確認してください。
Related MCP server: Canvas LMS MCP Server
Claude Code に接続する
Windows:
claude mcp add --scope user canvaslms-api -- "<absolute path>\.venv\Scripts\canvaslms-api.exe"macOS/Linux:
claude mcp add --scope user canvaslms-api -- "<absolute path>/.venv/bin/canvaslms-api"サーバーは起動時にリポジトリフォルダから .env を読み取るため、クライアント設定に環境変数を入れる必要はありません。.venv 内の実行ファイルへの絶対パスを使用してください。
Claude Desktop に接続する
Claude Desktop の設定ファイルにエントリを追加します。
{
"mcpServers": {
"canvaslms-api": {
"command": "<absolute path>\\.venv\\Scripts\\canvaslms-api.exe"
}
}
}macOS/Linux では、command に <absolute path>/.venv/bin/canvaslms-api を使用します。
設定ファイルの場所:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
ファイルを編集した後、Claude Desktop を再起動します。
その他のクライアント
stdio サーバーをサポートする MCP クライアントは、上記の Claude Code や Claude Desktop と同じ方法で、実行ファイルを直接起動できます。
HTTP のみをサポートするクライアントの場合は、HTTP トランスポートでサーバーを実行します。
canvaslms-api --transport http --host 127.0.0.1 --port 7100クライアントを http://127.0.0.1:7100 に向けます。サーバーは引き続きリポジトリフォルダ内の .env から Canvas の認証情報を読み取ります。
動作の仕組み
コース識別子。 任意の
course引数は、数値の Canvas ID、コースコード(ENG101)、コース名の一部、またはsis_course_id:Xを受け付けます。どれを使うか不明な場合は、最初にlist_coursesを使用してください。確認ゲート。 Canvas を変更するすべてのツールは、
confirm: bool = false引数を受け取ります。これを指定せずに呼び出すと、ツールは変更内容のプレビューを返し、Canvas を変更するリクエストは行いません。プレビューを確認した後、confirm=trueを指定してもう一度呼び出します。権限。 すべてのツールはトークン所有者として実行されます。学生トークンは、他の学生のプライベートデータを表示したり、採点や一括メッセージングなどの教育者向けツールを使用したりすることはできません。そのような呼び出しは、不足している権限に関するヒントとともに Canvas の 403 を返します。
出力。 すべてのツールは、チャットのトランスクリプトに直接表示するためにフォーマットされた Markdown を返します。
匿名化。
CANVAS_ANONYMIZE_STUDENTS=trueの場合、ツール出力の学生名は実名ではなく、コースごとに安定した仮名に置き換えられます。
ツールリファレンス
書き込みツール(confirm と表示)は、confirm=true を指定して再度呼び出されるまでプレビューを返します。
コースと ID
ツール | 目的 | confirm |
get_profile | トークン所有者の Canvas プロフィールを取得する | |
get_enrollments | トークン所有者のコース横断的な登録情報を一覧表示する | |
list_courses | トークン所有者が閲覧できるコースを一覧表示・検索する | |
get_course | 1 つのコースの詳細を取得する | |
get_syllabus | コースのシラバス本文を取得する | |
get_course_overview | コースを要約する: シラバス、モジュール、今後の課題 | |
get_course_structure | コースの完全なモジュール/ページ/課題の概要を取得する | |
get_cache_status | キャッシュされているコース解決データを表示する | |
clear_cache | コース解決キャッシュをクリアする |
学生
ツール | 目的 | confirm |
get_upcoming_assignments | コース横断的に近日中に期限が来る課題を一覧表示する | |
get_todo | Canvas の ToDo リストを取得する | |
get_submission_status | コースの提出済み/未提出/採点済みのステータスを表示する | |
get_grades | 1 つまたはすべてのコースの現在の成績を取得する | |
get_pending_peer_reviews | トークン所有者がまだ行っていないピアレビューを一覧表示する | |
get_submission | 1 つの提出物の詳細とフィードバックを取得する | |
submit_assignment | 課題を提出する | confirm |
comment_on_submission | 提出物にコメントを追加する | confirm |
mark_module_item_done | モジュール項目を完了としてマークする | confirm |
課題と採点
ツール | 目的 | confirm |
list_assignments | コースの課題を一覧表示する | |
get_assignment | 1 つの課題の詳細を取得する | |
list_submissions | 課題の提出物を一覧表示する | |
get_assignment_analytics | 課題の提出数と成績分布を要約する | |
get_student_analytics | コース内の 1 人の学生の活動を要約する | |
create_assignment | 課題を作成する | confirm |
update_assignment | 課題を更新する | confirm |
bulk_grade_submissions | 1 回の呼び出しで複数の提出物を採点する | confirm |
grade_with_rubric | ルーブリックに基づいて提出物を採点する | confirm |
ルーブリック
ツール | 目的 | confirm |
list_rubrics | コースのルーブリックを一覧表示する | |
get_rubric | 1 つのルーブリックの評価基準を取得する | |
get_rubric_assessment | 提出物のルーブリック評価を取得する | |
create_rubric | ルーブリックを作成する | confirm |
create_rubric_from_csv | CSV 定義からルーブリックを作成する | confirm |
associate_rubric | ルーブリックを課題に添付する | confirm |
ディスカッションとアナウンス
ツール | 目的 | confirm |
list_discussion_topics | コースのディスカッショントピックを一覧表示する | |
get_discussion_topic | 1 つのディスカッショントピックを取得する | |
list_discussion_entries | トピック内のトップレベルのエントリを一覧表示する | |
get_discussion_entry | 1 つのディスカッションエントリを取得する | |
get_discussion_thread | 返信を含む完全なスレッドを取得する | |
post_discussion_entry | トピックに新しいエントリを投稿する | confirm |
reply_to_discussion_entry | 既存のエントリに返信する | confirm |
create_discussion_topic | ディスカッショントピックを作成する | confirm |
update_discussion_topic | ディスカッショントピックを更新する | confirm |
list_announcements | コースのアナウンスを一覧表示する | |
create_announcement | アナウンスを作成する | confirm |
delete_announcement | 1 つのアナウンスを削除する | confirm |
delete_announcements | ID で複数のアナウンスを削除する | confirm |
delete_announcements_matching | フィルタに一致するアナウンスを削除する | confirm |
モジュール
ツール | 目的 | confirm |
list_modules | コースのモジュールを一覧表示する | |
list_module_items | モジュール内の項目を一覧表示する | |
create_module | モジュールを作成する | confirm |
update_module | モジュールを更新する | confirm |
delete_module | モジュールを削除する | confirm |
add_module_item | モジュールに項目を追加する | confirm |
update_module_item | モジュール項目を更新する | confirm |
delete_module_item | モジュール項目を削除する | confirm |
ページ
ツール | 目的 | confirm |
list_pages | コースのページを一覧表示する | |
get_page | 1 つのページのメタデータを取得する | |
get_page_content | 1 つのページの本文を取得する | |
get_front_page | コースのフロントページを取得する | |
create_page | ページを作成する | confirm |
edit_page_content | ページの本文を置き換える | confirm |
update_page_settings | ページの設定(タイトル、公開状態、編集権限)を更新する | confirm |
bulk_update_pages | 複数のページに同じ編集を適用する | confirm |
delete_page | ページを削除する | confirm |
ファイル
ツール | 目的 | confirm |
list_files | コースのファイルを一覧表示する | |
read_file | テキストファイルの内容を読み取る | |
download_file | ファイルをディスクにダウンロードする | |
upload_file | コースにファイルをアップロードする | confirm |
メッセージング
ツール | 目的 | confirm |
list_conversations | Canvas Inbox の会話を一覧表示する | |
get_conversation | 1 つの会話のメッセージを取得する | |
get_unread_count | 未読メッセージ数を取得する | |
mark_conversations_read | 会話を既読としてマークする | confirm |
send_conversation | 新しいメッセージを送信する | confirm |
send_bulk_messages | 同じメッセージを複数の受信者に送信する | confirm |
ピアレビュー
ツール | 目的 | 確認 |
list_peer_reviews | 課題のピアレビュー割り当てを一覧表示する | |
assign_peer_review | ピアレビューを割り当てる | confirm |
get_peer_review_assignments | 誰が誰をレビューしているかを一覧表示する | |
get_peer_review_completion_analytics | ピアレビューの完了率を要約する | |
get_peer_review_followup_list | まだピアレビューを提出していない学生を一覧表示する | |
get_peer_review_comments | ピアレビューに残されたコメントを取得する | |
analyze_peer_review_quality | ピアレビューのフィードバックを深さと有用性で評価する | |
identify_problematic_peer_reviews | 低品質または未提出のピアレビューをフラグ付けする | |
generate_peer_review_report | ピアレビュー活動の要約レポートを作成する | |
generate_peer_review_feedback_report | ピアレビュー全体のフィードバック内容のレポートを作成する | |
extract_peer_review_dataset | 分析用にピアレビューデータをエクスポートする | |
message_peer_reviewers | 学生にピアレビュー割り当てについてメッセージを送る | confirm |
send_peer_review_followups | 未完了のピアレビューがある学生にリマインダーを送る | confirm |
人とプライバシー
ツール | 目的 | 確認 |
list_users | コースに登録されているユーザーを一覧表示する | |
list_groups | コースのグループを一覧表示する | |
check_enrollment | コースにおける1人のユーザーの登録状況を確認する | |
export_anonymization_map | 仮名と実名の対応関係をエクスポートする | confirm |
get_privacy_status | 匿名化が有効かどうかを表示する |
アクセシビリティ
ツール | 目的 | 確認 |
scan_course_content_accessibility | コースのページとファイルをアクセシビリティの問題についてスキャンする | |
fix_accessibility_issues | 検出されたアクセシビリティの問題に修正を適用する | confirm |
fetch_ufixit_report | 既存のUFIXITアクセシビリティレポートを取得する | |
parse_ufixit_violations | UFIXITレポートから違反を解析する | |
format_accessibility_summary | アクセシビリティスキャンを読みやすい要約に整形する |
コースコピー
ツール | 目的 | 確認 |
create_content_migration | コースコンテンツの移行/コピーを開始する | confirm |
get_content_migration_status | コンテンツ移行の進捗を確認する |
メタ
ツール | 目的 | 確認 |
search_tools | 利用可能なツールをキーワードで検索する |
設定
すべての設定は環境変数から取得され、リポジトリルートの.envファイルから読み込まれます。
変数 | 必須 | デフォルト | 目的 |
| はい | Canvasホスト。例: | |
| はい | Canvasの個人アクセストークン。 | |
| いいえ |
| HTTPリクエストのタイムアウト(秒)。 |
| いいえ |
| コース解決結果がキャッシュされる時間(秒)。 |
| いいえ |
| Canvasへの最大同時リクエスト数。 |
| いいえ |
| ツール出力で学生名を安定した仮名に置き換えます。 |
| いいえ | システム一時ディレクトリ |
|
canvaslms-api --configを実行すると、トークンをマスクした状態で解決済みの設定が表示されます。
開発
開発用エクストラをインストール:
uv pip install -e ".[dev]"テストを実行:
pytestLint:
ruff check .CIはプッシュのたびにテストとLintを実行します。Dockerイメージも利用可能で、そのエントリポイントはcanvaslms-apiです。
開発中に役立つCLIフラグ: canvaslms-api --list-toolsは登録済みのすべてのツール名を表示し、canvaslms-api --configは解決済みの設定を表示し、canvaslms-api --versionはインストール済みのバージョンを表示します。
セキュリティに関する注意事項
Canvasトークンはローカルに保持されます。起動時に
.envから読み込まれ、設定したCanvas APIの呼び出しにのみ使用されます。トークンがログに記録されることはありません。
--configとget_privacy_statusはトークンをマスクします。書き込みツールはプレビューの後に明示的な
confirm=trueが必要です。Canvasで誤って変更が発生することはありません。download_fileは宛先パスに既存のファイルがある場合、上書きしません。
ライセンス
MIT。LICENSEを参照してください。
This server cannot be installed
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
- AlicenseCqualityAmaintenanceLocal-first MCP server for Canvas LMS. Stdio transport, no third-party broker, token stays in ~/.canvas.env. Exposes courses, assignments, modules, announcements, grades, planner items, upcoming events, todo list, and bulk file dump as MCP tools.104MIT
- AlicenseBqualityAmaintenanceMCP server for Canvas LMS, providing 115+ tools to read courses, assignments, submissions, rubrics, quizzes; grade, comment, manage course content, and handle Canvas admin workflows from any AI agent.241639955MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.59MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Canvas LMS that exposes courses, assignments, modules, pages, files, grades, and submissions as tools for AI agents.
Related MCP Connectors
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
An MCP server that gives your AI access to the source code and docs of all public github repos
Connect AI agents to Flato's editable canvas runtime through a hosted MCP server.
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/harryx2011-boop/CanvasLMS-API'
If you have feedback or need assistance with the MCP directory API, please join our Discord server