Skip to main content
Glama

[!IMPORTANT] Этот проект не пытается обойти или подорвать ауентификацию и ограничения, уснановленные D2L или SMU, выирая использовать API D2L напрямую после надлежащей ауентификации через Chrome. Этот проект не связан с SMU или D2L. Если возникнут проблемы, свяжиесь со мной напрямую или создайте issue.

SMU eLearn MCP

Локальный, доступный только для чтения сервер Model Context Protocol для развёртывания D2L Brightspace в SMU. Он предоставляет доступ к курсам, закреплённым курсам, недельным модлям, докуентам курса, недавним загрзкам/изменениям, поиску по содержимому, метаданным и загрзке файлов.

Это локальный однопользвательский сервис stdio. Он не предназначен для испльзования в качестве сетевого сервера или для совмесного доступа междй пользвателями.

Лучше всего испльзовать этот MCP через Codex или Claude, для которых я упаковал его в виде уснанавливаемых плагинов в папке plugin-package/.

Возможности

MCP tool

Purpose

elearn_authenticate

Открыть Chrome для SMU SSO/MFA, подождать одну минуту, автомачески проверить и сохранить сеанс.

elearn_аuth_status

Проверить, что локально сохранённый сеанс браузера может полуить доступ к API eLearn.

elearn_list_courses

Список/поиск доступных курсов с идентификаторами, кодами, датами, ролью и состоянием закрепления.

elearn_list_pinned_courses

Возвращать курсы, у которых присутствует авторитетный D2L PinDate.

elearn_list_course_weeks

Обнаруживать вложенные модули Week N и количество их документов.

elearn_get_week_documents

Получить все документы для одного курса и одной учебной недели/модуля.

elearn_get_recent_documents

Получить документы, загрженные или изменённые в течение календарной недели, по закреплённым/всем/выбранным курсам.

elearn_get_course_documents

Рекурсивно перечислить все документы в одном курсе.

elearn_search_content

Искать названия документов и пути модлей по курсам.

elearn_get_document_metadata

Получить метаданные одной темы контента D2L.

elearn_download_document

Загрзить файл темы локально, не перезаписывая сущствующий файл.

Реализация использует документированные read-only маршруты API D2L. Она не извлекает данные с видимой домашней страницы и не изменяет курсы, состояние закрепления, работы, оценки, сообщения или контент.

Related MCP server: D2L Brightspace MCP Server

Требования

  • Node.js 22 или новее

  • Google Chrome

  • Учётная запись SMU с доступом к eLearn

Установка и ауентификация

cd elearn-mcp
npm ci
npm run auth

npm run аuth открывает выделенный профиль Chrome. Выполните обчный вход SMU через Microsoft и поток MFA. Через одну минуту команда автомачески проверает API eLearn; если вход ещё не завершён, она проверает кажые 15 секунд в течении максимум пяти минут. При успехе она сохраняет состояние браузерного сеанса Playwright, устанавливает для файла состояния права доступа только для владельца (0600) и закрывает Chrome. Ввод в терминале не требуется.

Профиль по умолчанию находится в ~/.elearn-mcp/browser-profile, а сохранённое состояние — в ~/.elearn-mcp/storage-state.json. Состояние содержит файлы cookie сеанса и может содержать веб-хранилище, ограниченное доменом происхождения, поэтому относитесь к обоим расположениям как к секретам: не фиксируйте в репозитории, не синхронизируйте и не распространяйте их. MCP никогда не запрашивает и не хранит ваш пароль или ответ MFA.

Проверьте типобезопасность, модульные тесты и чистую производственную сборку:

npm run check

Запустите полный live-тест MCP после аутентификации:

npm run test:full

Полный запуск выполняет проверку типов и модульные тесты, собирает производственный сервер, подключается через MCP stdio, проверяет все одиннадцать инструментов на живых данных eLearn, загржает один реальный файл в изолированный временный каталог операционной системы, проверяет файл и удаляет временный каталог в блоке finally. Он никогда не отправляет и не изменяет данные в eLearn.

Конфигурация MCP-клиента

Сначала соберите проект, затем настройте ваш MCP-клиент для запуска скомпилированного stdio-сервера:

{
  "mcpServers": {
    "smu-elearn": {
      "command": "node",
      "args": [
        "/absolute/path/to/elearn-mcp/dist/src/server.js"
      ],
      "env": {
        "ELEARN_BASE_URL": "https://elearn.smu.edu.sg",
        "ELEARN_LP_VERSION": "1.49",
        "ELEARN_LE_VERSION": "1.49",
        "ELEARN_COURSE_ORG_UNIT_TYPE_ID": "3"
      }
    }
  }
}

Точное расположение этого JSON зависит от MCP-клиента. Перезапустите клиент после изменения его конфигурации.

Производственная среда выполнения

Сервер собирается из зафиксированного набора зависимостей. Во время проверки тесты проходят проверку типов и выполняются, но они исключены из dist/ и распространяемого пакета.

Для минимальной локальной среды выполнения:

npm ci
npm run check
npm prune --omit=dev
npm start

