smu-elearn
[!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 |
| Открыть Chrome для SMU SSO/MFA, подождать одну минуту, автомачески проверить и сохранить сеанс. |
| Проверить, что локально сохранённый сеанс браузера может полуить доступ к API eLearn. |
| Список/поиск доступных курсов с идентификаторами, кодами, датами, ролью и состоянием закрепления. |
| Возвращать курсы, у которых присутствует авторитетный D2L |
| Обнаруживать вложенные модули |
| Получить все документы для одного курса и одной учебной недели/модуля. |
| Получить документы, загрженные или изменённые в течение календарной недели, по закреплённым/всем/выбранным курсам. |
| Рекурсивно перечислить все документы в одном курсе. |
| Искать названия документов и пути модлей по курсам. |
| Получить метаданные одной темы контента D2L. |
| Загрзить файл темы локально, не перезаписывая сущствующий файл. |
Реализация использует документированные 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 authnpm 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:pluginsnpm 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 |
|
| Источник (origin) eLearn. |
|
| Контракт API платформы обучения D2L. |
|
| Контракт API среды обучения D2L. |
|
| Тип org-unit «D2L Course Offering». |
|
| Выделенный профиль аутентификации Chrome. |
|
| Состояние сеанса Playwright, доступное только владельцу, используемое MCP. |
|
| Время до первой автоматической проверки входа. |
|
| Интервал повтора, пока SSO/MFA ещё не завершены. |
|
| Максимальное время интерактивной аутентификации. |
|
| Каталог вывода по умолчанию для загруженных файлов. |
|
| Запускать аутентифицированный контекст Chrome без видимого окна. |
Как интерпретируются недели
elearn_get_week_documentsинтерпретируетweekкак учебный модуль курса, например Week 3. Он рекурсивно включает файлы во вложенных подмодулях.elearn_get_recent_documentsинтерпретирует неделю как календарный диапазон дат и фильтрует по D2LLastModifiedDateтемы. Если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 для получения сведений о границах локального развёртывания, рекомендациях по обращению с учётными данными и проверках релиза.
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 gradedqualityDmaintenanceEnables Purdue University students to access their Brightspace academic data including courses, assignments, and grades through web scraping with Duo Mobile 2FA authentication. Provides programmatic access to student academic information when official API access is restricted.7Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with D2L Brightspace LMS, providing access to assignments, grades, course content, calendar events, and announcements through automated SSO authentication.122210MIT
- FlicenseAqualityCmaintenanceEnables read-only querying of Moodle as a student, including courses, assignments, grades, forums, and files, using a personal web services token.11
- FlicenseBqualityCmaintenanceEnables browsing and collecting course materials from Brightspace through Chrome DevTools Protocol, allowing snapshotting, downloading media, and automating page navigation.22
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.
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/tancysam/elearn-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server