Canvas LMS MCP Server
Canvas LMS MCP Server
Сервер Model Context Protocol, который предоставляет MCP-клиенту (Claude Desktop, Claude Code или любому другому приложению, говорящему на MCP) доступ только для чтения к вашему аккаунту Canvas LMS.
Он отвечает на два вопроса:
«Что я прохожу и как у меня дела?» — активные курсы с текущими оценками.
«Что мне ещё нужно сдать и когда срок?» — несданные задания со сроками сдачи.
Связь осуществляется через стандартный транспорт stdio, поэтому клиент запускает сервер как дочерний процесс. В stdout не выводится ничего, кроме MCP-трафика.
Требования
Node.js 18.17 или новее (сервер использует встроенный
fetch)Персональный токен доступа Canvas
Related MCP server: Canvas MCP Server
Установка
cd canvas-mcp-server
npm installКонфигурация
Обе переменные обязательны; сервер завершает работу с понятным сообщением, если какая-либо из них отсутствует.
Переменная | Описание | Пример |
| Корень вашего экземпляра Canvas. Завершающий |
|
| Персональный токен доступа Canvas. |
|
Получение токена доступа Canvas
Войдите в Canvas.
Перейдите в Account → Settings.
В разделе Approved Integrations нажмите + New Access Token.
Укажите назначение и (при желании) срок действия, затем нажмите Generate Token.
Скопируйте токен сразу же — Canvas показывает его только один раз.
Токен несёт все ваши привилегии Canvas. Не храните его в системе контроля версий и отзовите его на той же странице настроек, если он когда-либо утёк.
Подключение клиента
Добавьте сервер в конфигурацию вашего MCP-клиента, указав абсолютный путь к
src/index.js:
{
"mcpServers": {
"canvas": {
"command": "node",
"args": ["/absolute/path/to/canvas-mcp-server/src/index.js"],
"env": {
"CANVAS_API_URL": "https://asu.instructure.com",
"CANVAS_ACCESS_TOKEN": "your-token-here"
}
}
}
}Claude Desktop —
claude_desktop_config.json(macOS:~/Library/Application Support/Claude/, Windows:%APPDATA%\Claude\).Claude Code —
claude mcp add canvas --env CANVAS_API_URL=... --env CANVAS_ACCESS_TOKEN=... -- node /absolute/path/to/canvas-mcp-server/src/index.js
Перезапустите клиент после изменения конфигурации.
Инструменты
list_courses_and_grades
Все курсы, на которые вы активно зачислены как студент, с текущей оценкой.
Параметр | Тип | По умолчанию | Описание |
| boolean |
| Также включать активные зачисления с уже завершившихся семестров. |
Canvas сообщает оценки дважды, когда ваше учебное заведение использует периоды оценивания: один раз
за текущий период и один раз за весь курс. Поле grades.scope указывает,
на какой из них вы смотрите:
current_grading_period— оценка охватывает текущий период оценивания, аcourse_total_score/course_total_gradeсодержат показатели за весь курс.course_total— учебное заведение не использует периоды оценивания, поэтому оценка является итоговой по курсу.unavailable— Canvas не вернул зачисление с данными об оценках.
В рамках любого из этих значений current_* игнорирует работы, которые ещё не оценены, а
final_* учитывает неоценённые работы как ноль.
{
"courses": [
{
"id": "101",
"name": "Full Stack Web Development",
"course_code": "GIT-411",
"term": "Fall 2026",
"term_start": "2026-08-20T00:00:00Z",
"term_end": "2026-12-18T00:00:00Z",
"enrollment_state": "active",
"grades": {
"current_score": 88.0,
"current_grade": "B+",
"final_score": 80.5,
"final_grade": "B-",
"scope": "current_grading_period",
"grading_period_title": "Fall Term",
"course_total_score": 91.4,
"course_total_grade": "A-"
},
"html_url": "https://asu.instructure.com/courses/101"
}
],
"course_count": 1,
"retrieved_at": "2026-09-01T12:00:00.000Z"
}list_upcoming_assignments
Задания по вашим активным курсам, которые ещё не сданы, отсортированные по сроку сдачи — сначала ближайшие.
Параметр | Тип | По умолчанию | Описание |
| integer 1–365 или |
| Насколько далеко смотреть. |
| boolean |
| Включать просроченные работы, которые так и не были сданы. |
| boolean |
| Включать несданные работы без срока сдачи. |
| string[] | все активные курсы | Ограничить конкретными ID курсов Canvas. |
Задание считается несданным, когда оно опубликовано, подлежит оцениванию и не сдано, не оценено и не освобождено от сдачи. Конкретно отфильтровываются:
всё, у чего есть отметка времени отправки
отправки в состоянии
submitted,pending_reviewилиgradedзадания, освобождённые от сдачи
задания, у которых уже есть балл или оценка (введённые вручную или на бумаге)
задания
not_graded(заглушки посещаемости и тому подобное)неопубликованные задания
{
"assignments": [
{
"id": "9004",
"name": "Missed lab writeup",
"course_id": "101",
"course_name": "Full Stack Web Development",
"due_at": "2026-08-28T06:59:00.000Z",
"days_until_due": -4.2,
"overdue": true,
"points_possible": 25,
"submission_types": ["online_upload"],
"submission_state": "unsubmitted",
"missing": true,
"locked": false,
"unlock_at": null,
"lock_at": null,
"html_url": "https://asu.instructure.com/courses/101/assignments/9004"
}
],
"assignment_count": 1,
"courses_checked": 2,
"window": {
"from": "2026-09-01T12:00:00.000Z",
"to": "2026-09-15T12:00:00.000Z",
"include_overdue": true,
"include_undated": false
},
"errors": [],
"retrieved_at": "2026-09-01T12:00:00.000Z"
}Если один курс не удаётся прочитать — завершён, ограничен или вызывает ошибку — он
указывается в errors, а остальные курсы по-прежнему возвращают результаты.
Замечания о поведении
Пагинация. Canvas разбивает каждую коллекцию на страницы через заголовок
Link. Клиент следует заrel="next"по 100 записей на страницу, с ограничением в 20 страниц на конечную точку, чтобы ошибочный ответ не мог зациклиться навсегда.Параллельность. Задания загружаются не более чем с 5 курсов одновременно, чтобы не превышать лимиты частоты запросов Canvas.
Текущий семестр. По умолчанию возвращаются только курсы, семестр которых ещё не завершился. Семестр Canvas по умолчанию не имеет даты окончания и включается всегда.
Ошибки. Сбои Canvas возвращаются как ошибки MCP-инструмента с кодом состояния и собственным сообщением Canvas, а также подсказкой для типичных случаев (401 → неверный токен, 404 → неверный URL).
Только чтение. Оба инструмента помечены
readOnlyHint. Сервер отправляет толькоGET-запросы и никогда не изменяет ваши данные Canvas.
Разработка
npm test # 36 tests: API client, grade logic, filtering, and an end-to-end MCP round tripНабор тестов использует замену fetch с записанными ответами Canvas, поэтому сеть или
реальный токен не нужны. Все даты в фикстурах относительны к моменту запуска тестов.
src/
index.js MCP server: tool definitions, schemas, stdio wiring
canvas.js Canvas REST client: auth, pagination, error mapping
courses.js Active-course and grade normalization
assignments.js Outstanding-assignment filtering and due-date windowsЛицензия
MIT
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
- FlicenseAqualityNot gradedmaintenanceEnables interaction with Canvas LMS courses and assignments directly from your LLM, allowing you to retrieve, search, and summarize course information, check due dates, and access assignment details without leaving your AI assistant.4330
- FlicenseBqualityNot gradedmaintenanceProvides read-only access to Canvas LMS for students to retrieve courses, assignments, grades, files, discussions, and planner items. Includes optional NotebookLM integration for uploading course content to AI-powered study notebooks.45330
- AlicenseAqualityCmaintenanceEnables AI systems to interact with Canvas Learning Management System data, allowing users to access courses, assignments, quizzes, planner items, files, and syllabi through natural language queries.227MIT
- FlicenseBqualityDmaintenanceEnables interaction with Canvas LMS to access courses, modules, files, pages, assignments, submissions, announcements, upcoming deadlines, and syllabus.15
Related MCP Connectors
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Voice-led, FSRS-scheduled flashcards from YouTube, PDFs, web, or text. Auto-graded quizzes.
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
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/zwanner/canvas-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server