Jaipuria Moodle Reports MCP
Jaipuria Moodle Reports MCP
Ориентированный на преподавателей, доступный только для чтения сервер Model Context Protocol (MCP), который делает данные student-report-system Jaipuria доступными для запросов на естественном языке. Подключите его к любому MCP-хосту (дашборду, Claude.ai, ChatGPT, Claude CLI) и спрашивайте об оценках студентов, посещаемости, предметах, аналитике когорт, долгосрочных трендах, студентах группы риска и точности отчетов — по каждому загруженному студенту, с учетом кампусов вызывающего.
Live: https://moodle-mcp-f6do.onrender.com/mcp · Health: /health · Инструменты: 27
Репозиторий: github.com/mansigambhir-1313/Moodle-MCP · Владелец: Jaipuria AI Labs
Обзор
Конвейер в moodle-agent загружает данные Moodle, вычисляет аналитику и генерирует проверенные отчеты о студентах в проект Supabase. Этот MCP — сторона чтения этого проекта для преподавателей и программного офиса: он предоставляет необработанные данные и результаты конвейера в виде ~27 структурированных, автоматически одобряемых инструментов, которые LLM хоста маршрутизирует.
Он ориентирован на данные — основная поверхность — это необработанная журнал оценок и посещаемость (доступны для запросов по каждому студенту, независимо от отчета); сгенерированные отчеты и их оценки точности по двум схемам — вторичный слой. Он только для чтения навсегда: ни один инструмент не пишет, не загружает и не отправляет электронные письма.
Происхождение дизайна: паттерны Rehearsal MCP (ограниченные кэши, docstrings контракта маршрутизации, бюджеты ответов, удаление секретов, корректная деградация), адаптированные от модели RLS для отдельных студентов этого сервера к ролевой модели преподавателя с ограничением по кампусу.
Где это вписывается
Выше по потоку: общий проект Supabase
student-report-system(таблицыstudents,courses,enrolments,marks,attendance_sessions,student_reports,report_accuracy), записываемыйmoodle-agent.Ниже по потоку: любой MCP-хост — дашборд преподавателя, коннекторы Claude.ai / ChatGPT, Claude CLI.
Related MCP server: VortexIQ MCP Connector
Что делает его эксклюзивным
Лонгитюдный, а не только снимок — один запуск содержит каждый триместр (T1–T6). Такие инструменты, как
student_trajectoryиdeclining_students, выявляют студента, скатывающегося от семестра к семестру, чего точечный запрос никогда не покажет.Единые панели —
student_360иcohort_pulseвозвращают целого студента / всю когорту за один вызов, готовые для выдвижного ящика дашборда или стартового экрана.Точность как данные первого класса — каждый сгенерированный отчет несет оценку валидации по двум схемам (панель достоверности + двухходовой LLM-судья). Спрашивайте "какие отчеты помечены и почему?"
Сигналы преподавания и учебной программы —
section_compare(справедливость A-против-B),assessment_breakdown(тест против задания против проекта),subject_difficulty(точки напряжения учебной программы).
Инструменты (27)
Каждый инструмент — только SELECT, ограничен кампусом вызывающего токена, ограничен по объему и несет docstring маршрутизации ЧТО / КОГДА ИСПОЛЬЗОВАТЬ / НЕ ИСПОЛЬЗОВАТЬ / ВОЗВРАЩАЕТ.
Студенты — необработанные данные (основные)
Инструмент | Что возвращает |
| Список для кампуса/потока (± секция), каждый загруженный студент |
| Полная запись одного студента — оценки по компонентам по предметам + посещаемость |
| Плоские строки журнала оценок на уровне компонентов для студента |
| Посещаемость по предметам (присутствие / сессии / %) для студента |
Предметы — необработанные данные (основные)
Инструмент | Что возвращает |
| Предметы/курсы для области, с триместром, секциями, зачислением |
| Оценки когорты по предмету, процент сдачи, посещаемость, средние по компонентам |
| Средние по секциям + разброс (сигнал преподавания/оценивания) |
| Успеваемость когорты по типу оценки (тест/задание/проект…) |
| Предметы, ранжированные от самых сложных (процент сдачи + нули) |
Инсайты — лонгитюдные и единые панели (герои)
Инструмент | Что возвращает |
| Тренд оценок/посещаемости студента по триместрам + метка |
| Представление студента за один вызов: процентильный ранг, тренд, флаги риска, точность |
| KPI когорты за один вызов: оценки, посещаемость, процент сдачи, группа риска, распределение |
| Автоматический список вмешательства — причины + предлагаемое действие, ранжировано |
| Самые большие падения оценок от семестра к семестру по когорте (раннее предупреждение) |
Аналитика и группа риска (основные)
Инструмент | Что возвращает |
| Снимок оценок когорты — среднее, процент сдачи, распределение, нули |
| Посещаемость когорты — среднее, количество ниже 75% / 65% |
| Самые высокие общие оценки в области |
| Средние по кампусам для потока |
| Композитный рейтинг риска (нули + посещаемость + провальные оценки) |
| Студенты ниже порога посещаемости |
| Студенты с зафиксированным нулем (самые срочные) |
Отчеты и точность (вторичные)
Инструмент | Что возвращает |
| Оценка точности одного отчета по двум схемам + интерпретация |
| Точность когорты — средний %, проверено / дрейф / помечено |
| Очередь проверки человеком (отчеты, помеченные валидацией) |
| Сгенерированный повествовательный отчет для студента |
| Количество готово / на удержании / сбой для области |
| Принципал вызывающего и разрешенные кампусы |
См. docs/INNOVATION_ROADMAP.md для идей Фазы 3
(attendance_eligibility, attendance_marks_link, anomalies, roster_health).
Быстрый старт
Подключение хоста (развернутый сервер)
claude mcp add moodle --transport http https://moodle-mcp-f6do.onrender.com/mcp \
--header "Authorization: Bearer <your MCP_TOKENS value>"Затем спрашивайте на естественном языке:
"cohort pulse for jaipur 2024-26" · "who's declining" · "build my watchlist" · "show JJ24PG001's full record" · "hardest subjects" · "compare sections of Wealth Management"
Запуск локально
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 · также в |
| JSON-карта токенов преподавателей → | Вы генерируете его |
| Одиночный токен для всех кампусов (аварийный, альтернатива | Вы генерируете его |
| База для ссылок на отчеты (по умолчанию | — |
| Публичный URL этого сервиса (необязательно) | Дашборд Render |
Все логирование идет в stderr; строки логов никогда не содержат содержимого токенов или PII.
Модель доступа (ролевая, с ограничением по кампусу)
В отличие от студенческого MCP (RLS для каждого пользователя), этот обслуживает преподавателей, которые видят институциональные данные для своих кампусов. Bearer-токен сопоставляется с принципалом с набором разрешенных кампусов; каждый инструмент пересекает запрошенный кампус с этим набором. Кампус вне разрешения возвращает {"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
}Ключ service-role 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 (blueprint
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.
Runbooks
Ротация токенов доступа — перегенерируйте MCP_TOKENS (тем же генератором), обновите переменную окружения Render; сервис перезапустится, и старые токены перестанут работать. Выдайте новые токены преподавателям.
Добавить факультет для кампуса — добавьте одну запись "mcp_...": {"name": "...", "campuses": ["<campus>"]} в MCP_TOKENS, переразверните, передайте им их токен.
Добавить новый инструмент — следуйте docs/ARCHITECTURE.md §11: добавьте модель Params + _impl(svc,…) + register(), ограничьте каждый запрос рамками кампуса, strip_secrets, напишите docstring маршрутизации, зарегистрируйте в server.py. Используйте повторно помощники для сырых данных из tools/common.py.
Холодный старт / первый запрос медленный — бесплатный инстанс проснулся из простоя (~50 с). Прогрейте его с помощью curl <url>/health или обновите инстанс.
Проверить развёртывание — curl <url>/health, затем
MCP_URL="<url>/mcp" MCP_TOKEN="<token>" python test_client.py.
Инварианты безопасности
Только чтение навсегда · ограничение каждого запроса рамками кампуса · единообразные промахи {"found": false} (без оракула существования) · удаление секретов (идентификаторы запусков / ключи хранилища / хэши / электронные письма никогда не покидают сервер) · ключ сервисной роли только на стороне сервера · бюджеты ответов + разбиение на страницы · корректная деградация (никогда не 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