Jaipuria Moodle Reports MCP
Jaipuria Moodle Reports MCP
教員向け・読み取り専用のModel Context Protocol(MCP)サーバーで、Jaipuriaの
student-report-system データを平易な言葉で照会できるようにします。任意のMCPホスト(ダッシュボード、
Claude.ai、ChatGPT、Claude CLI)に接続して、学生の成績、出席、科目、コホート分析、
長期的傾向、リスクのある学生、レポートの正確性について質問できます。取り込まれたすべての学生が、
呼び出し元のキャンパスにスコープされます。
稼働中: https://moodle-mcp-f6do.onrender.com/mcp · ヘルス: /health · ツール: 27
リポジトリ: github.com/mansigambhir-1313/Moodle-MCP · 所有者: Jaipuria AI Labs
概要
moodle-agent のパイプラインは、Moodleデータを取り込み、分析を計算し、
検証済みの学生レポートをSupabaseプロジェクトに生成します。このMCPは、教員とプログラムオフィス向けの
そのプロジェクトの読み取り側です。生データとパイプラインの出力を、ホストLLMがルーティングする
約27の構造化された自動承認可能なツールとして公開します。
これはデータファーストです。主要な表面は生の成績表と出席(レポートの有無にかかわらずすべての学生に対して 照会可能)であり、生成されたレポートとその2スキームの正確性スコアは二次レイヤーです。永久に読み取り専用です。 書き込み、取り込み、メール送信を行うツールはありません。
設計の系譜: Rehearsal MCP のパターン (境界付きキャッシュ、ルーティング契約のdocstring、応答予算、シークレットの除去、グレースフルデグラデーション)を、 そのサーバーの学生ごとのRLSモデルから、ロールベースでキャンパススコープの教員モデルに適応させたものです。
位置づけ
上流: 共有の
student-report-systemSupabaseプロジェクト(テーブルstudents、courses、enrolments、marks、attendance_sessions、student_reports、report_accuracy)、moodle-agentによって書き込まれます。下流: 任意のMCPホスト — 教員ダッシュボード、Claude.ai / ChatGPTコネクタ、Claude CLI。
Related MCP server: VortexIQ MCP Connector
独自性
スナップショットだけでなく長期的 — 1回の実行で全学期(T1–T6)を保持します。
student_trajectoryやdeclining_studentsのようなツールは、学期ごとに低下する学生を捉えます。これは一時点のクエリでは決して表示されません。シングルペインビュー —
student_360とcohort_pulseは、1回の呼び出しで学生全体/コホート全体を返し、 ダッシュボードのドロワーやランディング画面にそのまま使えます。正確性を第一級のデータとして — 生成されたすべてのレポートには、2スキームの検証スコア (忠実性パネル + 2ターンLLMジャッジ)が付いています。「どのレポートがフラグされ、なぜか」 と尋ねられます。
教育とカリキュラムのシグナル —
section_compare(A対Bの公平性)、assessment_breakdown(小テスト vs 課題 vs プロジェクト)、subject_difficulty(カリキュラムの圧力ポイント)。
ツール(27)
すべてのツールは SELECT のみで、呼び出し元のトークンにキャンパススコープされ、境界があり、
WHAT / USE WHEN / DO NOT USE / RETURNS のルーティングdocstringを備えています。
学生 — 生データ(主要)
ツール | 返す内容 |
| キャンパス/バッチ(±セクション)の名簿、取り込まれたすべての学生 |
| 1人の学生の完全な記録 — 科目別コンポーネントの成績 + 出席 |
| 学生のフラットなコンポーネントレベルの成績表行 |
| 学生の科目別出席(出席 / セッション / %) |
科目 — 生データ(主要)
ツール | 返す内容 |
| スコープ内の科目/コース、学期、セクション、登録数を含む |
| 科目のコホート成績、合格率、出席、コンポーネント別平均 |
| セクション間の平均 + ばらつき(教育/採点のシグナル) |
| 評価種別(小テスト/課題/プロジェクト…)によるコホートパフォーマンス |
| 科目を難しい順にランク付け(合格率 + ゼロ) |
インサイト — 長期的 & シングルペイン(ヒーロー)
ツール | 返す内容 |
| 学生の学期間の成績/出席の傾向 + ラベル |
| 1回の呼び出しで学生ビュー: パーセンタイル順位、傾向、リスクフラグ、正確性 |
| 1回の呼び出しでコホートKPI: 成績、出席、合格率、リスク、分布 |
| 自動介入リスト — 理由 + 推奨アクション、ランク付け |
| コホート全体で学期間の成績低下が最も大きい学生(早期警告) |
分析 & リスク(主要)
ツール | 返す内容 |
| コホート成績スナップショット — 平均、合格率、分布、ゼロ |
| コホート出席 — 平均、75% / 65% 未満の数 |
| スコープ内で総合成績が最も高い学生 |
| バッチのキャンパス間平均 |
| 複合リスクランキング(ゼロ + 出席 + 不合格の成績) |
| 出席しきい値を下回る学生 |
| 記録されたゼロがある学生(最も緊急) |
レポート & 正確性(二次)
ツール | 返す内容 |
| 1つのレポートの2スキーム正確性スコア + 解釈 |
| コホート正確性 — 平均%、検証済み / ドリフト / フラグ |
| 人間によるレビューキュー(検証でフラグされたレポート) |
| 学生向けに生成されたナラティブレポート |
| スコープ内の準備完了 / 保留 / 失敗の数 |
| 呼び出し元のプリンシパルと許可されたキャンパス |
フェーズ3のアイデア(attendance_eligibility、attendance_marks_link、anomalies、roster_health)については、
docs/INNOVATION_ROADMAP.md を参照してください。
クイックスタート
ホストを接続(デプロイ済みサーバー)
claude mcp add moodle --transport http https://moodle-mcp-f6do.onrender.com/mcp \
--header "Authorization: Bearer <your MCP_TOKENS value>"次に、平易な言葉で尋ねます:
「ジャイプール 2024-26 のコホートパルス」 · 「誰が低下しているか」 · 「ウォッチリストを作成」 · 「JJ24PG001 の完全な記録を表示」 · 「最も難しい科目」 · 「ウェルスマネジメントのセクションを比較」
ローカルで実行
cd moodle-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # fill in the vars below
uvicorn server:app --port 8899
curl localhost:8899/health # {"status":"ok",...}スモークテスト(実際のMCPハンドシェイク + ライブクエリ)
MCP_URL="http://localhost:8899/mcp" MCP_TOKEN="<a token>" python test_client.py設定
config.py(pydantic-settings、.env + 環境変数を読み取ります)。validate_config() は、
Supabase変数に対するフェイルクローズの起動チェックです。
変数 | 説明 | 取得先 |
| レポートプロジェクトのURL( | Supabase → Settings → API |
| 読み取りサービスキー(サーバー側のみ、決して公開しない) | Supabase → Settings → API · |
| 教員トークン → | あなたが生成します |
| 全キャンパス対応の緊急用トークン( | あなたが生成します |
| レポートリンクのベース(デフォルト | — |
| このサービスの公開URL(オプション) | Renderダッシュボード |
すべてのログはstderrに出力されます。ログ行にトークン内容やPIIが含まれることはありません。
アクセスモデル(ロールベース、キャンパススコープ)
学生MCP(ユーザーごとのRLS)とは異なり、これは自分のキャンパスの機関データを見る教員向けです。
ベアラートークンは、許可されたキャンパスセットを持つプリンシパルにマッピングされます。すべてのツールは、
要求されたキャンパスをそのセットと交差させます。許可されていないキャンパスは {"found": false} を返します —
データ漏洩はありません。
キャンパスごとのトークンブロックを生成:
python3 -c "import secrets; print('mcp_'+secrets.token_urlsafe(24))" # one per faculty// MCP_TOKENS (single-line JSON in the env var)
{
"mcp_...indore": {"name": "Indore TNP", "campuses": ["indore"]},
"mcp_...office": {"name": "Programme Office", "campuses": null} // null = all campuses
}Supabaseのサービスロールキーはサーバー側に留まり、ホストに渡されることはありません。コードベースに書き込みパスはありません。
アーキテクチャ
MCP host (dashboard / Claude / ChatGPT)
│ MCP over HTTP + Bearer <faculty token>
▼
server.py (FastMCP /mcp, /health)
get_authenticated_service() → verify token → MoodleService(allowed_campuses)
│
tools/* (6 modules, 27 tools) — each: Params model + _impl(svc,…) + register()
│ every query .in_("campus", allowed) ; strip_secrets ; response budgets
▼
Supabase (read service role) — students · courses · enrolments · marks ·
attendance_sessions · student_reports · report_accuracy完全な設計: docs/ARCHITECTURE.md。
主要ファイル
パス | 目的 |
| FastMCPアプリ、 |
| 設定 + |
| 読み取り専用の |
| 共有ヘルパー: |
| 主要データツール |
| コホートロールアップ |
| 二次レポートレイヤー |
| TTLキャッシュ、予算/スコープ、ツールヒント |
| エンドツーエンドのMCPクライアントスモークテスト |
キャッシュ(OOMセーフ — 境界付き TTLCache のみ)
_run_cache(スコープごとの最新の最終実行)、_rollup_cache / _marks_cache(コホート生データの
ロールアップ)。コホートツールはPostgRESTの1000行上限をページングし、結果を5分間キャッシュします。
デプロイ
Render(
render.yamlブループリントまたはDocker): Python 3.12 / Docker、uvicorn server:app、 ヘルスチェック/health。ダッシュボードでSUPABASE_URL、SUPABASE_SERVICE_ROLE_KEY、MCP_TOKENSを設定します。Docker:
docker build -t moodle-mcp . && docker run -p 8000:8000 --env-file .env moodle-mcp現在の本番はFreeインスタンス(約15分のアイドル後にスピンダウン → 約50秒のコールドスタート)。 常時稼働にはStarterにアップグレードしてください。
環境 | URL | 注記 |
本番 |
| Freeインスタンス、 |
ローカル |
|
|
完全なテスト/デプロイ手順: DEPLOY.md。
ランブック
アクセストークンのローテーション — MCP_TOKENS を再生成し(同じジェネレーター)、Renderの環境変数を更新します。
サービスが再起動し、古いトークンは機能しなくなります。新しいトークンを教員に再発行します。
キャンパス単位の教員を追加する — MCP_TOKENS に "mcp_...": {"name": "...", "campuses": ["<campus>"]} エントリを1件追加し、再デプロイして、そのトークンを本人に渡します。
新しいツールを追加する — docs/ARCHITECTURE.md §11 に従います。Params モデル + _impl(svc,…) + register() を追加し、すべてのクエリをキャンパススコープにし、strip_secrets を適用し、ルーティングの docstring を書き、server.py に登録します。tools/common.py の生データヘルパーを再利用します。
コールドスタート / 最初のリクエストが遅い — Free インスタンスがアイドル状態から起動したためです(約50秒)。curl <url>/health でウォームアップするか、インスタンスをアップグレードしてください。
デプロイを検証する — curl <url>/health を実行し、次に
MCP_URL="<url>/mcp" MCP_TOKEN="<token>" python test_client.py を実行します。
安全性の不変条件
常に読み取り専用 · すべてのクエリをキャンパススコープに · 見つからない場合は一律 {"found": false} を返す(存在を推測できるオラクルにしない) · シークレットの除去(実行ID / ストレージキー / ハッシュ / メールはサーバーから外部に出さない) · サービスロールキーはサーバー側のみ · レスポンス予算 + ページング · グレースフルデグラデーション(ターンを500で終了させない) · キャッシュは有界のみ(OOM安全)。詳細は docs/ARCHITECTURE.md §3、§11 を参照。
This server cannot be installed
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 gradedqualityBmaintenanceEnables querying your team's work (stats, overdue, workload, active members, etc.) via natural language, scoped to your department with read-only signed-token access.46MIT
- AlicenseNot gradedqualityCmaintenanceEnables read-only access to VortexIQ ecommerce AI data, including store audits, KPIs, alerts, brand DNA, and reports, through natural language queries.MIT
- FlicenseNot gradedqualityBmaintenanceEnables querying of live organizational data (student records, outcomes, certifications, finances, donations, communications) via Claude using structured database queries and semantic search.
- FlicenseNot gradedqualityCmaintenanceProvides tools for querying student academic data such as subjects, marks, performance reports, timetable, exams, fees, events, holidays, and assignments via natural language.
Related MCP Connectors
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Ask your app anything — revenue, errors, read-cost, growth — and get rendered charts back.
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/mansigambhir-1313/Moodle-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server