Skip to main content
Glama

CanvasLMS - API

CanvasLMS - API — это локальный MCP-сервер, который предоставляет ваш аккаунт Canvas LMS в распоряжение ИИ-ассистента. Он работает на вашем компьютере, общается с Canvas через ваш личный токен доступа и предоставляет около 100 инструментов, охватывающих курсы, задания, оценивание, обсуждения, модули, страницы, файлы, сообщения, взаимные рецензии и доступность. Каждый инструмент возвращает Markdown. Каждый инструмент, изменяющий Canvas, сначала показывает предпросмотр изменения и применяет его только после вашего подтверждения.

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

  1. Получите личный токен доступа Canvas: в Canvas перейдите в Account > Settings > Approved Integrations > New Access Token.

  2. Клонируйте репозиторий и установите его.

    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 .
  3. Скопируйте пример файла окружения и укажите ваш хост Canvas и токен.

    cp .env.example .env
  4. Проверьте подключение.

    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.json

  • macOS: ~/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_URL

да

Хост Canvas, например https://yourschool.instructure.com. Без суффикса /api/v1.

CANVAS_TOKEN

да

Ваш персональный токен доступа Canvas.

CANVAS_TIMEOUT

нет

30

Таймаут HTTP-запросов, в секундах.

CANVAS_CACHE_TTL

нет

300

Сколько секунд кэшируются результаты определения курса.

CANVAS_MAX_CONCURRENCY

нет

5

Максимальное число одновременных запросов к Canvas.

CANVAS_ANONYMIZE_STUDENTS

нет

false

Заменять имена студентов на стабильные псевдонимы в выводе инструментов.

CANVAS_DOWNLOAD_DIR

нет

системная временная папка

Куда download_file сохраняет скачанные файлы.

Выполните 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.

Related MCP Connectors

Related MCP Servers