local_mcpserver¶
local_mcpserver es un plugin local de Moodle que habla el Model Context Protocol (MCP) sobre Streamable HTTP. Un asistente de IA como Claude, ChatGPT, Cursor o Grok se conecta como un usuario real de Moodle, con los mismos permisos que ese usuario ya tiene en la interfaz. Puede leer el sitio o montar cursos.
- Moodle: de 4.5 a 5.2 (
requires2024100700,supported405–502). Probado en 4.5 LTS y 5.2 con PHP 8.3 y PostgreSQL; el mismo código funciona en 5.0 y 5.1. - Licencia: GNU GPL v3 o posterior.
- Versión: 0.8.6, madurez beta. En desarrollo, probado en local con MCP Inspector.
- Autor: Sergio Comerón.
Aún no publicado
Descarga, código fuente y ficha en el directorio de Moodle: próximamente.
Qué hace¶
El endpoint es:
Acepta peticiones JSON-RPC 2.0 por POST y responde con JSON o con un cuerpo SSE de un solo mensaje.
Un cliente MCP se conecta a esa URL y llama a 63 tools (por alcance: 26 read, 26 write y 11 admin):
- 27 de lectura
- General:
site_info,search_courses,list_categories,get_course_structure,list_participants,list_activities,get_activity_settings,get_grades_summary,get_task_status. - Estudiante:
get_my_deadlines,get_my_grades,get_my_progress,get_assignment_details,get_forum_posts,get_calendar_events,search_course_content. - Profesor:
get_ungraded_work,get_inactive_students,get_submissions_status,get_submission,get_quiz_results,get_activity_completion_report,get_course_logs_summary,get_forum_unanswered. - Mensajería:
list_conversations,get_conversation_messages. - Cuentas (alcance admin):
search_users.
- General:
- 36 de escritura
- Cursos y actividades:
create_course,update_course,add_section,add_activity,update_activity,set_visibility,set_course_image,set_course_completion,set_availability,delete_activity,delete_section,build_course. - Cuestionarios y preguntas:
create_quiz,add_quiz_questions,import_questions. - Calificación:
grade_submission. - Matriculación, roles y grupos:
enrol_user,unenrol_user,set_user_role,create_group,add_group_members,remove_group_members. - Foros y mensajería:
create_forum_discussion,reply_forum_post,send_private_message,reply_conversation. - Cuentas de usuario (alcance admin):
create_user,create_users,update_user,suspend_user,unsuspend_user. - Políticas del sitio (alcance admin):
set_site_policy_handler,create_policy,update_policy,list_policies,get_policy_acceptances.
- Cursos y actividades:
Además ofrece tres prompts MCP (design_course, create_quiz_from_content, grade_assignment) e incluye la skill moodle-course-design. Cada usuario puede crear tokens personales en Mis tokens MCP, y los administradores tienen un panel de tokens.
Con la escritura activada, un asistente puede añadir tareas con rúbrica, foros, consultas, URL, páginas y etiquetas (con imágenes), ficheros y cuestionarios, con condiciones de finalización y cualquier otro ajuste del formulario; cambiar los ajustes del curso, su imagen, el seguimiento de finalización y las restricciones de acceso; crear preguntas (opción múltiple, verdadero/falso, respuesta corta, numérica, emparejamiento, ensayo); importar GIFT o Moodle XML; montar un curso entero desde un plan JSON en segundo plano, con simulación y deshaciendo los cambios si falla; calificar tareas con una simulación previa; abrir debates en foros y responder; enviar mensajes privados; gestionar las políticas del sitio; y gestionar usuarios, matriculación, roles y grupos. Un profesor con edición puede llenar su propio curso; crear un curso nuevo requiere el permiso de Moodle moodle/course:create.
Seguridad en resumen¶
- Flujo OAuth 2.1 de código de autorización con PKCE S256 y registro dinámico de clientes (RFC 7591). Token de servicio web de Moodle como alternativa opcional.
- Alcances
read,writeyadmin. Tokens personales con duración fija (30, 90 o 365 días). Tokens de acceso de vida corta; los de refresco rotan en cada uso; los tokens se pueden revocar. - Cada llamada a una tool queda en el registro de eventos de Moodle.
- Límite de peticiones por usuario y minuto (60 por defecto).
- La escritura viene desactivada (
allowwrite= 0). grade_submissiones una simulación salvo que la llamada envíedryRun: false. Los borrados son simulaciones salvo que la llamada envíedryRun: falseyconfirm: true.
Más detalles en Seguridad y permisos.