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 deployed
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseCqualityCmaintenanceLocal-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.1038 PyPI4MIT
- 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.1821,354 npm10MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.4 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Canvas LMS that exposes courses, assignments, modules, pages, files, grades, and submissions as tools for AI agents.-