moodle-ai-mcp
moodle-ai-mcp
Управляющая плоскость MCP для Moodle, ориентированная на ИИ.
MCP-клиент (Claude Code, ChatGPT, Cursor или что-либо ещё, говорящее на Model Context Protocol) подключается к этому серверу и получает структурированные, точные ответы о реальном сайте Moodle: что это за сайт, под кем аутентифицировано подключение, что ему разрешено делать, к каким внешним функциям Moodle он может обращаться, и — та часть, которая делает его чем-то большим, чем обёртка над REST, — какие именно библиотеки H5P установлены на сайте и каковы их схемы контента.
Это не тонкая обёртка вокруг Moodle REST. Долгосрочная цель — управляющая плоскость, которую ИИ-клиент может использовать для безопасного проектирования и создания целых курсов. В этом репозитории сейчас находится первый фундамент для этого.
Текущая зрелость: базовый этап, только чтение
Работает сегодня:
MCP-сервер на stdio с семью курируемыми инструментами, построенный на официальном MCP TypeScript SDK
Локальный плагин Moodle 5.2 (
local_aimcp) с семью внешними функциями только для чтения, реальным контролем возможностей и покрытием PHPUnitМодель чтения курса с учётом возможностей: разделы, действия, настройки завершения и оценок, отражающая то, что аутентифицированная учётная запись действительно может видеть, а не всё с прикреплённым флагом
hiddenДинамическое обнаружение внешних функций, доступных аутентифицированному сервису, с без потерь интроспекцией сигнатур
Динамическое обнаружение установленных библиотек H5P и их реальной установленной семантики, преобразованной в JSON Schema с явными примечаниями для всего, что JSON Schema не может выразить
Намеренно не построено: любые операции записи, создание курсов/действий/H5P, движок Course Blueprint, автоматизация браузера, передача файлов и инфраструктура хостинга. См. «Ограничения» ниже.
Related MCP server: Drupal Bridge MCP
Архитектура
AI client --MCP/stdio--> apps/mcp-server (TypeScript, MIT)
|
| authenticated Moodle web service call
v
moodle/local/aimcp (Moodle plugin, GPL-3.0-or-later)
|
v
Moodle 5.2 core + H5P coreСервер владеет протоколом, поверхностью инструментов, оркестрацией и преобразованием схем. Плагин владеет всем, на что может ответить только Moodle: идентичность, контекст, возможности, реестр внешних функций и движок H5P. Логика Moodle никогда не переписывается на TypeScript, а оркестрация никогда не просачивается в PHP.
Подробности, включая то, почему поверхность инструментов состоит из шести инструментов, а не из нескольких сотен, — в docs/ARCHITECTURE.md.
Предварительные требования
Node.js 24
Docker со стеком Moodle 5.2 из moodle-docker
Токен веб-сервиса Moodle для пользователя, авторизованного на включённом внешнем сервисе
Локальная разработка
Полные инструкции: docs/LOCAL-DEV.md. Краткая версия:
cd ~/DEV/moodle-ai/moodle-ai-mcp
# 1. Start the Moodle stack (installs the persistence override, mounts the plugin)
./scripts/stack.sh start
# 2. Register the plugin with Moodle
docker exec -u www-data -w /var/www/html moodle-ai-webserver-1 \
php admin/cli/upgrade.php --non-interactive
# 3. Attach the plugin's functions to your external service (idempotent)
docker exec -u www-data -w /var/www/html moodle-ai-webserver-1 \
php public/local/aimcp/cli/provision_service.php --service=moodle_ai_mcp_dev
# 4. Build and run the server
npm install
npm run build
./scripts/run-server.shБаза данных, moodledata и установленные библиотеки H5P находятся в именованных Docker-томах, поэтому ./scripts/stack.sh recreate безопасен. Только ./scripts/stack.sh reset уничтожает данные, и он сначала спрашивает. Создавайте резервные копии в любое время с помощью ./scripts/backup.sh.
Учётные данные берутся из .env.local, который является симлинком на файл вне этого репозитория. .env* игнорируется git; см. docs/SECURITY.md.
Подключение MCP-клиента
claude mcp add moodle-ai --scope local -- \
/absolute/path/to/moodle-ai-mcp/scripts/run-server.shИли с помощью Inspector:
npx @modelcontextprotocol/inspector ./scripts/run-server.shИнструменты
Инструмент | Что отвечает |
| Что это за Moodle, под кем я подключён, что может эта учётная запись, какие плагины и H5P доступны. |
| Какие курсы существуют и видны этой учётной записи, с возможностью поиска. |
| Структура одного курса: разделы по порядку, элементы курса в порядке страницы курса, настройки завершения и настройки элементов оценки. Опускает то, что вызывающий не может видеть, ограничивает поля управления курсом (сырые правила доступности, ID номеров модулей) возможностями редактора Moodle и сообщает, сколько скрыто. |
| Какие внешние функции Moodle доступны этому подключению, отсортированные по релевантности. Обнаруживаются вживую, а не из встроенного списка. |
| Полная сигнатура одной функции: собственное дерево параметров и возвращаемых значений Moodle, плюс сгенерированная JSON Schema и примечания по преобразованию. |
| Какие библиотеки H5P установлены, с какими точными версиями, какие из них являются запускаемыми типами контента, какие только для зависимостей, и какие Moodle в настоящее время предлагает для создания. |
| Установленная семантика для одной версии библиотеки H5P, плюс сгенерированная JSON Schema и примечания для всего, что H5P выражает, но JSON Schema не может. |
Каждый инструмент аннотирован readOnlyHint: true, destructiveHint: false и возвращает как structuredContent, так и JSON-текстовый запасной вариант.
Намеренно нет универсального инструмента «вызвать любую функцию Moodle». Поиск и описание делают длинный хвост обнаруживаемым; выполнение произвольных функций требует классификации безопасности, которой пока не существует.
Тесты
npm --prefix apps/mcp-server run typecheck # TypeScript, strict
npm --prefix apps/mcp-server run test:unit # pure logic, no Moodle needed
npm --prefix apps/mcp-server run build
npm --prefix apps/mcp-server run test:integration # real Moodle + real MCP session
./scripts/lint-plugin.sh # php -l over the plugin
./scripts/check-plugin.sh # Moodle coding standard (moodle-cs)
./scripts/test-plugin.sh # PHPUnit inside the Moodle containerИнтеграционный набор — не макет: он запускает собранный сервер как дочерний процесс, общается с ним по MCP с помощью официального SDK-клиента и проверяет утверждения на живом сайте — включая то, что идентичность является ожидаемым пользователем Moodle и что ни один токен не появляется в каком-либо выводе.
Ограничения
Только чтение через MCP. Нет создания, обновления, удаления, зачисления, оценок, загрузки или скачивания. Единственное, что в репозитории пишет в Moodle, — это CLI для фикстур разработки, который недоступен ни одному MCP-клиенту или веб-сервису (см. docs/SECURITY.md).
Нет произвольного выполнения функций. Только поиск и описание.
Только stdio. HTTP-транспорт — будущее дополнение; доменный слой уже не зависит от транспорта.
Нет Course Blueprint, нет движка diff/apply, нет генерации контента.
Нет автоматизации браузера, скриншотов или аудита доступности.
moodle_course_inspectвозвращает структуру курса, а не успеваемость: нет оценок и нет состояния завершения для каждого пользователя.Главная страница Moodle — это строка курса, но не учебный курс, поэтому
moodle_course_inspectотклоняет её.moodle_course_listвсё равно сообщает о ней с флагомisSiteCourse.Генерация схемы H5P — на один уровень вглубь: вложенное поле
libraryопределяет форму обёртки и допустимые версии библиотеки, но егоparamsследуют собственной семантике этой библиотеки — получите их вторым вызовомmoodle_h5p_schema.Некоторые конструкции H5P и Moodle нельзя выразить в JSON Schema (условия
showWhen, белые списки HTML-тегов, шаблоны PCRE, правила очистки PARAM). Они сохраняются как аннотацииx-h5p-*/x-moodle-*и сообщаются как примечания по преобразованию, а не отбрасываются.Moodle REST не может выразить пустой массив или настоящий
null; клиент сообщает об обоих как о явных предупреждениях.Плагин монтируется в контейнер из этого репозитория; копия rsync сохраняется только как запасной вариант. Симлинк на хосте не работает по причинам, объяснённым в docs/LOCAL-DEV.md.
Лицензирование
apps/mcp-server/— MITmoodle/local/aimcp/— GPL-3.0-or-later (обязательно: это плагин Moodle)
Никакой код реализации GPL не копируется в MIT-сервер. Справочные проекты изучались как архитектурные ссылки и переписывались в чистой комнате; обоснование по каждому проекту — в docs/REFERENCE-ARCHITECTURE.md.
Документация
docs/ARCHITECTURE.md — дизайн и границы
docs/REFERENCE-ARCHITECTURE.md — матрица повторного использования и лицензирование
docs/LOCAL-DEV.md — воспроизводимая локальная настройка
docs/SECURITY.md — обработка секретов, авторизация, ограничения поверхности
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
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with Moodle via web services, allowing tasks like listing courses, assignments, events, and downloading files.104MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Drupal sites through MCP tools, with automatic discovery, OAuth-based authentication, and scope validation.305MIT
- AlicenseNot gradedqualityCmaintenanceConnects Moodle LMS with AI assistants through the Model Context Protocol, enabling users to interact with Moodle data via a conversational chatbot interface.11MIT
- AlicenseAqualityCmaintenanceProvides read-only access to Gemini 3 Online's knowledge surface (models, pricing, links, FAQ) for MCP-compatible AI clients, requiring no API keys.3MIT
Related MCP Connectors
Generate 18 AI readiness files (llms.txt, ai.txt, RAG indexes, schema) for any website.
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
MCP server for AI access to Swagger by SmartBear.
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/neongodio/moodle-ai-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server