CanvasLMS-API
CanvasLMS - API
CanvasLMS - API — это локальный MCP-сервер, который предоставляет ваш аккаунт Canvas LMS в распоряжение ИИ-ассистента. Он работает на вашем компьютере, общается с Canvas через ваш личный токен доступа и предоставляет около 100 инструментов, охватывающих курсы, задания, оценивание, обсуждения, модули, страницы, файлы, сообщения, взаимные рецензии и доступность. Каждый инструмент возвращает Markdown. Каждый инструмент, изменяющий Canvas, сначала показывает предпросмотр изменения и применяет его только после вашего подтверждения.
Быстрый старт
Получите личный токен доступа Canvas: в Canvas перейдите в Account > Settings > Approved Integrations > New Access Token.
Клонируйте репозиторий и установите его.
git clone https://github.com/harryx2011-boop/CanvasLMS-API.git cd CanvasLMS-API uv venv .venv uv pip install -e .Без
uvиспользуйте стандартное виртуальное окружение:python -m venv .venv .venv\Scripts\activate # Windows source .venv/bin/activate # macOS/Linux pip install -e .Скопируйте пример файла окружения и укажите ваш хост Canvas и токен.
cp .env.example .envПроверьте подключение.
canvaslms-api --testЭта команда выводит ваше имя, идентификатор пользователя и активные курсы. Если она завершается ошибкой, проверьте
CANVAS_URLиCANVAS_TOKENв.env.
Related MCP server: Canvas LMS MCP Server
Подключение к Claude Code
Windows:
claude mcp add --scope user canvaslms-api -- "<absolute path>\.venv\Scripts\canvaslms-api.exe"macOS/Linux:
claude mcp add --scope user canvaslms-api -- "<absolute path>/.venv/bin/canvaslms-api"Сервер читает .env из папки репозитория при запуске, поэтому переменные окружения не нужно указывать в конфигурации клиента. Используйте абсолютный путь к исполняемому файлу внутри .venv.
Подключение к Claude Desktop
Добавьте запись в файл конфигурации Claude Desktop:
{
"mcpServers": {
"canvaslms-api": {
"command": "<absolute path>\\.venv\\Scripts\\canvaslms-api.exe"
}
}
}В macOS/Linux укажите <absolute path>/.venv/bin/canvaslms-api в поле command.
Расположение файлов конфигурации:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Перезапустите Claude Desktop после изменения файла.
Другие клиенты
Любой MCP-клиент, поддерживающий stdio-серверы, может запускать исполняемый файл напрямую, так же как Claude Code и Claude Desktop выше.
Для клиентов, работающих только по HTTP, запустите сервер с HTTP-транспортом:
canvaslms-api --transport http --host 127.0.0.1 --port 7100Укажите клиенту адрес http://127.0.0.1:7100. Сервер по-прежнему читает учётные данные Canvas из .env в папке репозитория.
Поведение сервера
Идентификаторы курсов. Аргумент
courseпринимает числовой идентификатор Canvas, код курса (ENG101), часть названия курса илиsis_course_id:X. Если вы не уверены, какой курс нужен, сначала используйтеlist_courses.Шлюз подтверждения. Каждый инструмент, изменяющий Canvas, принимает аргумент
confirm: bool = false. При вызове без него инструмент возвращает предпросмотр того, что изменится, и не отправляет запрос, изменяющий Canvas. После просмотра предпросмотра вызовите его снова сconfirm=true.Права доступа. Каждый инструмент работает от имени владельца токена. Студенческий токен не может видеть личные данные других студентов или использовать инструменты преподавателя, такие как оценивание или массовая рассылка; такие вызовы возвращают ошибку 403 от Canvas с подсказкой о том, какого разрешения не хватает.
Вывод. Каждый инструмент возвращает Markdown, отформатированный для прямого отображения в переписке чата.
Анонимизация. Когда
CANVAS_ANONYMIZE_STUDENTS=true, имена студентов в выводе инструментов заменяются на стабильный псевдоним для каждого курса вместо настоящего имени.
Справочник инструментов
Инструменты записи (помечены confirm) возвращают предпросмотр, пока не будут вызваны снова с confirm=true.
Курсы и идентификация
Tool | Назначение | confirm |
get_profile | Получить профиль Canvas владельца токена | |
get_enrollments | Список записей на курсы владельца токена | |
list_courses | Список и поиск курсов, доступных владельцу токена | |
get_course | Получить сведения об одном курсе | |
get_syllabus | Получить текст силлабуса курса | |
get_course_overview | Сводка по курсу: силлабус, модули, предстоящие работы | |
get_course_structure | Получить полную структуру курса: модули/страницы/задания | |
get_cache_status | Показать, какие данные разрешения курсов кэшированы | |
clear_cache | Очистить кэш разрешения курсов |
Студент
Tool | Назначение | confirm |
get_upcoming_assignments | Список заданий с ближайшим сроком сдачи по курсам | |
get_todo | Получить список дел Canvas | |
get_submission_status | Показать статус сданных/пропущенных/оценённых работ по курсу | |
get_grades | Получить текущие оценки по одному или всем курсам | |
get_pending_peer_reviews | Список взаимных рецензий, которые ещё должен сделать владелец токена | |
get_submission | Получить сведения об одной работе и отзыв | |
submit_assignment | Сдать задание | confirm |
comment_on_submission | Добавить комментарий к работе | confirm |
mark_module_item_done | Отметить элемент модуля выполненным | confirm |
Задания и оценивание
Tool | Назначение | confirm |
list_assignments | Список заданий курса | |
get_assignment | Получить сведения об одном задании | |
list_submissions | Список работ по заданию | |
get_assignment_analytics | Сводка по сдаче и распределению оценок по заданию | |
get_student_analytics | Сводка активности одного студента в курсе | |
create_assignment | Создать задание | confirm |
update_assignment | Обновить задание | confirm |
bulk_grade_submissions | Оценить несколько работ одним вызовом | confirm |
grade_with_rubric | Оценить работу по рубрике | confirm |
Рубрики
Tool | Назначение | confirm |
list_rubrics | Список рубрик курса | |
get_rubric | Получить критерии одной рубрики | |
get_rubric_assessment | Получить оценку работы по рубрике | |
create_rubric | Создать рубрику | confirm |
create_rubric_from_csv | Создать рубрику из CSV-определения | confirm |
associate_rubric | Прикрепить рубрику к заданию | confirm |
Обсуждения и объявления
Tool | Назначение | confirm |
list_discussion_topics | Список тем обсуждений курса | |
get_discussion_topic | Получить одну тему обсуждения | |
list_discussion_entries | Список записей верхнего уровня в теме | |
get_discussion_entry | Получить одну запись обсуждения | |
get_discussion_thread | Получить полную ветку с ответами | |
post_discussion_entry | Опубликовать новую запись в теме | confirm |
reply_to_discussion_entry | Ответить на существующую запись | confirm |
create_discussion_topic | Создать тему обсуждения | confirm |
update_discussion_topic | Обновить тему обсуждения | confirm |
list_announcements | Список объявлений курса | |
create_announcement | Создать объявление | confirm |
delete_announcement | Удалить одно объявление | confirm |
delete_announcements | Удалить несколько объявлений по id | confirm |
delete_announcements_matching | Удалить объявления, соответствующие фильтру | confirm |
Модули
Tool | Назначение | confirm |
list_modules | Список модулей курса | |
list_module_items | Список элементов модуля | |
create_module | Создать модуль | confirm |
update_module | Обновить модуль | confirm |
delete_module | Удалить модуль | confirm |
add_module_item | Добавить элемент в модуль | confirm |
update_module_item | Обновить элемент модуля | confirm |
delete_module_item | Удалить элемент модуля | confirm |
Страницы
Tool | Назначение | confirm |
list_pages | Список страниц курса | |
get_page | Получить метаданные одной страницы | |
get_page_content | Получить содержимое одной страницы | |
get_front_page | Получить главную страницу курса | |
create_page | Создать страницу | confirm |
edit_page_content | Заменить содержимое страницы | confirm |
update_page_settings | Обновить настройки страницы (заголовок, статус публикации, права редактирования) | confirm |
bulk_update_pages | Применить одно и то же изменение к нескольким страницам | confirm |
delete_page | Удалить страницу | confirm |
Файлы
Tool | Назначение | confirm |
list_files | Список файлов курса | |
read_file | Прочитать содержимое текстового файла | |
download_file | Скачать файл на диск | |
upload_file | Загрузить файл в курс | confirm |
Сообщения
Tool | Назначение | confirm |
list_conversations | Список переписок в Canvas Inbox | |
get_conversation | Получить сообщения одной переписки | |
get_unread_count | Получить количество непрочитанных сообщений | |
mark_conversations_read | Отметить переписки прочитанными | confirm |
send_conversation | Отправить новое сообщение | confirm |
send_bulk_messages | Отправить одно сообщение нескольким получателям | confirm |
Взаимные рецензии
Tool | Purpose | confirm |
list_peer_reviews | Список заданий на взаимное рецензирование для задания | |
assign_peer_review | Назначить взаимное рецензирование | confirm |
get_peer_review_assignments | Показать, кто кого рецензирует | |
get_peer_review_completion_analytics | Сводка по доле завершённых взаимных рецензий | |
get_peer_review_followup_list | Список студентов, которые ещё не сдали взаимную рецензию | |
get_peer_review_comments | Получить комментарии, оставленные во взаимной рецензии | |
analyze_peer_review_quality | Оценить глубину и полезность отзывов взаимного рецензирования | |
identify_problematic_peer_reviews | Отметить небрежные или отсутствующие взаимные рецензии | |
generate_peer_review_report | Сформировать сводный отчёт об активности взаимного рецензирования | |
generate_peer_review_feedback_report | Сформировать отчёт о содержании отзывов во взаимных рецензиях | |
extract_peer_review_dataset | Экспортировать данные взаимного рецензирования для анализа | |
message_peer_reviewers | Написать студентам об их заданиях на взаимное рецензирование | confirm |
send_peer_review_followups | Отправить напоминания студентам с несданными взаимными рецензиями | confirm |
Люди и конфиденциальность
Tool | Purpose | confirm |
list_users | Список зачисленных пользователей курса | |
list_groups | Список групп курса | |
check_enrollment | Проверить зачисление пользователя на курс | |
export_anonymization_map | Экспортировать соответствие псевдонимов реальным именам | confirm |
get_privacy_status | Показать, активна ли анонимизация |
Доступность
Tool | Purpose | confirm |
scan_course_content_accessibility | Проверить страницы и файлы курса на проблемы доступности | |
fix_accessibility_issues | Применить исправления для обнаруженных проблем доступности | confirm |
fetch_ufixit_report | Получить существующий отчёт UFIXIT о доступности | |
parse_ufixit_violations | Извлечь нарушения из отчёта UFIXIT | |
format_accessibility_summary | Оформить проверку доступности в виде читаемой сводки |
Копирование курса
Tool | Purpose | confirm |
create_content_migration | Запустить перенос/копирование содержимого курса | confirm |
get_content_migration_status | Проверить ход переноса содержимого |
Мета
Tool | Purpose | confirm |
search_tools | Поиск доступных инструментов по ключевому слову |
Конфигурация
Вся конфигурация задаётся через переменные окружения, загружаемые из файла .env в корне репозитория.
Variable | Required | Default | Purpose |
| да | Хост Canvas, например | |
| да | Ваш персональный токен доступа Canvas. | |
| нет |
| Таймаут HTTP-запросов, в секундах. |
| нет |
| Сколько секунд кэшируются результаты определения курса. |
| нет |
| Максимальное число одновременных запросов к Canvas. |
| нет |
| Заменять имена студентов на стабильные псевдонимы в выводе инструментов. |
| нет | системная временная папка | Куда |
Выполните canvaslms-api --config, чтобы вывести итоговую конфигурацию с замаскированным токеном.
Разработка
Установка с dev-дополнениями:
uv pip install -e ".[dev]"Запуск тестов:
pytestЛинтинг:
ruff check .CI запускает тесты и линтинг при каждом push. Также доступен Docker-образ; его точка входа — canvaslms-api.
Полезные флаги CLI при разработке: canvaslms-api --list-tools выводит имена всех зарегистрированных инструментов, canvaslms-api --config выводит итоговые настройки, canvaslms-api --version выводит установленную версию.
Заметки о безопасности
Ваш токен Canvas остаётся локальным. Он читается из
.envпри запуске и используется только для вызова настроенного вами API Canvas.Токен никогда не попадает в журналы.
--configиget_privacy_statusмаскируют его.Инструменты записи требуют явного
confirm=trueпосле предпросмотра. В Canvas ничего не меняется случайно.download_fileне перезапишет существующий файл по пути назначения.
Лицензия
MIT. См. LICENSE.
This server cannot be installed
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
- AlicenseCqualityAmaintenanceLocal-first MCP server for Canvas LMS. Stdio transport, no third-party broker, token stays in ~/.canvas.env. Exposes courses, assignments, modules, announcements, grades, planner items, upcoming events, todo list, and bulk file dump as MCP tools.104MIT
- AlicenseBqualityAmaintenanceMCP server for Canvas LMS, providing 115+ tools to read courses, assignments, submissions, rubrics, quizzes; grade, comment, manage course content, and handle Canvas admin workflows from any AI agent.241639955MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.59MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Canvas LMS that exposes courses, assignments, modules, pages, files, grades, and submissions as tools for AI agents.
Related MCP Connectors
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
An MCP server that gives your AI access to the source code and docs of all public github repos
Connect AI agents to Flato's editable canvas runtime through a hosted MCP server.
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/harryx2011-boop/CanvasLMS-API'
If you have feedback or need assistance with the MCP directory API, please join our Discord server