canvas-lms-mcp-server について
複数デバイスの AI アプリから Canvas LMS を利用したい学生向けのリモート MCP サーバーです。209 個のツールに加え、OAuth 2.1 認証と複数コンピューター間のフェイルオーバーを備えています。
主な機能
- 01Canvas 用の 209 個のツール
- 02成績分析と学習計画
- 03プレビュー付き課題提出
- 04コースコンテンツとディスカッション
- 05OAuth 2.1 によるリモートアクセス
- 06複数コンピューター間のフェイルオーバー
活用シーン
- 01成績の確認と必要スコアの計算
- 02未提出課題の確認と週次計画
- 03プレビューを確認してから課題を提出
MCP 対応
Canvas LMS の操作を HTTP または stdio 経由の MCP ツールとして公開します。MCP クライアントは ngrok トンネルと OAuth 2.1 を使ってリモート接続できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y canvas-lms-mcp-remoteCANVAS_API_TOKENシークレットCanvas personal access token (Account > Settings > Approved Integrations > New Access Token)CANVAS_BASE_URLYour school's Canvas address, e.g. https://yourschool.instructure.comローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
209掲載時のツール一覧 · 1 日前に更新
このツールにパラメーターはありません。
詳細
ヒント
自分のコンピューターだけでローカル実行したいですか? 💻 ローカル版 → をご覧ください。同じ209個のツールを利用でき、ngrokもパスワードも不要で、セットアップは約5分です。
🌐 Canvas LMS MCP:リモート版
どのデバイスからでも、ウェブ、デスクトップ、モバイルでAI アシスタントからCanvasを利用できます。常時稼働し、パスワードで保護され、複数のコンピューター間で自動フェイルオーバーします。
209個のツール · OAuth 2.1 · ngrokトンネル · 複数コンピューター間のフェイルオーバー
🤔 リモート版とローカル版、どちらを選ぶ?
| 🌐 リモート(このリポジトリ) | 💻 ローカル | |
|---|---|---|
| 対応環境 | リモートサーバーに対応した任意のMCPクライアント。どのデバイスでも利用可能 | このコンピューター上のデスクトップおよびコマンドラインのMCPクライアント |
| 実行時 | バックグラウンドで常時稼働 | AIアプリが開いている間のみ |
| 必要なもの | Node.js、Canvasトークン、ngrokアカウント、パスワード | Node.js、Canvasトークン |
| インターネットへの公開 | パスワードで保護された公開HTTPSアドレス | なし |
| 複数コンピューター | ✅ 自動フェイルオーバー(ガイド) | 各コンピューターに個別にインストール |
✨ 主な機能
- 📊 成績分析:
what_if_grade、compute_needed_score、grade_impact_ranking、完全な加重内訳 - 📅 計画:
get_week_ahead、semester_snapshot、study_priority_ranking、複数コースの未提出課題を 1 回の呼び出しで確認 - 📝 提出:テキスト、URL、ファイルを提出できます。最初にドライランでプレビューできます
- 💬 ディスカッションと受信トレイ:スレッド全体を 1 回のリクエストで読み込み、教員にメッセージを送信できます
- 📁 コンテンツ:ファイル、ページ、モジュール、講義の字幕、完全な
.imsccコースエクスポート - 🔐 セキュアなリモートアクセス:ngrok トンネル経由のパスワード保護された OAuth 2.1
- 🔁 複数コンピューターでのフェイルオーバー:2 台以上のコンピューターで実行できます。1 台がスリープすると、別のコンピューターが約 1 分で引き継ぎます
🧭 仕組み
Your AI app (web / desktop / mobile / CLI)
│ HTTPS + OAuth
▼
your-domain.ngrok-free.dev ──► supervisor.js ──► index.js (127.0.0.1:3939/mcp) ──► Canvas API
(keeps it alive, (209 tools, OAuth,
failover) rate-limit aware)
🚀 クイックスタート
必要なもの: Node.js 18+、Canvas アカウント、無料の ngrok アカウント。
1. インストール
npm を使用する場合(最も簡単):
npm install -g canvas-lms-mcp-remote
mkdir canvas-mcp
cd canvas-mcp
canvas-lms-mcp-remote init
このフォルダーが設定フォルダーです。.env、ログイン情報、ログが保存されるため、以降の手順はすべてこのフォルダーから実行してください。
またはソースからインストール: git clone https://github.com/Fireiscoolsolo/canvas-lms-mcp-server.git を実行し、フォルダー内で npm install を実行します。git がない場合は、代わりに最新リリースから zip をダウンロードしてください。この場合、リポジトリのフォルダーが設定フォルダーになります。
すべてのコマンド
| コマンド | 説明 |
|---|---|
canvas-lms-mcp-remote init | 現在のフォルダーに .env のテンプレートを作成します |
canvas-lms-mcp-remote | スーパーバイザーを起動します:サーバー、ngrok トンネル、フェイルオーバー |
canvas-lms-mcp-remote serve | 127.0.0.1 で HTTP サーバーのみを起動します(トンネルなし) |
canvas-lms-mcp-remote --stdio | 標準入力/標準出力経由でサービスを提供します。サーバーを検査するディレクトリ向けです |
ソースから実行する場合は、代わりに node supervisor.js と node index.js を使用します。
2. Canvas トークンを作成する
Canvas で Account → Settings → Approved Integrations → + New Access Token に移動します。Canvas でトークンが表示されるのは一度だけなので、すぐにコピーしてください。
3. ngrok を設定する
winget install --id Ngrok.Ngrok -e
ngrok update # the winget version is often too old (ERR_NGROK_121)
ngrok config add-authtoken <your-ngrok-authtoken>
次に、ngrok ダッシュボードで無料の静的ドメインを取得します。例:your-name.ngrok-free.dev。
4. .env を設定する
init で作成された .env を編集します。ソースから実行する場合は、まず .env.example を .env にコピーしてください。次のコマンドでパスワードとシークレットを生成します。
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
5. 動作を確認する
canvas-lms-mcp-remote
ソースから実行する場合は、代わりに node supervisor.js を実行します。
active and serving at https://… と表示されるまで待ってから、Ctrl+C を押します。
6. ログオン時に自動実行する(Windows)
PowerShell で、設定フォルダーから実行します(ソースからインストールした場合はリポジトリのフォルダーから実行します)。
$dir = (Get-Location).Path
$action = New-ScheduledTaskAction -Execute "$dir\run-supervisor.cmd" -WorkingDirectory $dir
$trigger = New-ScheduledTaskTrigger -AtLogOn -User "$env:USERDOMAIN\$env:USERNAME"
$settings = New-ScheduledTaskSettingsSet -RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1) -ExecutionTimeLimit ([TimeSpan]::Zero) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -MultipleInstances IgnoreNew
Register-ScheduledTask -TaskName CanvasSupervisor -Action $action -Trigger $trigger -Settings $settings -Force
Start-ScheduledTask -TaskName CanvasSupervisor
**npm からインストールした場合は、**代わりに次の $action 行を使用します。
$action = New-ScheduledTaskAction -Execute 'cmd.exe' -Argument '/c call "%APPDATA%\npm\canvas-lms-mcp-remote.cmd" >> supervisor.log 2>&1' -WorkingDirectory $dir
run-supervisor.cmd は、Node が C:\Program Files\nodejs\node.exe にあることを前提としています。別の場所にある場合は、このファイルを編集してください。Linux では systemd ユーザーサービスとして実行してください(例)。macOS では、launchd または pm2 の下で node supervisor.js を実行してください。
7. すべてのデバイスで AI アプリを接続する
AI アプリの設定で、URL https://<your-domain>/mcp を指定してカスタムコネクター(リモート MCP サーバーとも呼ばれます)を追加し、パスワードでログインします。コネクターをアカウントに同期するアプリでは、スマートフォンやデスクトップにも表示されます。コマンドラインおよびエディターのクライアントでは、同じ URL を使って HTTP MCP サーバーとして追加できます。
次に、アシスタントに 「Run test_connection.」 と指示します。
🔁 複数のコンピューター
同じサーバーを 2 台以上のコンピューターで実行できます。たとえば、デスクトップとノートパソコンで実行すると、片方がオフまたはスリープ状態でもオンラインを維持できます。1 台がサービスを提供し、ほかのコンピューターはスタンバイ状態で待機して、自動的に引き継ぎます。
➡️ 手順に沿って複数デバイスのセットアップガイドを確認してください。 設定の安全なコピー方法、共有 ngrok アカウント、スケジュールされたタスク、動作確認、フェイルオーバーのテスト、コードの更新、シークレットの変更について説明しています。
⚙️ 設定
すべての設定は .env の環境変数です。.env.example を参照してください。
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
CANVAS_API_TOKEN | ✅ | — | Canvas の個人用アクセストークン |
CANVAS_BASE_URL | ✅ | — | 例:https://yourschool.instructure.com |
CANVAS_MCP_PUBLIC_URL | ✅ | — | ngrok の静的ドメイン |
CANVAS_MCP_PASSWORD | ✅ | — | OAuth ログインページのパスワード |
CANVAS_MCP_CLUSTER_SECRET | ✅ | — | コンピューター間の連携に使われる /internal/* エンドポイントを保護するシークレット |
CANVAS_ALLOW_WRITES | true | false = 読み取り専用モード | |
CANVAS_PROFILE | full | core = 厳選されたツールのサブセット | |
CANVAS_CACHE_TTL | 60 | レスポンスキャッシュの保持時間(秒) | |
CANVAS_TIMEZONE | system | 期限日の計算に使用する IANA タイムゾーン | |
CANVAS_DOWNLOAD_DIR | ./canvas-downloads | ダウンロードツールがファイルを保存する場所 | |
CANVAS_MCP_HOST / _PORT | 127.0.0.1 / 3939 | バインドアドレス | |
CANVAS_MCP_OAUTH_STORE_PATH | ./oauth-store.json | トークンストア | |
CANVAS_MCP_NGROK_PATH | winget path | ngrok.exe へのパス | |
CANVAS_MCP_TRANSPORT | http | stdio(または --stdio フラグ)を指定すると、HTTP ではなく stdin/stdout 経由で提供します。サーバーを検査するディレクトリで使用します。日常的なローカル利用については、ローカル版を参照してください |
🧰 ツール
| グループ | 数 | 主な機能 |
|---|---|---|
| ID | 24 | check_token_expiry、get_rate_limit_status、カスタムデータの保存 |
| コース | 16 | 権限、ニックネーム、お気に入り |
| 課題 | 12 | list_missing_submissions、get_late_policy |
| 提出物 | 16 | テキスト、URL、ファイルの提出、コメント、ルーブリック評価 |
| 成績 | 13 | what_if_grade、compute_needed_score、grade_impact_ranking |
| 小テスト | 12 | 読み取り専用:日程、受験状況、レビュー |
| ディスカッション | 17 | get_full_topic_view、返信、評価 |
| 受信トレイ | 14 | メッセージ、find_recipients、スレッド |
| カレンダー | 11 | イベント、オフィスアワーの予約 |
| コンテンツ | 33 | ファイル、ページ、モジュール、字幕、.imscc のエクスポート |
| グループ | 11 | グループ作業スペース |
| ルーブリック | 11 | ピアレビュー |
| 検索 | 3 | キーワードによるフォールバック機能を備えた smart_search |
| 計画 | 11 | get_week_ahead、semester_snapshot、study_priority_ranking |
| メタ | 4 | 上記にない任意のエンドポイントに対応する raw_canvas_request |
🔐 セキュリティ
- 確認ゲート: 送信、提出、投稿、削除を行うツールは、まずプレビューを返します。
confirm: trueを指定して呼び出した場合にのみ操作します。 - プロンプトインジェクション対策: 他の人が書いたテキストは
<<<CANVAS_CONTENT>>>マーカーで囲み、信頼できない内容として明示します。 - 小テストへの回答なし: 小テストの受験エンドポイントは意図的に含めていません。
- ループバック接続のみ: サーバーは
127.0.0.1で待ち受けます。外部から接続する唯一の方法はトンネル経由です。 - OAuth 2.1: ログイン試行は IP ごとに 15 分あたり 10 回までに制限されます。アクセストークンの有効期間は 1 時間で、リフレッシュトークンは使用するたびに置き換えられます。
- 連携用の個別シークレット: コンピューター間の連携に使うエンドポイントには、別途共有シークレットが必要です。比較は一定時間で行われます。
絶対にコミットしないでください:
.env、oauth-store.json、supervisor.log。これらはすでに.gitignoreに登録されています。SECURITY.md を参照してください。
🎓 責任ある利用
これは学習と整理のためのツールです。締め切りの確認、成績の理解、週の計画作成に役立ちます。小テストへの回答は行わず、プレビューを確認して承認するまで、何も送信または提出されません。
- 学校の学術倫理および利用規定に従ってください。個人用 API トークンやサードパーティ製ツールを制限している学校もあります。
- 変更が誤って行われるリスクをゼロにしたい場合は、読み取り専用モードにするため
CANVAS_ALLOW_WRITES=falseを設定してください。
🛠️ トラブルシューティング
| 症状 | 対処方法 |
|---|---|
ERR_NGROK_121 | ngrok のバージョンが古すぎます。ngrok update を実行してください |
ERR_NGROK_334 … already online | 別のコンピューターまたは残存している ngrok.exe がドメインを使用しています。待機用コンピューターでは正常な動作です |
ERR_NGROK_3200(エンドポイントがオフライン) | サービスを提供しているコンピューターがありません。supervisor.log を確認してください |
| ログイン時に ngrok に「これからアクセスしようとしています…」というページが表示される | 無料プランでは正常です。サイトにアクセスをクリックしてください |
startup probe failed | CANVAS_BASE_URL とインターネット接続を確認してください |
| Canvas が 401 を返す | トークンの有効期限が切れています。新しいトークンを作成してください |
| 新しいツールが表示されない | コネクターを再接続するか、AI アプリを再起動してください |
複数のコンピューターを使用する場合のその他の問題については、マルチデバイスガイドをご覧ください。
適切に再起動してください。 Stop-ScheduledTask だけでは、プロセスが実行中のまま残ることがあります:
Stop-ScheduledTask -TaskName CanvasSupervisor -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object { $_.CommandLine -match 'supervisor\.js|index\.js' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
Get-Process ngrok -ErrorAction SilentlyContinue | Stop-Process -Force
Start-ScheduledTask -TaskName CanvasSupervisor
既知の制限: 学生用トークンでは、管理者用エンドポイント、成績表の履歴、コース分析、クイズの統計情報にアクセスできません。smart_search は Canvas のベータ機能で、404 が返されることがよくあります。
📄 ライセンス
MIT。このプロジェクトは Instructure とは関係ありません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。