Skip to main content
Glama

canvas-student-mcp

Сервер MCP для Canvas LMS, который работает, даже если ваша школа отключает создание API-токенов.

CI Лицензия: MIT Node >= 18 TypeScript

Предоставляет Claude (или любому MCP-клиенту) доступ только для чтения к вашему аккаунту Canvas: курсы, учебные программы, задания со статусом сдачи, оценки, объявления, модули, страницы, файлы, обсуждения, тесты, список дел и календарь. Объедините его с коннектором Notion и архивируйте целый курс одной командой.

Зачем ещё один MCP для Canvas?

Уже существует несколько хороших MCP-серверов для Canvas — vishalsachdev/canvas-mcp, DMontgomery40/mcp-canvas-lms, mtgibbs/canvas-lms-mcp и другие. Все они требуют личный API-токен.

Вот в чём проблема: многие университеты отключают возможность самостоятельной генерации токенов для студентов. Откройте Аккаунт → Настройки — и там просто нет кнопки + Новый токен доступа. В таких школах любой сервер на основе токенов — это тупик.

Этот сервер решает проблему с помощью аутентификации через cookie сессии: войдите в Canvas в браузере, скопируйте cookie сессии один раз, и вы подключены. Веб-интерфейс Canvas общается с тем же REST API /api/v1 с помощью этой cookie, поэтому никакая политика администратора не может заблокировать это, не сломав сам Canvas.

Что для этого требуется под капотом (и чего не делают серверы на токенах):

  • Удаление XSSI-защиты — ответы Canvas, аутентифицированные через cookie, имеют префикс while(1);, который ломает наивный парсинг JSON

  • Обнаружение перенаправления на страницу входа — при истекшей сессии происходит перенаправление на страницу входа вместо возврата 401; сервер перехватывает перенаправления и не-JSON тела и точно сообщает, как обновить данные, вместо загадочной ошибки

  • Загрузка файлов с учётом учётных данных — токен-сессии получают параметр verifier=, делающий URL файлов самоаутентифицирующимися; cookie-сессии его не получают, поэтому загрузки должны передавать cookie сессии (иначе Canvas отвечает 500). Перенаправления обрабатываются вручную, чтобы учётные данные никогда не передавались на CDN

  • Ошибки с учётом истечения срока — каждый режим ошибки объясняет исправление в самом сообщении об ошибке

Принципы проектирования, которые отличают его помимо аутентификации:

  • Только чтение по замыслу. Каждый инструмент — это GET-запрос. Сервер физически не может сдавать задания, публиковать обсуждения или что-либо изменять — его можно безопасно доверить автономному агенту.

  • Контекстно-эффективные ответы. Полезные данные API Canvas огромны; каждый инструмент обрезает их до полей, которые действительно нужны LLM, преобразует HTML в чистый текст (сохраняя URL ссылок) и ограничивает пагинацию явными уведомлениями об усечении.

  • Небольшой и проверяемый. Строгий TypeScript, три внешних зависимости (MCP SDK, zod и unpdf для текста из PDF). Вы можете прочитать весь код, прежде чем доверить ему данные своей учётной записи в школе.

Аутентификация по токену по-прежнему поддерживается, если ваша школа её разрешает — cookie является запасным вариантом, а не единственным путём.

Related MCP server: canvas-parent-mcp

Инструменты (29)

Инструмент

Что делает

canvas_get_profile

Проверить учётные данные / кто я

canvas_list_courses

Курсы с текущей оценкой (активные / завершённые / все)

canvas_get_course

Детали курса + полная учебная программа в виде текста

canvas_list_assignments

Задания по сроку сдачи со статусом вашей сдачи; фильтры по группам (предстоящие, просроченные, …)

canvas_get_assignment

Полное описание, рубрика, ваша сдача + оценка

canvas_get_grades

Обзор оценок по всем курсам или разбивка по заданиям для одного курса

canvas_list_announcements

Объявления по активным курсам или по одному курсу / диапазону дат

canvas_list_modules

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

canvas_list_pages / canvas_get_page

Вики-страницы курса, полный текст

canvas_list_files / canvas_get_file_link

Файлы курса + временные URL для скачивания

canvas_list_discussions / canvas_get_discussion

Темы для обсуждений и полные ветки

canvas_list_quizzes

Тесты с датами сдачи, ограничениями по времени, попытками

canvas_list_todo / canvas_list_upcoming

Ваш список дел и предстоящие сроки

