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

VariableDescripción
ELMAPI_BASE_URLRaíz de la API de la instancia (p. ej. https://your-domain.com/api). Se acepta ELMAPI_API_URL como alias.
ELMAPI_API_KEYToken Sanctum del Proyecto desde Configuración del proyecto → Tokens de API
ELMAPI_PROJECT_IDUUID 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 colecciones
  • get_collection — Obtener una colección con su esquema de campos completo
  • create_collection — Crear una colección (con creación opcional de campos por lotes)
  • update_collection — Actualizar el nombre y slug de una colección
  • reorder_collections — Reordenar colecciones

Campos

  • create_field — Añadir un campo a una colección
  • update_field — Actualizar un campo
  • reorder_fields — Reordenar campos dentro de una colección

Entradas de contenido

  • list_entries — Listar entradas con filtrado avanzado (where con 13 operadores, grupos OR, filtrado por relaciones), ordenación, paginación, recuento y primera
  • get_entry — Obtener una sola entrada de contenido
  • create_entry — Crear una entrada de contenido
  • update_entry — Actualizar una entrada de contenido
  • patch_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ómica
  • bulk_update_entries — Actualizar múltiples entradas de forma atómica por UUID
  • bulk_delete_entries — Eliminar múltiples entradas de forma atómica por UUID
  • link_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 entrada
  • get_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ón
  • get_asset — Obtener un archivo por UUID o nombre de archivo
  • upload_asset — Subir un archivo como recurso
  • bulk_upload_assets — Subir múltiples archivos de forma atómica
  • bulk_update_asset_metadata — Actualizar metadatos de múltiples archivos de forma atómica
  • delete_asset — Eliminar un archivo

Webhooks

  • list_webhooks — Listar todos los webhooks del proyecto
  • get_webhook — Obtener un webhook por UUID
  • create_webhook — Crear un webhook para eventos de contenido y autenticación (name, url, events, sources; opcional description, secret, payload, status, collection_ids)
  • update_webhook — Actualizar un webhook por UUID (mismos campos que crear)
  • delete_webhook — Eliminar un webhook por UUID
  • list_webhook_logs — Listar registros de entrega de un webhook (uuid; opcional paginate, 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: filtros where con 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:

HabilidadHerramientas
readlist/get colecciones, entradas, archivos, webhooks; registros de webhooks
createcrear entradas, subir archivos, crear webhooks
updateactualizar entradas, publicar/despublicar/descartar borrador, link_entry_translation, versiones, actualizar metadatos de archivos, actualizar webhooks
deleteeliminar entradas, eliminar archivos, eliminar webhooks
admincrear/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