codex_canvas_mcp
Codex Canvas MCP
互換性のあるクライアントがCanvasを読み取り、複数の独立した安全チェックを経た後にのみ一般的なコースコンテンツを作成できる、ポータブルなローカルMCPサーバーです。
安全モデル
Canvasの読み取りは、ローカル認証情報の設定後、デフォルトで利用可能です。
書き込みはデフォルトで無効です。
すべてのコンテンツ書き込みには、有効なローカルポリシー、コースごとの正確な許可リスト一致、正確な確認テキスト、およびMCPクライアントでの承認が必要です。
画像アップロードにはペイロードゲートが追加されます。設定された信頼済みフォルダ内にあるローカル所有のPNG、JPEG、またはWebPのみ、10 MiB以下で送信できます。
汎用的なCanvas書き込みツールはありません。
認証情報は1Password、およびオプションでmacOSキーチェーンに保持されます。このリポジトリやクライアント設定には含めないでください。
すべてのコンテンツツールは、互換性のあるクライアントが承認を要求できるように、変更および破壊的としてマークされています。ローカルサーバーはまた、要求されたアクションと正確な確認が一致しない限り呼び出しを拒否します。例: APPROVE CANVAS MODULE WRITE course <course_id>。
ルーブリック作成は、同一オリジンのCanvas課題URL、課題モジュール項目URL、またはassignment_idクエリパラメータを含むコースURLを受け入れます。コースと課題が解決された後、クエリ文字列とフラグメントは無視されます。URLがコースポリシーをバイパスすることはありません。そのコースIDは明示的に許可リストに登録されている必要があり、ルーブリック作成にはAPPROVE CANVAS RUBRIC WRITE course <course_id>が必要です。このツールは既存の課題ルーブリックの置き換えを拒否し、すべての基準と評価に説明を要求し、採点ルーブリックのポイントが課題のポイントと一致することを要求します。
Related MCP server: CoursePack Local MCP Server
含まれるもの
ツール | 機能 | デフォルト |
| 認証済みプロファイルを読み取る | 利用可能 |
| 1つのコースのモジュールと項目を読み取る | 利用可能 |
| 正規化されたCanvas API v1パスをGETする | 利用可能 |
| ローカルポリシーの状態を検査する | 利用可能 |
| 設定された信頼済みフォルダから検証済み画像を1つアップロードする | ブロック済み |
| 1つのページを作成または更新する | ブロック済み |
| 1つのモジュールを作成する | ブロック済み |
| モジュールに1つのコンテンツ項目を配置する | ブロック済み |
| 1つの課題を作成する | ブロック済み |
| Canvas URLから1つの課題ルーブリックを作成して添付する | ブロック済み |
| 1つのディスカッションを作成する | ブロック済み |
| 1つのクラシッククイズを作成する | ブロック済み |
| クラシッククイズに1つの質問を追加する | ブロック済み |
| 1つのページを削除する | ブロック済み |
| 1つの課題を削除する | ブロック済み |
| 1つのディスカッションを削除する | ブロック済み |
| 1つのクラシッククイズを削除する | ブロック済み |
| 1つのモジュールとその項目配置を削除する | ブロック済み |
新しいMacのセットアップ
前提条件: Python 3.11以降、1Password CLI、意図したCanvas認証情報項目のみを読み取れる1Passwordサービスアカウント、および作業に実用的な最小限の権限を持つCanvas APIトークン。
クローンして分離された環境にインストールします:
git clone https://github.com/mrchris-ai/codex_canvas_mcp.git cd codex_canvas_mcp python3 -m venv .venv . .venv/bin/activate python -m pip install --upgrade pip python -m pip install -e .隠しフィールドにCanvas APIトークンを含む1Password項目を作成します。サービスアカウントに、含まれるボールト/項目への読み取りアクセスのみを付与します。ボールト名、項目名またはID、隠しフィールドのラベルを記録します。それらの値をこのリポジトリに置かないでください。
サービスアカウントトークンの配信方法を1つ選択します:
短命のシェルセッションの場合、ローカルのシークレットランチャーを通じてMCPサーバープロセスに
OP_SERVICE_ACCOUNT_TOKENを提供します。macOSでは、そのトークンをキーチェーンに保存し、非秘密の検索ラベルを設定します。コマンド例(安全にプロンプトが表示されます。トークンをコマンドラインに置かないでください):
security add-generic-password -U -s "your-service-label" -a "your-account-label" -w
サーバープロセスをこれらの非秘密の値で設定します:
変数
目的
CANVAS_BASE_URLCanvas HTTPSオリジン。例:
https://school.instructure.comCANVAS_OP_VAULT1Passwordボールト名またはID
CANVAS_OP_ITEMCanvas認証情報項目名またはID
CANVAS_OP_FIELD隠しトークンフィールドのラベル。デフォルトは
credentialCANVAS_KEYCHAIN_SERVICEOP_SERVICE_ACCOUNT_TOKENを使用しない場合のmacOSキーチェーンサービスラベルCANVAS_KEYCHAIN_ACCOUNTOP_SERVICE_ACCOUNT_TOKENを使用しない場合のmacOSキーチェーンアカウントラベルCANVAS_IMAGE_UPLOAD_ROOT画像アップロードが許可される唯一のローカルフォルダへの絶対パス
Canvasに接続したり認証情報を読み取ったりせずに、プロトコルとセキュリティゲートのみをテストします:
python -m unittest discover -s tests -v printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | python -m canvas_mcpstdioサーバーをCodexに追加します。プロジェクトレベルの形式は次のとおりです:
[mcp_servers.canvas] command = "/absolute/path/to/codex_canvas_mcp/.venv/bin/python" args = ["-m", "canvas_mcp"] [mcp_servers.canvas.env] CANVAS_BASE_URL = "https://school.instructure.com" CANVAS_OP_VAULT = "your-vault" CANVAS_OP_ITEM = "your-item" CANVAS_OP_FIELD = "credential" CANVAS_KEYCHAIN_SERVICE = "your-service-label" CANVAS_KEYCHAIN_ACCOUNT = "your-account-label" CANVAS_IMAGE_UPLOAD_ROOT = "/absolute/path/to/reviewed/canvas-images"これを信頼済みプロジェクトの
.codex/config.tomlまたは個人のCodex設定に配置します。シークレット値を追加しないでください。MCP設定を変更した後、再起動するか新しいタスクを開き、Canvasデータを要求する前にリストされたツールを確認します。
ChatGPT互換性
このリポジトリは、Codexおよびローカルstdio MCPをサポートする他のクライアント向けのローカルstdio MCPサーバーを実装しています。現在のChatGPTカスタムアプリは、ローカルstdioサーバーに直接接続しません。OpenAIの現在のガイダンスは、Secure MCP Tunnelを通じてプライベートなローカルMCPを公開するか(またはレビュー済みのリモートMCPエンドポイントをデプロイする)ことです。プランとワークスペース管理者の可用性に応じて異なります。このプロセスをパブリックインターネットに直接公開しないでください。
ChatGPTのセットアップを試みる前に、ChatGPTの開発者モードとMCPアプリを参照してください。可用性と承認の動作は変更される可能性があります。
コンテンツ作成ツールの有効化
特定のタスクで必要でない限り、書き込みをオフにしておいてください。
config/write-policy.example.jsonをリポジトリ外の場所にコピーします。コンテンツ作成が承認された正確なCanvasコースIDのみを追加します。
enabledをtrueに設定し、ファイルを制限します:chmod 600 /absolute/private/path/write-policy.jsonMCPサーバー環境に
CANVAS_WRITE_POLICY=/absolute/private/path/write-policy.jsonを追加します。クライアントを再起動し、
canvas_get_write_policyを呼び出して有効なポリシーを確認します。各コンテンツ書き込みについて、正確なターゲットとペイロードを確認します。アクション固有の確認フレーズを提供し、クライアントで変更アクションを承認します。
タスクが完了したら、ポリシーを再度無効にします。
変数が存在しない、ファイルが存在しない、権限が0600より広い、書き込みが無効、またはコースが許可リストにない場合、サーバーは書き込みを拒否します。
画像アップロードの有効化
画像アップロードは、同じローカル書き込みポリシーと正確なコース許可リストに加えて、CANVAS_IMAGE_UPLOAD_ROOTを使用します。このツールは、相対パス、シンボリックリンク、そのルート外のファイル、現在のユーザーが所有していないファイル、サポートされていない画像タイプ、拡張子とバイナリ署名が一致しないファイル、および10 MiBを超えるファイルを拒否します。正確な確認はAPPROVE CANVAS IMAGE UPLOAD course <course_id>です。
Canvasは文書化された3段階のアップロード交換を使用します: 認証済みAPIを通じてコースファイルを初期化し、Canvasアクセストークンなしで画像をCanvasの返されたHTTPSストレージURLに送信し、返された同一オリジンのCanvas完了場所を認証します。その後、ツールは/api/v1/courses/<course_id>/files/<file_id>を読み取り、MIMEタイプとサイズをチェックしてから、永続的なコースプレビューパスを返します。ストレージ署名やファイルダウンロード検証URLを返すことはありません。
現在の作成境界
このプロジェクトは、このMac上のサポートされているチャットで使用される共有ローカルCanvas MCPのソースオブジェクトトゥルースです。通常のポリシーと承認ゲートを通過した後、Pages、Modulesとモジュール項目、Assignmentsと課題ルーブリック、Discussions、および質問付きのClassic Quizzesを作成できます。また、Pages、Assignments、Discussions、Classic Quizzes、Modules用のリソース固有の削除ツールも提供します。Moduleを削除すると、その項目配置は削除されますが、基になるコースコンテンツは削除されません。その唯一のローカルファイル機能は、上記のペイロードゲート付き画像アップローダーです。汎用ファイルアップロード、New Quizzes、およびアカウント/コース管理は引き続きサポートされていません。
実装とエンドツーエンドの検証記録については、docs/2026-08-06-content-authoring-extension.mdを参照してください。
画像アップロードの脅威モデルと検証記録については、docs/2026-08-16-image-upload-extension.mdを参照してください。
開発
python -m pip install -e .
python -m unittest discover -s tests -v
python -m compileall -q src testsテストはネットワークと認証情報の境界をモックします。貢献者が維持しなければならない不変条件についてはAGENTS.mdを、意図的に延期された管理機能についてはROADMAP.mdを参照してください。
Maintenance
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
- AlicenseNot gradedqualityCmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.19MIT
- FlicenseNot gradedqualityAmaintenanceRead-only MCP server that provides Claude Desktop with access to converted Canvas course exports, including Markdown files, reports, and search tools for local course content.
- AlicenseNot gradedqualityCmaintenanceA remote MCP server for querying Canvas LMS courses, assignments, and grades. Enables natural language interaction with Canvas data via MCP clients like Claude Desktop.19MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Canvas LMS with automatic OAuth authentication. Enables interaction with courses, assignments, grades, modules, discussions, quizzes, files, calendar, messaging, and more without manual API token management.339MIT
Related MCP Connectors
MCP server for the Inistate platform: module discovery, entry management, and activity submission.
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server for deep research or task groups
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/mrchris-ai/codex_canvas_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server