canvas_list_calendar_events

События или сроки сдачи заданий в заданном диапазоне дат

canvas_list_inbox / canvas_get_conversation

Чтение цепочек сообщений во входящих Canvas — не помечая их как прочитанные

canvas_get_feedback

Комментарии проверяющих и оценки по рубрикам на ваши работы

canvas_grade_breakdown

Оценка по группам заданий + калькулятор "что если": "что мне нужно получить за финал, чтобы вышла пятёрка?"

canvas_list_planner

Лента планировщика с флагами новых активностей и статусом сдачи

canvas_read_file

Извлечение текста из файлов курса — PDF, Word, PowerPoint, Excel, HTML, обычный текст

canvas_read_syllabus

Учебная программа в виде текста, введена ли она в Canvas или прикреплена как PDF/Word-файл

canvas_list_groups

Ваши членства в группах

canvas_get_module_progress

Состояние завершения модуля и что ещё требуется для каждого элемента

canvas_list_peer_reviews

Назначенные вам рецензии коллег

canvas_export_course

Однокомандный экспорт всего курса в Markdown — создан для архивации в Notion

canvas_auth_status

Диагностика подключения: какие учётные данные, где сохранены, всё ещё действительны?

Три из них стоит выделить.

canvas_read_file превращает учебные материалы в читаемый текст, что позволяет выполнять запросы вроде "опроси меня по слайдам этой недели" или "что написано в политике приёма опоздавших работ". PDF обрабатываются через unpdf; форматы Office обрабатываются внутри репозитория — .docx, .pptx и .xlsx являются ZIP-контейнерами с XML, поэтому небольшой ZIP-ридер на основе встроенного zlib Node.js покрывает все три без дополнительных зависимостей. canvas_read_syllabus расширяет эту возможность: он определяет, когда учебная программа является только ссылкой на файл, и читает вложение вместо этого, что является распространённым случаем (2 из 3 протестированных курсов). canvas_grade_breakdown реализует обе модели оценивания Canvas (взвешенная по группам и по сумме баллов), перепроверяет свои вычисления по оценке, которую сообщает сам Canvas, и сообщает, когда правила исключения или неопубликованные группы заданий делают прогноз ненадёжным — вместо того чтобы молча возвращать уверенное, но неверное число. canvas_get_conversation передаёт auto_mark_as_read=false, поэтому агент, читающий ваши входящие, не помечает сообщения как прочитанные; это поведение проверено на реальной непрочитанной ветке, а не просто предполагается.

См. ROADMAP.md о планах на будущее и о том, почему операции записи намеренно выходят за рамки.

Быстрый старт

Установка не требуется — npx загружает его по запросу:

npx canvas-student-mcp

Или из исходников:

git clone https://github.com/xmike04/canvas-student-mcp.git
cd canvas-student-mcp
npm install && npm run build

Получить учётные данные

Вариант A — API-токен (если ваша школа это разрешает): Canvas → Аккаунт → Настройки → Утверждённые интеграции → + Новый токен доступа.

Вариант B — cookie сессии (для школ с ограничениями):

  1. Войдите в Canvas вашей школы в любом браузере

  2. Инструменты разработчика (Cmd/Ctrl+Shift+I) → вкладка Сеть → обновите страницу

  3. Нажмите на любой запрос к вашему домену Canvas → Заголовки запроса → скопируйте полное значение cookie: (или только пару canvas_session=... — этой одной cookie достаточно)

Любые учётные данные предоставляют доступ на чтение к вашему аккаунту Canvas. Относитесь к ним как к паролю.

Сохранить учётные данные (macOS: используйте Связку ключей)

Конфиги MCP-клиентов — это обычный JSON. На macOS вы можете полностью исключить из них учётные данные:

security add-generic-password -s canvas-student-mcp -a cookie -w 'canvas_session=PASTE_VALUE_HERE' -U

Используйте -a token вместо -a cookie для API-токена. Сервер сначала проверяет переменные окружения, затем Связку ключей, так что это опционально, и ничего не сломается, если вы пропустите этот шаг. CANVAS_NO_KEYCHAIN=1 отключает поиск.

Зарегистрировать в Claude

Claude Code — с учётными данными в Связке ключей конфиг не содержит никаких секретов:

claude mcp add canvas --scope user \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Передача учётных данных напрямую вместо использования Связки ключей:

