local_mcp
Mi plugin para Moodle que convierte Moodle en un servidor MCP (Model Context Protocol). Así, asistentes de IA como Claude, ChatGPT, Cursor o Grok pueden trabajar con Moodle de forma segura. Software libre (GPLv3).
My Moodle plugin that turns Moodle into an MCP server (Model Context Protocol). AI assistants like Claude, ChatGPT, Cursor or Grok can then work with Moodle safely. Free software (GPLv3).
Cómo funcionaHow it works
El plugin expone un endpoint Streamable HTTP en /local/mcp/server.php. El asistente se conecta ahí y usa las herramientas que el usuario tiene permitidas.
The plugin exposes a Streamable HTTP endpoint at /local/mcp/server.php. The assistant connects there and uses the tools the user is allowed to use.
SeguridadSecurity
OAuth 2.1OAuth 2.1
Con PKCE y registro dinámico de clientes. Como alternativa, token de servicio web.
With PKCE and dynamic client registration. A web service token works as an alternative.
Alcances y tokensScopes and tokens
Alcances read, write y admin. Los tokens caducan y se pueden revocar.
read, write and admin scopes. Tokens expire and can be revoked.
Registro y límitesLogging and limits
Cada llamada queda en el log de eventos de Moodle. Hay límite de peticiones.
Every call goes to the Moodle event log. Requests are rate limited.
Escritura controladaControlled writes
La escritura viene desactivada. La activa el administrador. Los borrados van primero en simulación y piden confirmación.
Writes are off by default. The admin turns them on. Deletes run as a dry run first and need confirmation.
PermisosPermissions
Lectura: cualquier usuario autenticado. Escritura: profesores con permiso de edición y gestores.
Read: any authenticated user. Write: editing teachers and managers.
HerramientasTools
Lectura · general (7)Read · general (7)
site_info, search_courses, get_course_structure, list_participants, list_activities, get_grades_summary, get_task_status
Lectura · estudiante (7)Read · student (7)
get_my_deadlines, get_my_grades, get_my_progress, get_assignment_details, get_forum_posts, get_calendar_events, search_course_content
Lectura · profesor (7)Read · teacher (7)
get_submissions_status, get_ungraded_work, get_quiz_results, get_inactive_students, get_activity_completion_report, get_course_logs_summary, get_forum_unanswered
Escritura (13)Write (13)
create_course, build_course, add_section, add_activity, create_quiz, add_quiz_questions, import_questions, update_activity, enrol_user, create_group, set_visibility, delete_activity, delete_section
create_course crea un curso en blanco o lo copia de una plantilla. build_course monta un curso entero desde un JSON (secciones, actividades y preguntas) en segundo plano, con simulación y deshaciendo los cambios si falla. Ambos devuelven un id de tarea que se consulta con get_task_status. Un profesor con edición puede llenar su curso; crear cursos nuevos requiere el permiso de Moodle de crear cursos.
create_course creates a blank course or copies one from a template. build_course builds a whole course from JSON (sections, activities and questions) in the background, with a dry run and rollback if it fails. Both return a task id you can check with get_task_status. An editing teacher can fill their own course; creating new courses needs Moodle's course-creation permission.
EstadoStatus
Versión 0.4.x (beta) en desarrollo. Aún faltan cosas. Lo he probado en local con MCP Inspector. Aún no está publicado.
Version 0.4.x (beta) in development. Some things are still missing. I have tested it locally with MCP Inspector. Not released yet.