Skip to main content
Glama

Codex Canvas MCP

Un servidor MCP local y portátil que permite a clientes compatibles leer Canvas y, solo después de varias comprobaciones de seguridad independientes, crear contenido común de curso.

Modelo de seguridad

  • Las lecturas de Canvas están disponibles por defecto tras la configuración local de credenciales.

  • La escritura está deshabilitada por defecto.

  • Cada escritura de contenido requiere una política local habilitada, una coincidencia exacta en la lista de permitidos por curso, un texto de confirmación exacto y la aprobación en el cliente MCP.

  • La subida de imágenes añade una comprobación de carga útil: solo se puede enviar un PNG, JPEG o WebP de propiedad local dentro de una carpeta de confianza configurada, con un tamaño máximo de 10 MiB.

  • No existe una herramienta genérica de escritura en Canvas.

  • Las credenciales permanecen en 1Password y, opcionalmente, en el Llavero de macOS. No pertenecen a este repositorio ni a la configuración del cliente.

Cada herramienta de contenido está marcada como mutante y destructiva para que los clientes compatibles puedan exigir aprobación. El servidor local también rechaza una llamada a menos que su confirmación exacta coincida con la acción solicitada, por ejemplo APPROVE CANVAS MODULE WRITE course <course_id>.

La creación de rúbricas acepta una URL de asignación de Canvas del mismo origen, una URL de elemento de módulo de asignación o una URL de curso que contenga un parámetro de consulta assignment_id. Las cadenas de consulta y los fragmentos se ignoran después de resolver el curso y la asignación. La URL nunca elude la política del curso: su ID de curso debe estar explícitamente en la lista de permitidos, y la creación de rúbricas requiere APPROVE CANVAS RUBRIC WRITE course <course_id>. La herramienta se niega a reemplazar una rúbrica de asignación existente, requiere descripciones para cada criterio y calificación, y exige que los puntos de la rúbrica de calificación coincidan con los puntos de la asignación.

Related MCP server: CoursePack Local MCP Server

Qué se incluye

Herramienta

Capacidad

Por defecto

canvas_get_current_user

Leer el perfil autenticado

Disponible

canvas_list_modules

Leer módulos y elementos de un curso

Disponible

canvas_read_api

GET de una ruta normalizada de la API v1 de Canvas

Disponible

canvas_get_write_policy

Inspeccionar el estado de la política local

Disponible

canvas_upload_image

Subir una imagen verificada desde la carpeta de confianza configurada

Bloqueado

canvas_write_page

Crear o actualizar una página

Bloqueado

canvas_create_module

Crear un módulo

Bloqueado

canvas_create_module_item

Colocar un elemento de contenido en un módulo

Bloqueado

canvas_create_assignment

Crear una asignación

Bloqueado

canvas_create_assignment_rubric

Crear y adjuntar una rúbrica de asignación desde una URL de Canvas

Bloqueado

canvas_create_discussion

Crear un debate

Bloqueado

canvas_create_classic_quiz

Crear un Cuestionario Clásico

Bloqueado

canvas_create_classic_quiz_question

Añadir una pregunta a un Cuestionario Clásico

Bloqueado

canvas_delete_page

Eliminar una página

Bloqueado

canvas_delete_assignment

Eliminar una asignación

Bloqueado

canvas_delete_discussion

Eliminar un debate

Bloqueado

canvas_delete_classic_quiz

Eliminar un Cuestionario Clásico

Bloqueado

canvas_delete_module

Eliminar un módulo y sus ubicaciones de elementos

Bloqueado

Configurar un nuevo Mac

