Plugin de Moodle
Qué hace el plugin
local_mcpconnector es la parte de MoodleMCP que vive en Moodle. Enlaza tu sitio con el panel mediante una API firmada, crea servicios web limitados por rol y convierte los tokens de Moodle en claves MCP revocables para los usuarios que elijas.
Se comunica con el panel y con ningún otro tercero. Requiere una cuenta de MoodleMCP: el plugin no hace nada por sí solo.
Instalación
- Instala el plugin desde Administración del sitio → Plugins → Instalar plugins (sube el zip, o copia el directorio a raizmoodle/local/mcpconnector) y completa la actualización.
- Abre Administración del sitio → Plugins → Plugins locales → MCP Connector → Licencia.
- Pega la URL del panel, la clave de licencia, el secreto del panel y la URL del endpoint MCP que obtuviste al conectar tu sitio.
- Pulsa Validar licencia. Una confirmación en verde significa que tanto la firma como la URL del sitio son correctas.
Qué añade a Moodle
| Sección | Para qué sirve |
|---|---|
| Licencia | URL del panel, clave de licencia, secreto de firma y endpoint MCP. |
| Servicios | Las definiciones de servicios web por rol y sus funciones permitidas. |
| Usuarios | Asignar o quitar un usuario de un servicio, lo que emite o revoca su clave. |
| Claves | Ciclo de vida por usuario: suspender, activar, revocar, regenerar y enviar por correo, y reconciliar el estado con el panel. |
| Ajustes | Sincronización automática por rol y plantilla del correo de entrega de claves. |
Provisionar usuarios
En Usuarios, asigna un usuario al servicio que corresponda a su rol. El plugin genera un token de servicio web para esa persona, lo envía al panel y el panel devuelve una clave MCP. El valor se envía por correo al usuario y se muestra una sola vez: Moodle solo guarda sus cuatro últimos caracteres y su estado.
Activa la sincronización automática de un rol si quieres que todos los usuarios con ese rol se provisionen automáticamente según aparezcan.
Revocar el acceso
Suspender o revocar una clave desde el plugin se propaga al panel, y la clave deja de funcionar en su siguiente llamada. Eliminar el usuario de Moodle también la revoca. Puedes hacer lo mismo desde el panel, en Organización → Moodle → Claves MCP: las dos vistas se reconcilian.
Qué se envía al panel
Al provisionar un usuario, el plugin envía su nombre completo, sus roles efectivos en Moodle y el token de servicio web generado para él; la clave se envía a su dirección de correo. El panel guarda el token cifrado y la clave con hash. Los ajustes de privacidad del plugin incluyen la declaración en formato legible por máquina.
Los tokens de servicio web y los valores de las claves MCP nunca se escriben en los registros de Moodle. Las claves se entregan por correo, así que trata esos buzones en consecuencia.
Para desarrolladores del plugin
Todos los endpoints entre plugin y panel van firmados y con límite de peticiones por licencia:
| Endpoint | Propósito |
|---|---|
| POST /api/moodle/verify | Comprobación de licencia y URL desde los ajustes del plugin |
| POST /api/moodle/keys | Registrar un token → clave MCP (el valor se devuelve una vez) |
| POST /api/moodle/keys/list | Listado solo de metadatos (ids, últimos 4, estado; nunca secretos) |
| POST /api/moodle/keys/revoke | Revocar por id de clave (idempotente y definitivo) |
| POST /api/moodle/keys/suspend | Suspender o reactivar por id de clave |
La firma viaja en una cabecera:
x-panel-signature: t=<segundos-unix>,v1=<hex hmac_sha256(secretoPanel, `${t}.${cuerpoCrudo}`)>
- Lo que se firma es el cuerpo crudo de la petición, unido con un punto tras la marca de tiempo: cualquier alteración del cuerpo invalida la firma.
- Las peticiones con más de 300 segundos de antigüedad (o de adelanto) se rechazan, lo que cierra la ventana de repetición.
- Una licencia desconocida y una firma incorrecta devuelven ambas 403 invalid_credentials, así que la API no sirve para enumerar instalaciones.
- El plugin envía x-panel-version: 2 en cada petición, de modo que el protocolo puede evolucionar sin romper instalaciones antiguas.
El plugin se distribuye bajo GPL v3 o posterior; el código y las incidencias están en github.com/studiolxd/moodle-local_mcpconnector.