Canvas API MCP
Servidor MCP de Canvas para Canvas LMS: 16 herramientas estudiantiles seleccionadas para tareas, calificaciones, plazos y archivos, además de una pasarela que accede a los 1.116 endpoints de la API de Canvas.
Documentación
canvas-api-mcp
Nunca vuelvas a perder una fecha límite.
Pregunta a tu IA qué tienes pendiente y lee la respuesta directamente desde Canvas:
fechas límite reales, estado real de las entregas, sin copiar nada.
Un servidor MCP para Canvas LMS. 16 herramientas seleccionadas para el trabajo diario de los estudiantes, además de una puerta de enlace que llega a todos los endpoints que expone tu instancia de Canvas.
📖 Documentación: mcp.johannsenlum.com/canvas-lms · guía de instalación · referencia de herramientas · habilidades · cumplimiento
Software de uso personal. La política de API de Canvas exige OAuth para aplicaciones utilizadas por varias personas, y OAuth de Canvas no puede implementarse de forma segura en software instalado localmente (sin PKCE, y
client_secretno puede distribuirse en un paquete). Úsalo con tu propio token y en tu propia cuenta. Consulta Cumplimiento.
Qué puedes preguntarle
Preguntas reales y qué herramienta las responde.
Tú: ¿Qué tengo que entregar esta semana? Claude: (llama a
whats_due): Tienes 3 cosas pendientes: Problem Set 4 (jueves, CS3230), una respuesta en el foro (viernes, IS4302) y el informe del hito 2 (domingo, EE2211).
Tú: ¿Cómo voy en mi curso de bases de datos y qué hay en el temario de la semana 6? Claude: (llama a
my_grades, luego aget_syllabus, y luego acourse_contentpara el módulo de la semana 6): Vas al 87% en general. La semana 6 cubre normalización y tiene una lectura más un archivo de laboratorio que entregar el viernes.
Tú: Resume las notas en PDF de la clase 8 y muestra mi entrega del ensayo para que pueda ver los comentarios. Claude: (llama a
list_files+read_filepara el PDF, luego amy_submissionpara el ensayo): ...
Tú: Responde al foro "Equipos de proyecto" y di que estoy libre después de las 3 p. m. para la reunión de grupo. Claude: (llama a
post_discussion_reply✏️): Publicado en el hilo.
Tú: ¿Canvas me ha dado alguna vez estadísticas de cuestionarios desglosadas por pregunta, a lo largo de todo el semestre? Claude: (llama a
search_canvas_apipara encontrar el endpoint correcto, luego acanvas_requestpara llamarlo): ...
El último ejemplo es el punto de las herramientas de puerta de enlace: si un endpoint existe en tu
instancia de Canvas, search_canvas_api puede encontrarlo y canvas_request puede llamarlo,
aunque solo 16 herramientas estén seleccionadas manualmente.
Instalación
Requisitos previos
-
Python 3.11+
-
Un token de acceso personal de Canvas. Tu institución debe permitir que los estudiantes los creen: revisa Canvas → Cuenta → Configuración → Integraciones aprobadas para ver un botón "+ Nuevo token de acceso". Guía completa con capturas de pantalla: mcp.johannsenlum.com/canvas-lms/install.
Ten en cuenta que el token caduca. Desde la actualización de seguridad de Instructure de octubre de 2025, las cuentas con solo roles de estudiante deben establecer una caducidad de no más de 120 días, y las instituciones suelen limitarla a menos (NUS permite 90). Anota la fecha: un token caducado hace que todas las herramientas devuelvan
401a la vez, lo que parece una instalación rota en lugar de una credencial que simplemente se agotó.
Ejecutar el servidor
canvas-api-mcp está publicado en PyPI. Ejecútalo con:
uvx canvas-api-mcp
Instalar desde el código fuente (colaboradores / main sin publicar). No forma parte de la
ruta de instalación normal anterior; solo se necesita si quieres el código más reciente sin publicar
en lugar de la versión publicada en PyPI:
uvx --from git+https://github.com/JohannsenLum/canvas-api-mcp canvas-api-mcp
O ejecútalo desde un clon local:
git clone https://github.com/JohannsenLum/canvas-api-mcp
cd canvas-api-mcp
uv sync
Instalación rápida (un clic)
Existen enlaces de un clic para Cursor, VS Code y LM Studio únicamente. Ningún otro
cliente tiene un formato de enlace de instalación documentado. Estos rellenan previamente la configuración a continuación, pero
aún necesitan que CANVAS_BASE_URL y CANVAS_TOKEN se completen después.
Todos los clientes (configuración manual)
Tu token permanece en tu máquina, en tu propio archivo de configuración. Nunca se transmite a ningún lugar excepto directamente a tu instancia de Canvas.
| Cliente | ¿Enlace directo? |
|---|---|
| Claude Code | no |
| Claude Desktop | no |
| Cursor | sí, arriba |
| VS Code | sí, arriba |
| LM Studio | sí, arriba |
| Zed | no |
| Windsurf | no (Windsurf solo resuelve servidores en su propio registro) |
Claude Code: ~/.claude.json
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Claude Desktop: claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
No existe instalación de un clic para Claude Desktop (instala paquetes .mcpb, no
enlaces directos). Copia este JSON mediante Configuración → Desarrollador → Editar configuración:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Cursor: ~/.cursor/mcp.json
Alternativa al botón anterior, o si prefieres pegarlo directamente:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
VS Code: .vscode/mcp.json
Alternativa al botón anterior, o si prefieres pegarlo directamente. Ten en cuenta que VS
Code usa una clave servers, no mcpServers:
{
"servers": {
"canvas": {
"type": "stdio",
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
LM Studio: mcp.json (Programa → Instalar → Editar mcp.json)
Alternativa al botón anterior, o si prefieres pegarlo directamente:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Zed: settings.json
No existe enlace directo para Zed. Añade esto bajo context_servers en tu configuración
de Zed:
{
"context_servers": {
"canvas": {
"source": "custom",
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Windsurf: ~/.codeium/windsurf/mcp_config.json
No existe enlace directo para Windsurf. Solo resuelve servidores desde su propio registro, así que esto debe pegarse manualmente mediante Configuración de Windsurf → Servidores MCP → Editar configuración sin procesar:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Herramientas
| Herramienta | Qué hace |
|---|---|
whoami | Identidad y tu rol en cada curso |
get_calendar_feed_url | Tu calendario privado .ics enlace (solo cuando lo pidas) |
my_courses | Cursos activos con código, período, rol |
whats_due | Todo lo pendiente, primero lo más próximo |
my_grades | Puntuación actual por curso |
list_assignments | Las tareas de un curso y el estado de entrega |
get_assignment | Una tarea completa, con rúbrica |
my_submission | Tu entrega, puntuación y comentarios |
submit_assignment ✏️ | Enviar trabajo |
course_announcements | Anuncios recientes |
course_content | Módulos y su contenido |
list_files | Archivos en un curso |
read_file | Extraer texto de PDF/DOCX/PPTX/texto |
get_page | Una página wiki de Canvas por slug |
get_syllabus | El programa de un curso |
read_discussion | Temas, o las respuestas de un tema |
post_discussion_reply ✏️ | Publicar en un foro |
search_canvas_api | Encontrar cualquier endpoint por palabra clave (puerta de enlace) |
canvas_request ✏️ | Ejecutar cualquier endpoint (puerta de enlace) |
✏️ escribe en Canvas. Son 3 herramientas de escritura en total: submit_assignment,
post_discussion_reply y canvas_request cuando se llaman con un método que no sea GET
(las llamadas GET a través de canvas_request son de solo lectura).
search_canvas_api + canvas_request llegan a los ~1,116 endpoints que expone tu
instancia. Lo que pueden hacer lo decide Canvas según los permisos de tu token: un
token de profesor desbloquea endpoints educativos sin cambios en este servidor.
Prompts
week_ahead, study_pack, grade_check.
Recursos
canvas://me, canvas://courses, canvas://api/catalog.
Habilidades
Si tu cliente admite la convención de habilidades:
npx skills add JohannsenLum/canvas-api-mcp
Otras instituciones
Funciona con cualquier instancia de Canvas: establece CANVAS_BASE_URL. El catálogo de ~1,116
endpoints se incluye dentro del paquete en
canvas_api_mcp/data/catalog.json. Para que coincida con el conjunto de funciones exacto de tu
implementación, regenéralo:
python scripts/build_catalog.py https://canvas.yourschool.edu -o data/catalog.json
Cumplimiento
- Integridad académica.
submit_assignmentpuede enviar cualquier cosa, incluido trabajo generado por IA. Enviar trabajo que no es tuyo incumple las normas de integridad académica de prácticamente todas las instituciones, y la política de API de Canvas prohíbe explícitamente el uso que las viole. Eso es responsabilidad tuya. - Límite de velocidad. El cliente limita según la cuota publicada de Canvas. No lo elimines: sobrecargar la API está prohibido.
- Material del curso.
read_fileobtiene materiales para tu propio estudio. No los redistribuyas. - Tu token equivale a una contraseña. Puede leer tus calificaciones y enviar trabajo como tú. Establece una caducidad. Nunca lo confirmes en un repositorio.
- Ámbito de uso personal. La fase 1 se dirige a un solo estudiante que usa su propio token. No hay herramientas educativas seleccionadas; el flujo OAuth de Canvas no tiene PKCE, por lo que este servidor instalado localmente no puede implementar el OAuth multiusuario que la política de API de Canvas exige para algo más amplio. No lo reempaquetes como un servicio multiinquilino.
Desarrollo
uv sync
uv run pytest -v
# Live tests against your real account (read-only)
CANVAS_LIVE_TESTS=1 uv run pytest tests/test_live.py -v
Variables de entorno: CANVAS_BASE_URL, CANVAS_TOKEN, opcional
CANVAS_MAX_PAGES (predeterminado 10) y CANVAS_TIMEOUT (segundos, predeterminado 30).
Consulta env.template.
Contribuciones
Se aceptan problemas y solicitudes de extracción: consulta CONTRIBUTING.md para la configuración, las reglas arquitectónicas que vale la pena conocer antes de cambiar algo y el estándar para añadir una nueva herramienta seleccionada.
¿Encontraste un problema de seguridad? No abras un problema público. Consulta SECURITY.md para informar de forma privada; esto es especialmente importante aquí, ya que este proyecto maneja tokens de Canvas equivalentes a contraseñas.
Los cambios se registran en CHANGELOG.md.
Licencia
MIT © 2026 Johannsen Lum.
Úsalo, modifícalo, redistribúyelo, construye algo comercial con él: la única condición es que conserves el aviso de derechos de autor y el texto de la licencia. Se proporciona sin garantía de ningún tipo.
Las contribuciones se aceptan bajo la misma licencia.