claude mcp add canvas --scope user \
  --env 'CANVAS_COOKIE=canvas_session=PASTE_VALUE_HERE' \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/canvas-student-mcp/dist/index.js"],
      "env": {
        "CANVAS_COOKIE": "canvas_session=PASTE_VALUE_HERE",
        "CANVAS_BASE_URL": "https://yourschool.instructure.com"
      }
    }
  }
}

Используйте CANVAS_API_TOKEN вместо CANVAS_COOKIE для аутентификации по токену (токен имеет приоритет, если заданы оба). Проверьте с помощью: "проверь мой профиль Canvas."

Когда cookie истекает (ваша сессия в браузере завершается), каждый инструмент сообщит вам об этом — скопируйте новую и обновите конфиг. Если установлена галочка "оставаться в системе", сессии обычно живут неделями.

Навыки агента

Три готовых рабочих процесса поставляются в папке skills/. Скопируйте любой из них в ~/.claude/skills/ (или в .claude/skills/ вашего проекта), и Claude будет использовать их автоматически, когда запрос подходит:

Навык

Что делает

canvas-morning-check

Ежедневная сводка: что нужно сдать, новые объявления, непрочитанные сообщения, новые оценки

canvas-week-plan

Читает фактические задания и строит пошаговый план на неделю

canvas-grade-check

Текущее положение по оценкам плюс ответы на вопросы "что если", с учётом оговорок

cp -R skills/canvas-morning-check ~/.claude/skills/

Что можно спросить после подключения

  • "Что нужно сдать в ближайшие две недели по всем моим предметам?"

  • "Какая у меня текущая оценка по каждому курсу и какие задания я пропустил?"

  • "Обобщи объявления этой недели по всем моим курсам."

  • "Экспортируй мой курс BIOL 1710 и заархивируй его в мою папку Notion 'Школа'." (с коннектором Notion)

  • "Прочитай страницу 'Неделя 3' в моём курсе истории и опроси меня по ней."

Заметки по архитектуре

  • Транспорт stdio, без сохранения состояния — один процесс на сессию клиента, никаких портов, телеметрии или хранилища. Данные идут Canvas → этот процесс → ваш MCP-клиент, и никуда больше.

  • Автоматическая пагинация следует заголовкам Link: rel="next" Canvas, ограничена 5 страницами × 100 элементов с явными уведомлениями об усечении, чтобы контекст агента оставался в рамках.

  • Преобразование HTML в текст для учебных программ, описаний, объявлений и страниц — структурные теги превращаются в переносы строк/маркеры списков, ссылки становятся текст (url).

  • Схемы входных данных Zod для каждого инструмента; аннотации MCP (readOnlyHint) объявлены повсеместно.

Разработка

npm run build   # strict TypeScript compile
npm test        # smoke test: MCP handshake, all 30 tools register, error paths

Дымовой тест выполняется полностью офлайн — CI не требует учетной записи Canvas, и он устанавливает CANVAS_NO_KEYCHAIN=1, чтобы реальные сохраненные учетные данные не могли просочиться в тестовый запуск.

Релиз

Публикация выполняется из CI (.github/workflows/release.yml), поэтому никто не публикует с ноутбука:

npm version minor && git push --follow-tags

Отправка тега запускает сборку, полный набор тестов, проверку содержимого пакета и защиту, что тег соответствует package.json — затем публикует с provenance, что криптографически связывает опубликованный архив с коммитом и workflow, который его собрал. Ручной запуск workflow из вкладки Actions делает всё, кроме публикации, в качестве пробного запуска.

Модель безопасности

  • Только чтение: каждый вызов Canvas — это GET; ни один инструмент не может писать в Canvas. Даже чтение вашего почтового ящика оставляет сообщения непрочитанными.

  • Учетные данные хранятся в конфигурации окружения вашего MCP-клиента или в связке ключей macOS — никогда на диске в этом репозитории, никогда не передаются куда-либо, кроме домена Canvas вашего учебного заведения. Загрузка файлов следует за перенаправлениями вручную, чтобы учетные данные никогда не передавались в CDN.

  • Ротируйте по желанию: выйдите из Canvas (или отзовите токен), и учетные данные станут недействительными везде.

  • canvas_auth_status сообщает, какие учетные данные используются, где они хранятся и работают ли они до сих пор.

Лицензия

MIT

Install Server
A
license - permissive license
A
quality
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 MCP server for ClassQuill, a tutoring-business-management platform.

  • Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.

  • MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2

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/xmike04/canvas-student-mcp'

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