Skip to main content
Glama

Codex Canvas MCP

Локальный переносимый MCP-сервер, который позволяет совместимым клиентам читать Canvas и, только после нескольких независимых проверок безопасности, создавать типовой контент курса.

Модель безопасности

  • Чтение Canvas доступно по умолчанию после локальной настройки учётных данных.

  • Запись отключена по умолчанию.

  • Каждая запись контента требует включённой локальной политики, точного совпадения с разрешённым списком для конкретного курса, точного текста подтверждения и одобрения в MCP-клиенте.

  • Загрузка изображений добавляет дополнительный барьер: только локально принадлежащий PNG, JPEG или WebP внутри одной настроенной доверенной папки, размером не более 10 МиБ, может быть отправлен.

  • Не существует универсального инструмента записи в Canvas.

  • Учётные данные хранятся в 1Password и, опционально, в связке ключей macOS. Они не должны находиться в этом репозитории или в конфигурации клиента.

Каждый инструмент работы с контентом помечен как изменяющий и разрушительный, чтобы совместимые клиенты могли требовать одобрения. Локальный сервер также отклоняет вызов, если его точное подтверждение не совпадает с запрошенным действием, например APPROVE CANVAS MODULE WRITE course <course_id>.

Создание рубрики принимает URL задания Canvas с тем же источником, URL элемента модуля задания или URL курса, содержащий параметр запроса assignment_id. Строки запроса и фрагменты игнорируются после того, как курс и задание определены. URL никогда не обходит политику курса: его идентификатор курса должен быть явно включён в разрешённый список, а создание рубрики требует APPROVE CANVAS RUBRIC WRITE course <course_id>. Инструмент отказывается заменять существующую рубрику задания, требует описания для каждого критерия и оценки, а также требует, чтобы баллы рубрики оценивания совпадали с баллами задания.

Related MCP server: CoursePack Local MCP Server

Что включено

Инструмент

Возможность

По умолчанию

canvas_get_current_user

Чтение аутентифицированного профиля

Доступен

canvas_list_modules

Чтение модулей и элементов для одного курса

Доступен

canvas_read_api

GET нормализованного пути Canvas API v1

Доступен

canvas_get_write_policy

Просмотр состояния локальной политики

Доступен

canvas_upload_image

Загрузка одного проверенного изображения из настроенной доверенной папки

Заблокирован

canvas_write_page

Создание или обновление одной страницы

Заблокирован

canvas_create_module

Создание одного модуля

Заблокирован

canvas_create_module_item

Размещение одного элемента контента в модуле

Заблокирован

canvas_create_assignment

Создание одного задания

Заблокирован

canvas_create_assignment_rubric

Создание и прикрепление одной рубрики задания из URL Canvas

Заблокирован

canvas_create_discussion

Создание одного обсуждения

Заблокирован

canvas_create_classic_quiz

Создание одного классического теста

Заблокирован

canvas_create_classic_quiz_question

Добавление одного вопроса в классический тест

Заблокирован

canvas_delete_page

Удаление одной страницы

Заблокирован

canvas_delete_assignment

Удаление одного задания

Заблокирован

canvas_delete_discussion

Удаление одного обсуждения

Заблокирован

canvas_delete_classic_quiz

Удаление одного классического теста

Заблокирован

canvas_delete_module

Удаление одного модуля и его размещений элементов

Заблокирован

Настройка нового Mac

Предварительные требования: Python 3.11 или новее, CLI 1Password, сервисный аккаунт 1Password, который может читать только предназначенный элемент учётных данных Canvas, и токен Canvas API с минимальными привилегиями, необходимыми для вашей работы.

  1. Клонируйте и установите в изолированное окружение:

    git clone https://github.com/mrchris-ai/codex_canvas_mcp.git
    cd codex_canvas_mcp
    python3 -m venv .venv
    . .venv/bin/activate
    python -m pip install --upgrade pip
    python -m pip install -e .
  2. Создайте элемент 1Password, скрытое поле которого содержит токен Canvas API. Предоставьте сервисному аккаунту доступ на чтение только к содержащему хранилищу/элементу. Запишите имя хранилища, имя или ID элемента и метку скрытого поля; не помещайте их значения в этот репозиторий.

  3. Выберите один способ доставки токена сервисного аккаунта:

    • Для кратковременной сессии оболочки укажите OP_SERVICE_ACCOUNT_TOKEN процессу MCP-сервера через ваш локальный секретный лаунчер.

    • На macOS сохраните этот токен в связке ключей и настройте несекретные метки поиска. Пример команды (она запрашивает ввод безопасно; не помещайте токен в командную строку):

      security add-generic-password -U -s "your-service-label" -a "your-account-label" -w
  4. Настройте процесс сервера с этими несекретными значениями:

    Переменная

    Назначение

    CANVAS_BASE_URL

    HTTPS-источник Canvas, например https://school.instructure.com

    CANVAS_OP_VAULT

    Имя или ID хранилища 1Password

    CANVAS_OP_ITEM

    Имя или ID элемента учётных данных Canvas

    CANVAS_OP_FIELD

    Метка скрытого поля токена; по умолчанию credential

    CANVAS_KEYCHAIN_SERVICE

    Метка службы связки ключей macOS, если не используется OP_SERVICE_ACCOUNT_TOKEN

    CANVAS_KEYCHAIN_ACCOUNT

    Метка аккаунта связки ключей macOS, если не используется OP_SERVICE_ACCOUNT_TOKEN

    CANVAS_IMAGE_UPLOAD_ROOT

    Абсолютный путь к единственной локальной папке, из которой разрешена загрузка изображений

  5. Проверьте только протокол и защитные барьеры, не обращаясь к Canvas и не читая учётные данные:

    python -m unittest discover -s tests -v
    printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | python -m canvas_mcp
  6. Добавьте stdio-сервер в Codex. Форма на уровне проекта:

    [mcp_servers.canvas]
    command = "/absolute/path/to/codex_canvas_mcp/.venv/bin/python"
    args = ["-m", "canvas_mcp"]
    
    [mcp_servers.canvas.env]
    CANVAS_BASE_URL = "https://school.instructure.com"
    CANVAS_OP_VAULT = "your-vault"
    CANVAS_OP_ITEM = "your-item"
    CANVAS_OP_FIELD = "credential"
    CANVAS_KEYCHAIN_SERVICE = "your-service-label"
    CANVAS_KEYCHAIN_ACCOUNT = "your-account-label"
    CANVAS_IMAGE_UPLOAD_ROOT = "/absolute/path/to/reviewed/canvas-images"

    Поместите это в .codex/config.toml доверенного проекта или в вашу личную конфигурацию Codex. Не добавляйте секретные значения. Перезапустите или откройте новую задачу после изменения конфигурации MCP, затем проверьте перечисленные инструменты перед запросом данных Canvas.

