canvas-student-mcp
canvas-student-mcp
Сервер MCP для Canvas LMS, который работает, даже если ваша школа отключает создание API-токенов.
Предоставляет 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)
Инструмент | Что делает |
| Проверить учётные данные / кто я |
| Курсы с текущей оценкой (активные / завершённые / все) |
| Детали курса + полная учебная программа в виде текста |
| Задания по сроку сдачи со статусом вашей сдачи; фильтры по группам (предстоящие, просроченные, …) |
| Полное описание, рубрика, ваша сдача + оценка |
| Обзор оценок по всем курсам или разбивка по заданиям для одного курса |
| Объявления по активным курсам или по одному курсу / диапазону дат |
| Структура содержания курса с элементами |
| Вики-страницы курса, полный текст |
| Файлы курса + временные URL для скачивания |
| Темы для обсуждений и полные ветки |
| Тесты с датами сдачи, ограничениями по времени, попытками |
| Ваш список дел и предстоящие сроки |
| События или сроки сдачи заданий в заданном диапазоне дат |
| Чтение цепочек сообщений во входящих Canvas — не помечая их как прочитанные |
| Комментарии проверяющих и оценки по рубрикам на ваши работы |
| Оценка по группам заданий + калькулятор "что если": "что мне нужно получить за финал, чтобы вышла пятёрка?" |
| Лента планировщика с флагами новых активностей и статусом сдачи |
| Извлечение текста из файлов курса — PDF, Word, PowerPoint, Excel, HTML, обычный текст |
| Учебная программа в виде текста, введена ли она в Canvas или прикреплена как PDF/Word-файл |
| Ваши членства в группах |
| Состояние завершения модуля и что ещё требуется для каждого элемента |
| Назначенные вам рецензии коллег |
| Однокомандный экспорт всего курса в Markdown — создан для архивации в Notion |
| Диагностика подключения: какие учётные данные, где сохранены, всё ещё действительны? |
Три из них стоит выделить.
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 сессии (для школ с ограничениями):
Войдите в Canvas вашей школы в любом браузере
Инструменты разработчика (
Cmd/Ctrl+Shift+I) → вкладка Сеть → обновите страницуНажмите на любой запрос к вашему домену 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-mcpClaude 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 будет использовать их автоматически, когда запрос подходит:
Навык | Что делает |
| Ежедневная сводка: что нужно сдать, новые объявления, непрочитанные сообщения, новые оценки |
| Читает фактические задания и строит пошаговый план на неделю |
| Текущее положение по оценкам плюс ответы на вопросы "что если", с учётом оговорок |
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сообщает, какие учетные данные используются, где они хранятся и работают ли они до сих пор.
Лицензия
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
- Alicense-qualityCmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.59MIT
- AlicenseAqualityAmaintenanceMCP server for Canvas LMS enabling parent observers and students to access courses, assignments, grades, and more. Supports multiple authentication methods including token, OAuth, and a convenient fetchproxy fallback.18662MIT
- Alicense-qualityDmaintenanceMCP server that provides tools to read UBC Canvas LMS data, including courses, assignments, announcements, submissions, and calendar, for use with Claude Desktop, Claude Code, or n8n AI agents.59MIT
- Alicense-qualityDmaintenanceMCP server for Canvas LMS with automatic OAuth authentication. Enables interaction with courses, assignments, grades, modules, discussions, quizzes, files, calendar, messaging, and more without manual API token management.330MIT
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
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/xmike04/canvas-student-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server