После удаления зависимостей для разработки снова выполните npm ci перед пересборкой или запуском модульных тестов. Включённый рабочий процесс GitHub Actions выполняет ту же зафиксированную уснановку и проверку на Node.js 22. Аутентифицированный live-тест не включён в CI, поскольку он требует интерактивной учётной записи SMU и MFA.

Сборка плагинов для Codex и Claude

Файлы TypeScript в каталоге src/ являются единственным источником истины для реализации MCP. Codex и Claude Code используют отдельные манифесты плагинов и метаданные запуска MCP, при этом оба получают одну и ту же сгенерированную среду выполнения:

plugin-package/
├── codex/smu-elearn/
│   ├── .codex-plugin/plugin.json
│   ├── .mcp.json
│   └── mcp/
└── claude/smu-elearn/
    ├── .claude-plugin/plugin.json
    ├── .mcp.json
    └── mcp/

Соберите оба новых автономных пакета плагинов с помощью:

npm run build:plugins

npm run build:plugin остаётся псевдонимом той же команды. Сборка компилирует src/ один раз, определяет точные версии производственных зависимостей из корневого lockfile, один раз устанавливает производственные зависимости в изолированный промежуточный каталог и заменяет каждый каталог mcp/ только после проверки его полной промежуточной копии. Не редактируйте ни одну сгенерированную среду выполнения вручную.

Для разработки в Claude Code проверьте и загрузите пакет напрямую:

claude plugin validate ./plugin-package/claude/smu-elearn --strict
claude --plugin-dir ./plugin-package/claude/smu-elearn

Внутри Claude Code выполните /mcp, чтобы просмотреть встроенный сервер. Для постоянной локальной установки соберите пакеты, а затем добавьте маркетплейс этого репозитория:

claude plugin marketplace add /absolute/path/to/elearn-mcp
claude plugin install smu-elearn@smu-local --scope user

Каталог маркетплейса хранится в .claude-plugin/marketplace.json. Claude копирует полный пакет в свой кэш плагинов, поэтому сгенерированная среда выполнения mcp/ должна существовать до установки. Во время разработки используйте --plugin-dir, чтобы обойти кэш и загрузить пакет на месте.

Конфигурация

Environment variable

Default

Meaning

ELEARN_BASE_URL

https://elearn.smu.edu.sg

Источник (origin) eLearn.

ELEARN_LP_VERSION

1.49

Контракт API платформы обучения D2L.

ELEARN_LE_VERSION

1.49

Контракт API среды обучения D2L.

ELEARN_COURSE_ORG_UNIT_TYPE_ID

3

Тип org-unit «D2L Course Offering».

ELEARN_PROFILE_DIR

~/.elearn-mcp/browser-profile

Выделенный профиль аутентификации Chrome.

ELEARN_AUTH_STATE_FILE

~/.elearn-mcp/storage-state.json

Состояние сеанса Playwright, доступное только владельцу, используемое MCP.

ELEARN_AUTH_INITIAL_WAIT_SECONDS

60

Время до первой автоматической проверки входа.

ELEARN_AUTH_POLL_INTERVAL_SECONDS

15

Интервал повтора, пока SSO/MFA ещё не завершены.

ELEARN_AUTH_TIMEOUT_SECONDS

300

Максимальное время интерактивной аутентификации.

ELEARN_DOWNLOAD_DIR

./downloads

Каталог вывода по умолчанию для загруженных файлов.

ELEARN_HEADLESS

true

Запускать аутентифицированный контекст Chrome без видимого окна.

Как интерпретируются недели

  • elearn_get_week_documents интерпретирует week как учебный модуль курса, например Week 3. Он рекурсивно включает файлы во вложенных подмодулях.

  • elearn_get_recent_documents интерпретирует неделю как календарный диапазон дат и фильтрует по D2L LastModifiedDate темы. Если since и until не указаны, используется текущая местная неделя с понедельника по воскресенье.

Это различие сделано намеренно: файл, хранящийся в «Week 3», мог быть загружен в другую календарную неделю.

Жизненный цикл аутентификации

Инструмент MCP elearn_authenticate и команда npm run auth запускают выделенный профиль Chrome для управляемого пользователем SSO и MFA. Они ждут одну минуту перед первой автоматической проверкой, при необходимости ненадолго опрашивают, проверяют API D2L и записывают файл состояния Playwright с правами 0600. Сервер запускает отдельный headless-контекст Chrome с этим состоянием и отправляет через него API-запросы того же происхождения. Это сохраняет контроль SMU и Microsoft над интерактивной аутентификацией, позволяя процессам MCP перезапускаться. Когда институциональный сеанс истекает, вызовите elearn_authenticate или повторно запустите npm run auth.

Смотрите SECURITY.md для получения сведений о границах локального развёртывания, рекомендациях по обращению с учётными данными и проверках релиза.

Install Server
F
license - not found
A
quality
C
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

  • Multi-engine scholarly research server for search, traversal, full text, and reading lists.

  • Search, browse, and read your Dropbox files. Find documents by name or content, list folders, and…

  • Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.

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/tancysam/elearn-mcp'

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