Совместимость с ChatGPT

Этот репозиторий реализует локальный stdio MCP-сервер для Codex и других клиентов, поддерживающих локальный stdio MCP. Текущие пользовательские приложения ChatGPT не подключаются напрямую к локальному stdio-серверу. Текущие рекомендации OpenAI — предоставлять частный локальный MCP через Secure MCP Tunnel (или развернуть проверенную удалённую конечную точку MCP), в зависимости от доступности плана и администратора рабочего пространства. Не открывайте этот процесс напрямую в публичный интернет.

См. Developer mode and MCP apps in ChatGPT перед попыткой настройки ChatGPT; доступность и поведение одобрения могут меняться.

Включение инструментов создания контента

Держите запись выключенной, если конкретная задача не требует её.

  1. Скопируйте config/write-policy.example.json в место вне репозитория.

  2. Добавьте только точные идентификаторы курсов Canvas, одобренных для создания контента.

  3. Установите enabled в true и ограничьте доступ к файлу:

    chmod 600 /absolute/private/path/write-policy.json
  4. Добавьте CANVAS_WRITE_POLICY=/absolute/private/path/write-policy.json в окружение MCP-сервера.

  5. Перезапустите клиент и вызовите canvas_get_write_policy, чтобы проверить действующую политику.

  6. Для каждой записи контента проверьте точную цель и полезную нагрузку. Укажите фразу подтверждения, специфичную для действия, и одобрите изменяющее действие в клиенте.

  7. Снова отключите политику, когда задача будет завершена.

Если переменная отсутствует, файл отсутствует, права доступа шире, чем 0600, запись отключена или курс не входит в разрешённый список, сервер отказывает в записи.

Включение загрузки изображений

Загрузка изображений использует ту же локальную политику записи и точный разрешённый список курсов, плюс CANVAS_IMAGE_UPLOAD_ROOT. Инструмент отказывает в относительных путях, символических ссылках, файлах вне этого корня, файлах, не принадлежащих текущему пользователю, неподдерживаемых типах изображений, файлах, чья бинарная сигнатура не соответствует расширению, и файлах размером более 10 МиБ. Точное подтверждение: APPROVE CANVAS IMAGE UPLOAD course <course_id>.

Canvas использует документированный трёхэтапный обмен для загрузки: инициализация файла курса через аутентифицированный API, отправка изображения без токена доступа Canvas на возвращённый Canvas HTTPS-адрес хранилища и аутентификация возвращённого местоположения завершения Canvas с тем же источником. Затем инструмент читает /api/v1/courses/<course_id>/files/<file_id> и проверяет MIME-тип и размер перед возвратом постоянного пути предпросмотра курса. Он никогда не возвращает сигнатуры хранилища или URL-верификатор загрузки файла.

Текущая граница создания контента

Этот проект является источником истины для общего локального Canvas MCP, используемого поддерживаемыми чатами на этом Mac. Он может создавать страницы, модули и элементы модулей, задания и рубрики заданий, обсуждения и классические тесты с вопросами после обычных политик и барьеров одобрения. Он также предоставляет инструменты удаления для конкретных ресурсов: страниц, заданий, обсуждений, классических тестов и модулей; удаление модуля удаляет его размещения элементов, но не базовый контент курса. Его единственная возможность работы с локальными файлами — загрузчик изображений с ограничением полезной нагрузки, описанный выше. Общая загрузка файлов, New Quizzes и администрирование аккаунта/курса остаются неподдерживаемыми.

См. docs/2026-08-06-content-authoring-extension.md для записи реализации и сквозной проверки. См. docs/2026-08-16-image-upload-extension.md для модели угроз загрузки изображений и записи проверки.

Разработка

python -m pip install -e .
python -m unittest discover -s tests -v
python -m compileall -q src tests

Тесты имитируют сетевые и учётные границы. См. AGENTS.md для инвариантов, которые участники должны сохранять, и ROADMAP.md для намеренно отложенных административных функций.

F
license - not found
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

  • MCP server for the Inistate platform: module discovery, entry management, and activity submission.

  • A MCP server built for developers enabling Git based project management with project and personal…

  • An MCP server for deep research or task groups

View all MCP Connectors

Latest Blog Posts

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/mrchris-ai/codex_canvas_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server