Requisitos previos: Python 3.11 o superior, la CLI de 1Password, una cuenta de servicio de 1Password que pueda leer solo el elemento de credenciales de Canvas previsto, y un token de API de Canvas con los privilegios mínimos prácticos para tu trabajo.

  1. Clona e instala en un entorno aislado:

    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. Crea un elemento de 1Password cuyo campo oculto contenga el token de API de Canvas. Da a la cuenta de servicio acceso de lectura solo al contenedor/elemento correspondiente. Anota el nombre del contenedor, el nombre o ID del elemento y la etiqueta del campo oculto; no pongas sus valores en este repositorio.

  3. Elige un método de entrega del token de cuenta de servicio:

    • Para una sesión de shell de corta duración, proporciona OP_SERVICE_ACCOUNT_TOKEN al proceso del servidor MCP a través de tu lanzador de secretos local.

    • En macOS, guarda ese token en el Llavero y configura etiquetas de búsqueda no secretas. Ejemplo de comando (solicita de forma segura; no pongas el token en la línea de comandos):

      security add-generic-password -U -s "your-service-label" -a "your-account-label" -w
  4. Configura el proceso del servidor con estos valores no secretos:

    Variable

    Propósito

    CANVAS_BASE_URL

    Origen HTTPS de Canvas, como https://school.instructure.com

    CANVAS_OP_VAULT

    Nombre o ID del contenedor de 1Password

    CANVAS_OP_ITEM

    Nombre o ID del elemento de credenciales de Canvas

    CANVAS_OP_FIELD

    Etiqueta del campo de token oculto; por defecto credential

    CANVAS_KEYCHAIN_SERVICE

    Etiqueta de servicio del Llavero de macOS cuando no se usa OP_SERVICE_ACCOUNT_TOKEN

    CANVAS_KEYCHAIN_ACCOUNT

    Etiqueta de cuenta del Llavero de macOS cuando no se usa OP_SERVICE_ACCOUNT_TOKEN

    CANVAS_IMAGE_UPLOAD_ROOT

    Ruta absoluta a la única carpeta local desde la que se permite subir imágenes

  5. Prueba solo el protocolo y las comprobaciones de seguridad, sin contactar con Canvas ni leer credenciales:

    python -m unittest discover -s tests -v
    printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | python -m canvas_mcp
  6. Añade el servidor stdio a Codex. La forma a nivel de proyecto es:

    [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"

    Pon esto en el .codex/config.toml del proyecto de confianza o en tu configuración personal de Codex. No añadas valores secretos. Reinicia o abre una nueva tarea después de cambiar la configuración de MCP y verifica las herramientas listadas antes de solicitar datos de Canvas.

Compatibilidad con ChatGPT

Este repositorio implementa un servidor MCP stdio local para Codex y otros clientes que admitan MCP stdio local. Las aplicaciones personalizadas actuales de ChatGPT no se conectan directamente a un servidor stdio local. La guía actual de OpenAI es exponer un MCP local privado a través de Secure MCP Tunnel (o implementar un endpoint MCP remoto revisado), sujeto a la disponibilidad del plan y del administrador del espacio de trabajo. No expongas este proceso directamente a la internet pública.

Consulta Modo desarrollador y aplicaciones MCP en ChatGPT antes de intentar la configuración de ChatGPT; la disponibilidad y el comportamiento de aprobación pueden cambiar.

Habilitar herramientas de creación de contenido

Mantén la escritura desactivada a menos que una tarea específica lo requiera.

  1. Copia config/write-policy.example.json a una ubicación fuera del repositorio.

  2. Añade solo los IDs de curso de Canvas exactos aprobados para la creación de contenido.

  3. Establece enabled en true y restringe el archivo:

    chmod 600 /absolute/private/path/write-policy.json
  4. Añade CANVAS_WRITE_POLICY=/absolute/private/path/write-policy.json al entorno del servidor MCP.

  5. Reinicia el cliente y llama a canvas_get_write_policy para verificar la política efectiva.

  6. Para cada escritura de contenido, revisa el objetivo y la carga útil exactos. Proporciona la frase de confirmación específica de la acción y aprueba la acción mutante en el cliente.

  7. Desactiva la política de nuevo cuando la tarea esté completa.

Si la variable está ausente, el archivo falta, los permisos son más amplios que 0600, la escritura está deshabilitada o el curso no está en la lista de permitidos, el servidor rechaza la escritura.

Habilitar la subida de imágenes

La subida de imágenes usa la misma política de escritura local y la lista de permitidos exacta por curso, además de CANVAS_IMAGE_UPLOAD_ROOT. La herramienta rechaza rutas relativas, enlaces simbólicos, archivos fuera de esa raíz, archivos no propiedad del usuario actual, tipos de imagen no admitidos, archivos cuya firma binaria no coincide con la extensión y archivos de más de 10 MiB. La confirmación exacta es APPROVE CANVAS IMAGE UPLOAD course <course_id>.

Canvas usa un intercambio de subida documentado en tres pasos: inicializar el archivo del curso a través de la API autenticada, enviar la imagen sin el token de acceso de Canvas a la URL de almacenamiento HTTPS devuelta por Canvas, y autenticar la ubicación de finalización de Canvas del mismo origen devuelta. La herramienta luego lee /api/v1/courses/<course_id>/files/<file_id> y comprueba el tipo MIME y el tamaño antes de devolver una ruta de vista previa persistente del curso. Nunca devuelve firmas de almacenamiento ni la URL de verificación de descarga de archivos.

Límite de creación actual

Este proyecto es la fuente de verdad para el MCP de Canvas local compartido utilizado por los chats compatibles en este Mac. Puede crear Páginas, Módulos y elementos de módulo, Asignaciones y Rúbricas de asignación, Debates y Cuestionarios Clásicos con preguntas después de las comprobaciones normales de política y aprobación. También proporciona herramientas de eliminación específicas para Páginas, Asignaciones, Debates, Cuestionarios Clásicos y Módulos; eliminar un Módulo quita sus ubicaciones de elementos pero no el contenido subyacente del curso. Su única capacidad de archivos locales es el subidor de imágenes con comprobación de carga útil descrito anteriormente. La subida de archivos genérica, los Nuevos Cuestionarios y la administración de cuentas/cursos siguen sin ser compatibles.

Consulta docs/2026-08-06-content-authoring-extension.md para el registro de implementación y validación de extremo a extremo. Consulta docs/2026-08-16-image-upload-extension.md para el modelo de amenazas y el registro de validación de la subida de imágenes.

Desarrollo

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

Las pruebas simulan los límites de red y credenciales. Consulta AGENTS.md para los invariantes que los contribuyentes deben preservar y ROADMAP.md para las características administrativas diferidas intencionalmente.

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