Saltar a contenido

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 (requires 2024100700, supported 405–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:

{wwwroot}/local/mcpserver/server.php

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.
  • 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.

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, write y admin. 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_submission es una simulación salvo que la llamada envíe dryRun: false. Los borrados son simulaciones salvo que la llamada envíe dryRun: false y confirm: true.

Más detalles en Seguridad y permisos.

Siguientes pasos

  1. Requisitos
  2. Instalación
  3. Inicio rápido