Skip to main content
Glama

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_site_inspect

Что это за Moodle, под кем я подключён, что может эта учётная запись, какие плагины и H5P доступны.

moodle_course_list

Какие курсы существуют и видны этой учётной записи, с возможностью поиска.

moodle_course_inspect

Структура одного курса: разделы по порядку, элементы курса в порядке страницы курса, настройки завершения и настройки элементов оценки. Опускает то, что вызывающий не может видеть, ограничивает поля управления курсом (сырые правила доступности, ID номеров модулей) возможностями редактора Moodle и сообщает, сколько скрыто.

moodle_functions_search

Какие внешние функции Moodle доступны этому подключению, отсортированные по релевантности. Обнаруживаются вживую, а не из встроенного списка.

moodle_functions_describe

Полная сигнатура одной функции: собственное дерево параметров и возвращаемых значений Moodle, плюс сгенерированная JSON Schema и примечания по преобразованию.

moodle_h5p_types

Какие библиотеки H5P установлены, с какими точными версиями, какие из них являются запускаемыми типами контента, какие только для зависимостей, и какие Moodle в настоящее время предлагает для создания.

moodle_h5p_schema

Установленная семантика для одной версии библиотеки 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/ — MIT

  • moodle/local/aimcp/ — GPL-3.0-or-later (обязательно: это плагин Moodle)

Никакой код реализации GPL не копируется в MIT-сервер. Справочные проекты изучались как архитектурные ссылки и переписывались в чистой комнате; обоснование по каждому проекту — в docs/REFERENCE-ARCHITECTURE.md.

Документация

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

  • 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.

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/neongodio/moodle-ai-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server