codex_canvas_mcp
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
Что включено
Инструмент | Возможность | По умолчанию |
| Чтение аутентифицированного профиля | Доступен |
| Чтение модулей и элементов для одного курса | Доступен |
| GET нормализованного пути Canvas API v1 | Доступен |
| Просмотр состояния локальной политики | Доступен |
| Загрузка одного проверенного изображения из настроенной доверенной папки | Заблокирован |
| Создание или обновление одной страницы | Заблокирован |
| Создание одного модуля | Заблокирован |
| Размещение одного элемента контента в модуле | Заблокирован |
| Создание одного задания | Заблокирован |
| Создание и прикрепление одной рубрики задания из URL Canvas | Заблокирован |
| Создание одного обсуждения | Заблокирован |
| Создание одного классического теста | Заблокирован |
| Добавление одного вопроса в классический тест | Заблокирован |
| Удаление одной страницы | Заблокирован |
| Удаление одного задания | Заблокирован |
| Удаление одного обсуждения | Заблокирован |
| Удаление одного классического теста | Заблокирован |
| Удаление одного модуля и его размещений элементов | Заблокирован |
Настройка нового Mac
Предварительные требования: Python 3.11 или новее, CLI 1Password, сервисный аккаунт 1Password, который может читать только предназначенный элемент учётных данных Canvas, и токен Canvas API с минимальными привилегиями, необходимыми для вашей работы.
Клонируйте и установите в изолированное окружение:
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 .Создайте элемент 1Password, скрытое поле которого содержит токен Canvas API. Предоставьте сервисному аккаунту доступ на чтение только к содержащему хранилищу/элементу. Запишите имя хранилища, имя или ID элемента и метку скрытого поля; не помещайте их значения в этот репозиторий.
Выберите один способ доставки токена сервисного аккаунта:
Для кратковременной сессии оболочки укажите
OP_SERVICE_ACCOUNT_TOKENпроцессу MCP-сервера через ваш локальный секретный лаунчер.На macOS сохраните этот токен в связке ключей и настройте несекретные метки поиска. Пример команды (она запрашивает ввод безопасно; не помещайте токен в командную строку):
security add-generic-password -U -s "your-service-label" -a "your-account-label" -w
Настройте процесс сервера с этими несекретными значениями:
Переменная
Назначение
CANVAS_BASE_URLHTTPS-источник Canvas, например
https://school.instructure.comCANVAS_OP_VAULTИмя или ID хранилища 1Password
CANVAS_OP_ITEMИмя или ID элемента учётных данных Canvas
CANVAS_OP_FIELDМетка скрытого поля токена; по умолчанию
credentialCANVAS_KEYCHAIN_SERVICEМетка службы связки ключей macOS, если не используется
OP_SERVICE_ACCOUNT_TOKENCANVAS_KEYCHAIN_ACCOUNTМетка аккаунта связки ключей macOS, если не используется
OP_SERVICE_ACCOUNT_TOKENCANVAS_IMAGE_UPLOAD_ROOTАбсолютный путь к единственной локальной папке, из которой разрешена загрузка изображений
Проверьте только протокол и защитные барьеры, не обращаясь к Canvas и не читая учётные данные:
python -m unittest discover -s tests -v printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | python -m canvas_mcpДобавьте 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; доступность и поведение одобрения могут меняться.
Включение инструментов создания контента
Держите запись выключенной, если конкретная задача не требует её.
Скопируйте
config/write-policy.example.jsonв место вне репозитория.Добавьте только точные идентификаторы курсов Canvas, одобренных для создания контента.
Установите
enabledвtrueи ограничьте доступ к файлу:chmod 600 /absolute/private/path/write-policy.jsonДобавьте
CANVAS_WRITE_POLICY=/absolute/private/path/write-policy.jsonв окружение MCP-сервера.Перезапустите клиент и вызовите
canvas_get_write_policy, чтобы проверить действующую политику.Для каждой записи контента проверьте точную цель и полезную нагрузку. Укажите фразу подтверждения, специфичную для действия, и одобрите изменяющее действие в клиенте.
Снова отключите политику, когда задача будет завершена.
Если переменная отсутствует, файл отсутствует, права доступа шире, чем 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 для намеренно отложенных административных функций.
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
- AlicenseNot gradedqualityCmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.19MIT
- FlicenseNot gradedqualityAmaintenanceRead-only MCP server that provides Claude Desktop with access to converted Canvas course exports, including Markdown files, reports, and search tools for local course content.
- AlicenseNot gradedqualityCmaintenanceA remote MCP server for querying Canvas LMS courses, assignments, and grades. Enables natural language interaction with Canvas data via MCP clients like Claude Desktop.19MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Canvas LMS with automatic OAuth authentication. Enables interaction with courses, assignments, grades, modules, discussions, quizzes, files, calendar, messaging, and more without manual API token management.339MIT
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
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/mrchris-ai/codex_canvas_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server