moodle-mcp について
moodle-mcp は Moodle 3.7〜5.x を操作するエージェント向けの MCP サーバーです。型付きツールでコース資料、課題、ファイル、提出を扱い、文書変換と書き込み操作の確認にも対応します。
主な機能
- 01コース、予定、フォーラムの閲覧
- 02課題と添付ファイルの取得
- 03PDF と HTML の読みやすいテキストへの変換
- 04ファイルのアップロードと課題の提出
- 05実行前の書き込み操作の確認
- 06オプションでの Web サービス関数へのアクセス
活用シーン
- 01今後のコース課題の締切を確認
- 02課題の説明と PDF を読む
- 03コース資料を基に学習計画を作成
- 04課題の下書きをアップロードして提出
MCP 対応
Moodle の操作を型付きツールとして MCP クライアントに公開し、結果の ID を後続の呼び出しに利用できます。オプションを有効にすると、Moodle の Web サービス関数にもアクセスできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
英語 | 繁體中文 | 简体中文 | 日本語 | Español | Deutsch | Português | Français
Model Context Protocol サーバーです。LLM エージェントが単一の静的バイナリを通じて、実際の Moodle LMS を利用できます。コースの閲覧、課題の PDF の取得、コードの作成、アップロードや提出が可能です。
mcp-name: io.github.G36maid/moodle-mcp
公式 MCP SDK(rmcp)を使って Rust で構築されています。Moodle 3.7、4.5、5.2 で実際に動作することを検証済みで、3.7 → 5.x 向けに設計されています。
✅ その理由
一般的なチャットボットは Moodle にアクセスできないため、学習作業はすべて手作業のままです。「今週の締め切りは?」に答えるためにブラウザーのタブを5つ開き、PDFを手動で再アップロードし、フォーラムや成績をページごとにコピー&ペーストする必要があります。
moodle-mcp は、エージェントをあなたのアカウントで Moodle にログインさせます。20種類の型付きツールが学生の学習全般をカバーし、エージェントはブラウザーを開くことなく、ツールを自動で連携させます。
- 必要な機能をすべて搭載 — ドキュメント変換、HTML から Markdown への変換、認証 CLI、オプトイン方式のエスケープハッチを単一のバイナリに収録。プラグイン、補助スクリプト、別のランタイムは不要です
- エージェント向けに設計 — ツールは base64 ではなくローカルのファイルパスを受け取り、返します。すべての結果に次の呼び出しに必要な ID が含まれ、エラーは平易な言葉で修正方法を提案します
- デフォルトで安全 — 書き込みツールは事前に確認を求め、提出物は指示があるまで下書きのままです。クイズへの回答機能は意図的に提供していません
- バージョンに適応 — Moodle 3.7 で検証済み、4.x/5.x 向けに設計されています。バージョン間のレスポンスの違いは自動的に吸収されます
- 単一の静的バイナリ — ランタイム依存関係はありません
🚀 クイックスタート
モバイルアプリのウェブサービスを許可しているサイトの Moodle 3.7 → 5.x アカウントが必要です(ほとんどのサイトで許可されています。詳しくは 前提条件をご覧ください)。
# 1. Install
cargo install moodle-mcp # or a prebuilt binary / one-click .mcpb — no Rust needed
# 2. Log in once — prints MOODLE_URL and MOODLE_TOKEN
moodle-mcp auth
# 3. Connect your client (Claude Code shown; Codex/OpenCode/pi below)
claude mcp add moodle \
--env MOODLE_URL=https://moodle.example.com \
--env MOODLE_TOKEN=your-token \
-- /path/to/moodle-mcp
# 4. Open a chat and ask:
# "What's due in the next two weeks? Plan my studying around it."
または、これをエージェントに貼り付けて、すべての手順を実行させてください(エージェントはターミナルで moodle-mcp auth を開きます。そこで学校の認証情報を入力してください)。
Set up moodle-mcp (github.com/G36maid/moodle-mcp): read docs/src/installation.md
and docs/src/configuration.md from the repo's main branch first. Then install
the binary for my platform, run `moodle-mcp auth` in the terminal so I can
type my school credentials when it prompts, and register the server in your
own MCP config using the snippet for your harness. Never store or repeat my
credentials; ask before anything global.
ビルド済みバイナリ、SSO ログイン、各クライアント向けの設定スニペット、環境変数の完全なリファレンス: インストール · はじめに · 設定
💬 エージェントにできること
追加の設定は不要です。エージェントはツールの説明からツールを見つけ、自ら連携して実行します。
| あなたの指示 | エージェントが連携して実行する内容 |
|---|---|
| 「Information Security の HW1 を仕上げてください。課題の説明と添付 PDF を読み、問題を解き、下書きを提出してください。」 | get_assignment(課題の説明と添付ファイル)→ fetch_file(PDF → 数式を含む Markdown)→ 解答 → 解答ファイルを作成 → upload_file → submit_assignment → get_assignment(提出済みか確認 ✓) |
| 「今後の締め切りとコース教材に基づいて、次の 2 週間の学習計画を作成してください。」 | get_schedule(すべての締め切り)→ コースごとに get_course_overview → 締め切りを考慮した日ごとの計画 |
| 「今週の Data Communication で何があったのか見逃しました。お知らせフォーラムも含めて教えてください。」 | get_notifications + get_forum_discussions → get_discussion_posts → 週ごとの要約を作成 |
| 「Software Engineering の小テストに備えたいです。先生は小テストについて何を投稿しましたか?」 | get_course_overview(小テストの項目)→ get_assignment(要件)→ 関連するフォーラムのスレッド |
🔄 エージェントの仕組み
ツールは Moodle の操作方法を反映しており、各階層の出力には次の階層で使う ID が含まれています。
flowchart TD
Q["💬 prompt (intent only)"] --> LC["list_courses(search?)<br/>find the course"]
LC --> OV["get_course_overview(course_id)<br/>markdown map: sections · files ·<br/>assignments · quizzes · forums · grades"]
OV --> FD["get_forum_discussions(forum_id)<br/>→ get_discussion_posts(discussion_id)"]
OV --> AS["get_assignment(assignment_id)<br/>brief · attachments · submission · grade"]
AS --> FF["fetch_file(url)<br/>assignment PDF → readable markdown"]
FF --> WK["agent works:<br/>answers · code · report on disk"]
WK --> UP["upload_file(path, filename)<br/>solution → draft area → item_id"]
UP --> SB["submit_assignment(assignment_id, item_id?, finalize?)<br/>save draft or turn in"]
SB --> VF["get_assignment<br/>verify: submitted ✓ files ✓"]
OV --> SC["get_schedule(time window)<br/>deadlines → study plan"]
OV --> GR["get_grades(course_id)<br/>graded items + feedback"]
専用ツールで扱えない内容には、call_ws_function と list_ws_functions のエスケープハッチからアクセスできます。一般的なトークンが呼び出せる約 350 個の関数を網羅します(合計 20 + 2 = 22 個です。エスケープハッチの利用は MOODLE_ENABLE_WS_FUNCTION=true でオプトインします)。
📚 ドキュメント
詳しいドキュメントは moodle.ntnu.cc/docs にあります(mdBook。ローカルで読むには mdbook serve docs を実行してください)。
| ページ | 内容 |
|---|---|
| はじめに | ゼロから最初のプロンプトまで。MCP の経験は不要です |
| インストール | ビルド済みバイナリ、cargo、ソースからのインストール |
| 設定 | すべての環境変数。Claude Code、Codex、OpenCode、pi の設定例 |
| ツール | 22 個のツールの詳細と、ツール間での ID の流れ |
| セキュリティと認証 | トークンのライフサイクル、トランスポート、書き込み時の安全性 |
| 変更履歴 | バージョンごとのリリースノート |
| 開発 | アーキテクチャの概要、テスト、リリースプロセス |
| 概要 | moodle-mcp、MCP、Moodle について |
🧰 開発
cargo test # unit + wiremock integration + MCP protocol tests
cargo clippy --all-targets
cargo fmt -- --check
cargo build --release
プロジェクトのドキュメントは docs/ にあります。Prettier で整形された mdBook 形式です(docs/README.md を参照)。mdbook serve docs でプレビューできます。
ランディングページは site/ にあります。Astro 7 + TypeScript を使用しています(cd site && npm install && npm run dev で実行し、npm run build でビルドできます)。
🔐 セキュリティ
HTTPS を使用してください。トークンはすべてのリクエストに含まれます。ツールの出力やエラーに表示されることはなく、同一サイトの Moodle URL にのみ挿入されます。また、書き込みツールは実行前に確認を求めます。詳しくはセキュリティと認証をご覧ください。
📄 ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。