Configura el servidor MCP para Craft CMS.
Esta guía va desde una instalación vacía de Craft hasta un cliente de IA conectado. También explica cada ajuste que limita al cliente.
1. Instalar
Aún no se puede instalar. La ficha en la Craft Plugin Store se está preparando y, hasta que esté publicada, el paquete no se puede resolver: los dos comandos de abajo no lo encontrarán. Están aquí para que veas cómo será la instalación.
composer require alphabridge/mcp php craft plugin/install alphabridge-mcp
La migración crea dos tablas, alphabridge_tokens y alphabridge_audit. Al desinstalar se eliminan de nuevo y no queda nada:
php craft plugin/uninstall alphabridge-mcp
Requisitos: Craft CMS 5.9+, PHP 8.2+, MySQL 8.0.17+ / MariaDB 10.4.6+ o PostgreSQL 13+.
2. Crear un token
En el panel de control, abre AlphaBridge MCP en la barra lateral. La página solo está abierta a administradores. Elige el usuario de Craft al que pertenece el token, un alcance, una etiqueta para reconocerlo más adelante y, opcionalmente, una duración en días.
El token en texto plano se muestra exactamente una vez, justo después de crearlo. Solo se guarda su hash SHA-256, así que no se puede volver a mostrar. Cópialo antes de salir de la página; si lo pierdes, revócalo y crea uno nuevo.
Lo mismo funciona desde la consola, algo útil para configuraciones automatizadas:
php craft alphabridge-mcp/tokens/create --user=admin --scope=read --label="Claude Desktop" php craft alphabridge-mcp/tokens/list php craft alphabridge-mcp/tokens/revoke 1
--expires-in-days=30 limita la duración de un token; 0, el valor por defecto, significa que no caduca.
Qué significa un alcance
Un token está asociado a exactamente un usuario de Craft y funciona con los permisos de ese usuario. El alcance restringe aún más; nunca amplía.
| Alcance | Permite |
|---|---|
read | Las herramientas de lectura, sin las herramientas de administrador. No cambia nada. |
content | Las herramientas de lectura, más escribir entradas, borradores, categorías y globales. Sigue sin las herramientas de administrador. |
full | Todo lo que puede hacer el usuario asociado, incluidas las herramientas de administrador: campos del esquema, información del sistema, registro de auditoría, base de datos, registros, cachés, rutas, cola, plugins, grupos de usuarios. |
3. Conectar un cliente
El endpoint es POST https://your-site.example/alphabridge/mcp: JSON-RPC 2.0 sobre Streamable HTTP, versiones del protocolo 2025-03-26 y 2025-06-18. El token viaja en una cabecera:
X-Api-Key: abmcp_… también funciona. Cualquier cliente MCP que hable Streamable HTTP y pueda enviar una cabecera personalizada puede conectarse.
Claude Code
Un comando:
claude mcp add --transport http craft https://your-site.example/alphabridge/mcp \ --header "Authorization: Bearer abmcp_…"
Claude Desktop · Cursor
Añade esto a la configuración MCP del cliente. El token va en una variable de entorno para que no acabe en el archivo que se comparte:
{ "mcpServers": { "craft": {
"command": "npx",
"args": ["mcp-remote", "https://your-site.example/alphabridge/mcp",
"--header", "Authorization:${AUTH}"],
"env": { "AUTH": "Bearer abmcp_YOUR_TOKEN" }
}}}
Clientes que solo pueden poner el token en la URL
Algunos clientes aceptan una URL de conector, pero no una cabecera personalizada. Para ellos hay un segundo endpoint que lleva el token en la ruta, desactivado por defecto. Activa primero Allow the token in the URL path en los ajustes y ten claro lo que implica: un token en una ruta acaba mucho más fácilmente en los registros del servidor, los registros del proxy y las cabeceras Referer que uno en una cabecera.
4. Ajustes
En el panel de control, en Ajustes → Plugins → AlphaBridge MCP (página en inglés).
- Read-only mode (modo de solo lectura) — mientras está activado, no se ejecuta ninguna herramienta que cambie algo. Está por encima de todos los demás interruptores.
- Tools (herramientas) — cada herramienta está en Default (on), Default (off), On u Off. Las herramientas que cambian algo están desactivadas por defecto. Default es un estado propio, no un sinónimo de activado o desactivado: una versión posterior puede reclasificar una herramienta, y un sitio que eligió Default sigue esa reclasificación en lugar de congelar una decisión antigua.
- Calls per minute and token (llamadas por minuto y token) — un freno contra un modelo que entra en bucle. No es una defensa contra alguien decidido que tenga un token válido.
- Allow the token in the URL path (token en la URL) — desactivado por defecto; ver arriba.
- Additional allowed origins (orígenes adicionales permitidos) — para clientes basados en navegador, ver abajo.
Los mismos ajustes se pueden definir en config/alphabridge-mcp.php. Un valor definido en el archivo prevalece sobre el panel de control, y la página de ajustes marca cada campo afectado e indica de dónde procede su valor.
return [
'readOnly' => false,
'rateLimit' => 120,
'connectorUrlAuthEnabled' => false,
'allowedOrigins' => ['https://client.example', '$MCP_ALLOWED_ORIGINS'],
'toolState' => ['craft_create_entry' => true],
];
Los tokens no forman parte de los ajustes a propósito: son secretos, y los ajustes de los plugins viven en la configuración del proyecto, que se sube a Git. Por eso los tokens tienen su propia página.
Orígenes y DNS rebinding
Si un cliente envía una cabecera Origin, tiene que estar en la lista de permitidos o el endpoint responde HTTP 403. La lista de permitidos es el valor configurado en allowedOrigins más la URL del sitio, pero solo donde se puedan determinar de forma estática: una URL fija con esquema y host, que puede estar en una variable de entorno que contenga una URL así. Se resuelve exactamente un nivel.
Una URL del sitio construida a partir de un alias de Craft como @web no cuenta, ni siquiera dentro de una variable de entorno. Craft construye @web a partir de la cabecera Host de la petición entrante, así que un atacante se compararía consigo mismo. En esas instalaciones, allowedOrigins es la única fuente; si está vacío, se rechaza toda petición que lleve un Origin. Los clientes de servidor a servidor no envían Origin y no se ven afectados.
5. Licencia y prueba
El plugin se venderá a través de la Craft Plugin Store bajo la Craft License: una licencia por entorno de producción. La ficha de la tienda se está preparando; hasta que esté publicada, el plugin no se puede comprar allí. Los entornos de desarrollo y staging se pueden probar gratis: forma parte de la Craft License, no es una prueba que concedamos nosotros.
6. Cuando algo no funciona
| Lo que ves | Lo que significa |
|---|---|
| 401 | Falta el token, es desconocido, ha caducado o se ha revocado. Comprueba que la cabecera llega de verdad: algunos proxies eliminan Authorization. Crea un token nuevo para descartar un error tipográfico; el texto plano solo se muestra una vez, así que una copia incompleta es una causa habitual. |
| 403 | Se ha enviado una cabecera Origin que no está en la lista de permitidos. Consulta Orígenes. Los clientes de servidor a servidor no envían ningún Origin. |
| Unknown tool | O el nombre no existe, o el alcance del token no lo cubre. Ambos casos se responden igual a propósito: la diferencia le diría a quien llama qué más hay. |
| Un rechazo que indica su motivo | El modo de solo lectura está activado, la herramienta está desactivada en los ajustes, o es una herramienta de administrador y el usuario asociado no lo es. Aquí la respuesta dice cuál de ellas, para que no busques el fallo por tu lado. Esas herramientas tampoco aparecen en la lista de herramientas. |
| Límite de peticiones | Más llamadas por minuto de las que permite el ajuste, contadas por token. Sube el límite o ralentiza el cliente. |
| Lista vacía | No es un error. El usuario asociado no puede ver esa sección o ese grupo de categorías: uno desconocido o prohibido devuelve una lista vacía en lugar de un error que revelaría que existe. En cambio, un handle de sitio que no existe se indica como error. |
El registro de auditoría anota cada llamada con su resultado. Léelo con la herramienta craft_audit_log (alcance de administrador) para ver qué hizo realmente un cliente.
Siguiente: la referencia completa de herramientas, generada a partir del catálogo del propio plugin, y cómo funciona la cadena de seguridad.