Moodle MCP について
Moodle MCPは、自然言語でMoodleのコース情報を参照する読み取り専用サーバーです。課題、期限、成績、フォーラム、通知を確認したい学生などを対象としています。
主な機能
- 01コースとコース内容の一覧表示
- 02課題の期限と状況の確認
- 03成績とフィードバックの閲覧
- 04フォーラムの議論の閲覧
- 05最近の通知の取得
活用シーン
- 01未提出の課題と期限の確認
- 02提出済み課題と成績の確認
- 03コースのお知らせや議論の検索
MCP 対応
MCPサーバーは、Moodleのサイト、コース、課題、成績、フォーラム、通知を読み取るツールを提供します。ローカルのstdioまたはHTTPサービスとして実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @fabioov/moodle-mcpMCP_TRANSPORTRun over stdio for local clientsMOODLE_URLRoot URL of your Moodle site, e.g. https://moodle.example.eduMOODLE_TOKENシークレットYour Moodle web service token (Preferences > Security keys)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Moodle MCP
Moodle 用のオープンソースの読み取り専用MCP サーバーです。Claude に接続して、課題、締め切り、成績、コース、フォーラム、通知について自然な言葉で質問できます。
Moodle Pty Ltd との提携や同社による推奨を受けていません。「Moodle」はその所有者の商標です。
質問できること
- 「今月中に提出しなければならない課題はどれですか?」
- 「今週の締め切りは何で、すでに提出したものはどれですか?」
- 「機械学習の成績はどうなっていますか?」
- 「コースに新しいお知らせはありますか?」
- 「コンピューターグラフィックスのコースのセクションとアクティビティを表示してください。」
ツール
すべてのツールは読み取り専用で、簡潔で読みやすい出力を返します。
| ツール | 内容 | パラメーター |
|---|---|---|
get_site_info | トークンを検証します。サイト、Moodle のバージョン、現在のユーザーを表示します | – |
list_courses | コースを一覧表示します(デフォルトでは現在のコース) | includePast? |
get_course_contents | コースのセクションとアクティビティを表示します。各モジュールには id と instance があります | courseId |
list_assignments | 提出期限順に課題を一覧表示します | courseId?、upcomingOnly?、limit?(25) |
get_assignment_status | 提出・採点状況、成績、フィードバックのコメントを表示します | assignmentId |
get_upcoming_deadlines | 今後 N 日間のカレンダーイベントと課題を表示します。各課題には submitted または pending のマークが付きます | days?(14)、onlyPending? |
get_grades | コースの成績項目を表示します | courseId |
list_forum_discussions | フォーラムの最近のディスカッションを表示します | forumId(get_course_contents の instance) |
get_notifications | Moodle の最近の通知を表示します | – |
要件
- ウェブサービス/モバイルアプリへのアクセスが有効になっている Moodle サイト(Moodle 4.x。4.5 で開発)。
- ご自身のウェブサービストークン(下記)。所属機関が無効にしている機能を使うツールは、エラーを返します。
- サーバーには Node 20 以降(Wrangler でデプロイする場合は Node 22 以降)、Docker、または無料の Cloudflare アカウントが必要です。
セットアップ
1. Moodle の URL とトークンを取得する
- URL: ページ名や
/webserviceを含まない Moodle のルート URL。例:https://moodle.example.edu(Moodle がサブフォルダーにある場合は、https://example.edu/moodleのように含めてください)。 - トークン: Moodle の Preferences → Security keys にある Moodle mobile web service のキーを確認します。サイトによってはラベルしか表示されません。Reset をクリックすると新しいキーが生成されます(Moodle モバイルアプリからサインアウトされます)。または、Moodle のユーザー名とパスワード(SSO ではないもの)でログインする場合は、次のコマンドで取得してください。
curl -s "$MOODLE_URL/login/token.php" -d username=... --data-urlencode password=... -d service=moodle_mobile_app(パスワードがシェルの履歴に残らないよう、対話形式で入力してください)。
2. 設定する
.env.example を .env にコピーし、MOODLE_URL、MOODLE_TOKEN、MCP_AUTH_SECRET を入力します(後者は openssl rand -hex 24 で生成してください)。.env は Git の追跡対象外です。
3. 実行する(いずれかを選択)
Cloudflare Workers(無料、常時稼働、ドメイン不要): 推奨
npm ci
npx wrangler login
npx wrangler secret put MOODLE_URL # https://your.moodle.edu
npx wrangler secret put MOODLE_TOKEN # your Moodle web service token
npx wrangler secret put MCP_AUTH_SECRET # openssl rand -hex 24
npm run deploy # prints https://moodle-mcp.<you>.workers.dev
Cloudflare の現在の無料プランの制限を確認してください。まずは .env の値を Git の追跡対象外の .dev.vars にコピーし、npm run dev:worker を実行してローカルで試してください。
Docker/Node(セルフホスト)
docker build -t moodle-mcp . && docker run --env-file .env -p 3000:3000 moodle-mcp
# or: npm ci && npm run build && npm start
その後、HTTPS 経由で公開してください(Cloudflare Tunnel や Tailscale Funnel など)。
ローカルのみ(Claude Desktop/Claude Code、stdio): インストールは不要です。
MCP_TRANSPORT=stdio MOODLE_URL=https://your.moodle.edu MOODLE_TOKEN=... npx -y @fabioov/moodle-mcp
このモードでは MCP_AUTH_SECRET は不要です。
4. Claude に追加する
- Claude.ai: Settings → Connectors → Add custom connector。URL
https://<your-host>/mcpを入力し、 No sign-in を選択してから、Add header でAuthorization=Bearer <MCP_AUTH_SECRET>を設定します。 - Claude Code:
claude mcp add --transport http moodle https://<your-host>/mcp --header "Authorization: Bearer <MCP_AUTH_SECRET>" - クライアントに URL しか指定できない場合は、
https://<your-host>/mcp/<MCP_AUTH_SECRET>を使用します。この URL は パスワードと同様に扱ってください。URL はログに残るため、ヘッダーを使用することを推奨します。
セキュリティとプライバシー
- トークンはあなた本人として機能します。エンドポイントを呼び出せる人は誰でも、トークンで読み取り可能なデータを読めます。
MOODLE_TOKENとMCP_AUTH_SECRETは環境変数または Cloudflare のシークレットに保存し、リポジトリには絶対に保存しないでください。 - このサーバーは設計上読み取り専用であり、書き込みツールはありません。
- ツールが返す情報(成績、メッセージ、氏名)は、会話の一部として Claude に送信されます。使用前に、学術データをサードパーティサービスと共有することについて、 所属機関の規則を確認してください。特に、教師などとして他の人のデータにアクセスできる場合は注意してください。
- 脆弱性の報告については、SECURITY.md を参照してください。
既知の制限
- 主に学生アカウントで Moodle 4.5 を対象にテストしています。教師/管理者のロール、その他のバージョンやプラグインは テストされていません。報告やテスト用データの提供を歓迎します。
- サイトによっては個々のウェブサービス機能が無効化されているため、一部のツールが動作しない場合があります。
- コンテキストを節約するため、大量の結果は切り詰められます(例:課題はデフォルトで 25 件)。
開発
npm ci
npm test # unit tests with fixtures (no Moodle needed)
npm run typecheck
npm run dev # HTTP server on :3000 (needs .env)
npm run dev:worker # Cloudflare Worker locally (needs .dev.vars)
CONTRIBUTING.md を参照してください。変更内容は CHANGELOG.md に記載されています。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。