Skip to main content
Glama
mansigambhir-1313

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 маршрутизации ЧТО / КОГДА ИСПОЛЬЗОВАТЬ / НЕ ИСПОЛЬЗОВАТЬ / ВОЗВРАЩАЕТ.

Студенты — необработанные данные (основные)

Инструмент

Что возвращает

list_students

Список для кампуса/потока (± секция), каждый загруженный студент

get_student

Полная запись одного студента — оценки по компонентам по предметам + посещаемость

student_marks

Плоские строки журнала оценок на уровне компонентов для студента

student_attendance

Посещаемость по предметам (присутствие / сессии / %) для студента

Предметы — необработанные данные (основные)

Инструмент

Что возвращает

list_subjects

Предметы/курсы для области, с триместром, секциями, зачислением

subject_performance

Оценки когорты по предмету, процент сдачи, посещаемость, средние по компонентам

section_compare

Средние по секциям + разброс (сигнал преподавания/оценивания)

assessment_breakdown

Успеваемость когорты по типу оценки (тест/задание/проект…)

subject_difficulty

Предметы, ранжированные от самых сложных (процент сдачи + нули)

Инсайты — лонгитюдные и единые панели (герои)

Инструмент

Что возвращает

student_trajectory

Тренд оценок/посещаемости студента по триместрам + метка

student_360

Представление студента за один вызов: процентильный ранг, тренд, флаги риска, точность

cohort_pulse

KPI когорты за один вызов: оценки, посещаемость, процент сдачи, группа риска, распределение

watchlist

Автоматический список вмешательства — причины + предлагаемое действие, ранжировано

declining_students

Самые большие падения оценок от семестра к семестру по когорте (раннее предупреждение)

Аналитика и группа риска (основные)

Инструмент

Что возвращает

marks_overview

Снимок оценок когорты — среднее, процент сдачи, распределение, нули

attendance_overview

Посещаемость когорты — среднее, количество ниже 75% / 65%

top_performers

Самые высокие общие оценки в области

cohort_compare

Средние по кампусам для потока

at_risk_students

Композитный рейтинг риска (нули + посещаемость + провальные оценки)

attendance_watch

Студенты ниже порога посещаемости

zero_alerts

Студенты с зафиксированным нулем (самые срочные)

Отчеты и точность (вторичные)

Инструмент

Что возвращает

get_report_accuracy

Оценка точности одного отчета по двум схемам + интерпретация

accuracy_overview

Точность когорты — средний %, проверено / дрейф / помечено

flagged_reports

Очередь проверки человеком (отчеты, помеченные валидацией)

get_student_report

Сгенерированный повествовательный отчет для студента

report_pipeline_status

Количество готово / на удержании / сбой для области

whoami

Принципал вызывающего и разрешенные кампусы

См. 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.

Переменная

Описание

Где получить

SUPABASE_URL

URL проекта отчетов (https://sadbfvfcmmxgtatfjfmc.supabase.co)

Supabase → Settings → API

SUPABASE_SERVICE_ROLE_KEY

Ключ чтения службы (только на стороне сервера, никогда не раскрывается)

Supabase → Settings → API · также в moodle-agent/.env

MCP_TOKENS

JSON-карта токенов преподавателей → {name, campuses} (см. ниже)

Вы генерируете его

MCP_ADMIN_TOKEN

Одиночный токен для всех кампусов (аварийный, альтернатива MCP_TOKENS)

Вы генерируете его

REPORT_PUBLIC_BASE_URL

База для ссылок на отчеты (по умолчанию https://reports.tryrehearsal.ai)

MCP_SERVER_BASE_URL

Публичный 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.

Ключевые файлы

Путь

Назначение

server.py

Приложение FastMCP, whoami, /health, зависимость аутентификации, подключение инструментов

config.py

Настройки + validate_config()

supabase_client.py

Только чтение MoodleService, ограничение кампуса, разрешение запуска

tools/common.py

Общие помощники: courses_for, marks_for, cohort_rollup, кэши

tools/students.py · subjects.py · insights.py

Инструменты первичных данных

tools/analytics.py · at_risk.py

Сводки когорт

tools/accuracy.py · reports.py

Вторичный слой отчетов

cache.py · guardrails.py · annotations.py

TTL-кэш, бюджеты/ограничения, подсказки инструментов

test_client.py

Сквозной дымовой тест 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

Примечания

Продакшн

https://moodle-mcp-f6do.onrender.com

Free-инстанс, main авто-деплой

Локально

http://localhost:8899

uvicorn server:app --port 8899

Полные шаги тестирования/развертывания: 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.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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