ElmapiCMS MCP Server
Conecta Cursor, Claude Code o cualquier herramienta compatible con MCP directamente a tu instancia de ElmapiCMS. Gestiona colecciones, contenido y activos mediante lenguaje natural.
Documentación
Servidor MCP de ElmapiCMS
Un servidor MCP (Model Context Protocol) que conecta agentes de IA como Cursor y Claude Code a tu instancia de ElmapiCMS. Gestiona colecciones, campos, entradas de contenido, archivos y webhooks de forma programática mediante lenguaje natural.
Configuración
| Variable | Descripción |
|---|---|
ELMAPI_BASE_URL | Raíz de la API de la instancia (p. ej. https://your-domain.com/api). Se acepta ELMAPI_API_URL como alias. |
ELMAPI_API_KEY | Token Sanctum del Proyecto desde Configuración del proyecto → Tokens de API |
ELMAPI_PROJECT_ID | UUID del proyecto desde la página de inicio del proyecto o Configuración del proyecto → Acceso a la API |
Uso con Cursor
Añade esto a la configuración de MCP de Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"elmapicms": {
"command": "npx",
"args": ["-y", "@elmapicms/mcp-server"],
"env": {
"ELMAPI_BASE_URL": "https://your-domain.com/api",
"ELMAPI_API_KEY": "your-project-api-token",
"ELMAPI_PROJECT_ID": "your-project-uuid"
}
}
}
}
Uso con Claude Code
claude mcp add elmapicms \
-e ELMAPI_BASE_URL=https://your-domain.com/api \
-e ELMAPI_API_KEY=your-project-api-token \
-e ELMAPI_PROJECT_ID=your-project-uuid \
-- npx -y @elmapicms/mcp-server
Desarrollo local (Laravel Herd / dominios .test)
Si tu instancia utiliza un certificado autofirmado (p. ej. Laravel Herd), es posible que necesites:
"env": {
"ELMAPI_BASE_URL": "https://myproject.test/api",
"ELMAPI_API_KEY": "your-project-api-token",
"ELMAPI_PROJECT_ID": "your-project-uuid",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
Prefiere corregir la confianza de la CA local (p. ej. node --use-system-ca) en lugar de deshabilitar la verificación TLS en configuraciones de producción.
Herramientas disponibles (40)
Proyecto
get_project— Obtener información del proyecto (default_locale,locales, etc.)add_project_locale— Añadir un código de idioma al proyecto (requiere admin)set_default_project_locale— Establecer el idioma predeterminado (requiere admin)
Eliminar idiomas no está expuesto intencionalmente aquí (usa Configuración del proyecto → Localización en el panel, o las API REST/SDK).
Colecciones
list_collections— Listar todas las coleccionesget_collection— Obtener una colección con su esquema de campos completocreate_collection— Crear una colección (con creación opcional de campos por lotes)update_collection— Actualizar el nombre y slug de una colecciónreorder_collections— Reordenar colecciones
Campos
create_field— Añadir un campo a una colecciónupdate_field— Actualizar un camporeorder_fields— Reordenar campos dentro de una colección
Entradas de contenido
list_entries— Listar entradas con filtrado avanzado (wherecon 13 operadores, grupos OR, filtrado por relaciones), ordenación, paginación, recuento y primeraget_entry— Obtener una sola entrada de contenidocreate_entry— Crear una entrada de contenidoupdate_entry— Actualizar una entrada de contenidopatch_entry— Actualizar parcialmente una entrada (HTTP PATCH; fusiona solo los campos que envíes)publish_entry— Publicar el borrador como una nueva versión inmutable (update)unpublish_entry— Limpiar el puntero de publicación activo; las versiones se conservan (update)discard_entry_draft— Descartar cambios de borrador no publicados (update)delete_entry— Eliminación suave de una entrada de contenido (se mueve a la papelera)bulk_create_entries— Crear múltiples entradas de forma atómicabulk_update_entries— Actualizar múltiples entradas de forma atómica por UUIDbulk_delete_entries— Eliminar múltiples entradas de forma atómica por UUIDlink_entry_translation— Vincular dos entradas (diferentes idiomas) en el mismo grupo de traducción (POST …/link-translation; requiere update)list_entry_versions— Listar el historial de versiones de una entradaget_entry_version— Obtener una versión por número (incluye el payload de la instantánea)revert_entry_version— Restaurar borrador desde una instantánea anterior y publicar (update)update_entry_version_label— Editar etiqueta/descripción en una versión; la instantánea no cambia (update)
Forma de la API de contenido: Cada entrada tiene uuid, locale, published_at y fields (valores de campos personalizados). Los nombres de campo están en kebab-case. El formato de escritura Richtext sigue editor.mode: cadena HTML o { html, json } para lexical; cadena markdown cuando mode es markdown. MCP create_field / create_collection (y richtext update_field) omiten por defecto editor.mode a markdown. Pasa mode: 'lexical' para Lexical. Nunca escribas markdown en un campo lexical. La forma de lectura sigue editor.outputFormat. Los campos de relación devuelven objetos de entrada anidados (o arrays para uno-a-muchos) al leer; al escribir envía solo el UUID o id numérico de la entrada relacionada (nunca el objeto anidado completo de un get_entry anterior). get_entry admite los parámetros de consulta translation_locale, exclude, timestamps y state.
Guardar ≠ publicar: create_entry / update_entry / patch_entry guardan solo el borrador. state=published list/get siguen sirviendo la última instantánea hasta que llames a publish_entry.
URLs de archivos: La API devuelve url, thumbnail_url y original_url como enlaces estables (opcional ?variant=thumbnail o ?variant=original).
Archivos
list_assets— Listar archivos con paginaciónget_asset— Obtener un archivo por UUID o nombre de archivoupload_asset— Subir un archivo como recursobulk_upload_assets— Subir múltiples archivos de forma atómicabulk_update_asset_metadata— Actualizar metadatos de múltiples archivos de forma atómicadelete_asset— Eliminar un archivo
Webhooks
list_webhooks— Listar todos los webhooks del proyectoget_webhook— Obtener un webhook por UUIDcreate_webhook— Crear un webhook para eventos de contenido y autenticación (name,url,events,sources; opcionaldescription,secret,payload,status,collection_ids)update_webhook— Actualizar un webhook por UUID (mismos campos que crear)delete_webhook— Eliminar un webhook por UUIDlist_webhook_logs— Listar registros de entrega de un webhook (uuid; opcionalpaginate,page)
Recursos
El servidor expone tres recursos de referencia que los agentes de IA pueden leer para obtener contexto:
- Referencia de tipos de campo (
elmapicms://field-types) — Referencia completa de los 16 tipos de campo, sus opciones, validaciones y patrones comunes. - Guía de colecciones (
elmapicms://collections-guide) — Guía para trabajar con colecciones, singletons, slugs reservados y mejores prácticas. - Referencia de consultas (
elmapicms://query-reference) — Documentación completa para consultas de contenido: filtroswherecon 13 operadores, grupos OR, filtrado por relaciones, ordenación, paginación y ejemplos.
Habilidades del token de API
Tu token de API del proyecto necesita las habilidades apropiadas para las herramientas que quieras usar:
| Habilidad | Herramientas |
|---|---|
read | list/get colecciones, entradas, archivos, webhooks; registros de webhooks |
create | crear entradas, subir archivos, crear webhooks |
update | actualizar entradas, publicar/despublicar/descartar borrador, link_entry_translation, versiones, actualizar metadatos de archivos, actualizar webhooks |
delete | eliminar entradas, eliminar archivos, eliminar webhooks |
admin | crear/actualizar/reordenar colecciones y campos; añadir/establecer idiomas de proyecto predeterminados (MCP no expone la eliminación de idiomas) |
Crea el token en el panel de ElmapiCMS bajo Configuración del proyecto → Tokens de API. Copia el ID del proyecto desde la página de inicio del proyecto o Configuración del proyecto → Acceso a la API cuando configures este servidor.
Uso con múltiples proyectos
Cada entrada de MCP se conecta a un solo proyecto de ElmapiCMS. Para trabajar con múltiples proyectos, añade entradas separadas en tu configuración de MCP con diferentes valores de entorno.
Licencia
MIT