Skip to main content

Referencia de evoMCP

Endpoint y protocolo

Elemento Valor
URL https://tu-sitio/mcp
Método Solo POST. Un mensaje JSON-RPC por petición, sin lotes y sin sesiones
Versiones del protocolo 2026-07-28 y, por compatibilidad, 2025-11-25, 2025-06-18 y 2025-03-26
Métodos initialize, ping, server/discover, tools/list, tools/call. Solo hay herramientas: no hay recursos ni prompts
Cabeceras con Mcp-Protocol-Version: 2026-07-28 Mcp-Method en toda petición salvo initialize, y Mcp-Name en tools/call; deben coincidir con el cuerpo
Autenticación Authorization: Bearer <token>
Tamaño Petición hasta 256 KB; respuesta hasta 1 MB (si se supera, la herramienta devuelve un error y pide paginar o filtrar)
Notificaciones Se responden con 202

Códigos HTTP que puedes ver:

Código Cuándo
400 JSON no válido, mensaje JSON-RPC mal formado, versión de protocolo no soportada o cabeceras Mcp-* que no coinciden
401 Sin autenticar o token no válido. Incluye WWW-Authenticate con la ruta de metadatos OAuth
403 Origen no permitido
404 El endpoint está desactivado en las opciones
405 Método distinto de POST
413 Petición demasiado grande
429 Límite por IP (600 por minuto), límite por conexión o cuota mensual agotada

Una herramienta que la conexión no puede usar no aparece en tools/list, y llamarla devuelve «Herramienta desconocida», igual que si no existiera.

Respuestas de las herramientas

El resultado va en structuredContent y en el texto, con la forma {"data": ...}. Si la herramienta puede devolver texto procedente de terceros (artículos, menús, registros, datos de visitantes), el resultado incluye "untrusted_content": true y un aviso: ese texto no debe tratarse como instrucciones. Los errores de validación y de permisos llegan con isError: true.

Cuando una escritura exige aprobación, no se ejecuta. La respuesta es:

{"data": {"status": "pending_approval", "approval_id": 12, "message": "..."}}

Antes de dejarla pendiente, si la herramienta admite dry_run, se valida con una simulación: un error de validación llega al agente en el momento y no cuando un humano ya ha aprobado.

dry_run

Las herramientas con dry_run aceptan un argumento booleano dry_run. Con true, simulan la acción y devuelven lo que harían, sin cambiar nada y sin pedir aprobación.

Herramientas propias del servidor

Están siempre disponibles para cualquier conexión.

Herramienta Qué hace
evomcp_capabilities Dice qué permisos tiene la conexión por componente, qué componentes existen en el sitio pero no están concedidos, cuántas herramientas ve y qué modo de aprobación tiene
evomcp_approval_status Consulta el estado de una acción pendiente (pending, executed, failed, rejected, expired) y su resultado. Solo ve las aprobaciones de su propia conexión

Permisos y aprobación en las tablas

Cada herramienta pertenece a un componente y a un recurso de la matriz de permisos, que se escriben componente/recurso. El permiso es lo que la conexión necesita sobre ese par: lectura, escritura o full (las dos cosas).

La columna Aprobación puede valer:

Valor Significado
(vacío) Herramienta de lectura. Nunca pide aprobación
Siempre Pide aprobación en cualquier modo
Delicada Pide aprobación en los modos «toda escritura» y «solo destructivas o delicadas»
Normal Pide aprobación solo en el modo «toda escritura»

La columna dry_run indica si admite el argumento. Las herramientas que cambian datos personales o los devuelven llevan la indicación en su descripción.

Contenido (content)

Herramienta Qué hace Recurso Permiso Aprobación dry_run
content_search_articles Busca artículos por texto, categoría y estado. Lista paginada (hasta 50) content/articles Leer No
content_get_article Lee un artículo completo: texto, fechas, estado, categoría, metadatos content/articles Leer No
content_list_categories Lista las categorías de artículos visibles para el usuario de la conexión content/categories Leer No
content_create_article Crea un artículo nuevo como borrador content/articles Escribir Normal Sí
content_update_article Modifica campos de un artículo. No cambia su estado de publicación content/articles Escribir Delicada Sí
content_set_article_state Publica, despublica, archiva o manda a la papelera un artículo content/articles Escribir Siempre Sí
content_create_category Crea una categoría de artículos que queda sin publicar content/categories Escribir Normal Sí

Los artículos que no están publicados solo los ve quien puede editarlos (o, con core.edit.own, los suyos).

Menús, módulos, medios, plantillas, usuarios, extensiones y configuración (plg_evomcp_joomla)

Herramienta Qué hace Recurso Permiso Aprobación dry_run
menus_list_menus Lista los menús del sitio menus/menus Leer No
menus_list_items Lista elementos de menú, filtrando por menú y estado menus/items Leer No
menus_get_item Lee un elemento de menú menus/items Leer No
menus_set_item_state Publica, despublica o manda a la papelera un elemento de menú menus/items Escribir Delicada Sí
modules_list_modules Lista módulos del sitio por posición y estado modules/modules Leer No
modules_get_module Lee un módulo; los parámetros con aspecto de secreto salen ocultos modules/modules Leer No
modules_set_module_state Publica, despublica o manda a la papelera un módulo del sitio modules/modules Escribir Delicada Sí
media_list_files Lista ficheros y carpetas dentro de /images (solo metadatos) media/files Leer No
templates_list_styles Lista los estilos de plantilla del sitio y de la administración templates/styles Leer No
users_list_users Lista usuarios: nombre, usuario, correo, estado y grupos. Datos personales users/users Leer No
users_get_user Lee un usuario. Datos personales users/users Leer No
users_list_groups Lista los grupos de usuarios users/groups Leer No
users_set_user_blocked Bloquea o desbloquea a un usuario users/users Escribir Siempre Sí
extensions_list_extensions Lista extensiones instaladas: tipo, elemento, versión y si están activas extensions/extensions Leer No
extensions_set_enabled Activa o desactiva una extensión; no se pueden tocar las protegidas del núcleo extensions/extensions Escribir Siempre Sí
config_get_site_settings Lee ajustes no sensibles de la configuración global. Nunca devuelve credenciales config/global Leer No
scheduler_list_tasks Lista las tareas programadas con su estado y última ejecución scheduler/tasks Leer No

Entidades, opciones y copias (entities)

Esta capa trabaja sobre los modelos y los formularios de Joomla, de modo que valida igual que el administrador. El permiso real se comprueba por entidad con el componente y el recurso de cada una (artículos con content/articles, módulos con modules/modules, y así). El componente entities es la pasarela y exige Super User para concederse.

Herramienta Qué hace Recurso Permiso Aprobación dry_run
entities_list_types Lista las entidades que se pueden gestionar y lo que permite la conexión en cada una entities/generic Leer No
entities_describe Campos de una entidad tal como los define el formulario de Joomla (tipo, etiqueta, opciones), filtros y estados. En módulos, context {"module":"mod_custom"} entities/generic Leer No
entities_list Lista elementos con paginación y filtros (search, state y los de cada entidad) entities/generic Leer No
entities_get Lee un elemento completo; los secretos salen ocultos entities/generic Leer No
entities_save Crea (sin id) o edita (con id, solo los campos que cambian). Lo creado queda como borrador si la entidad lo admite entities/generic Escribir Normal Sí
entities_set_state Publica, despublica, archiva o manda a la papelera hasta 50 elementos entities/generic Escribir Delicada Sí
entities_delete Elimina definitivamente hasta 50 elementos que ya estén en la papelera entities/generic Escribir Siempre Sí
options_get Lee las opciones de un componente con sus campos; los secretos salen ocultos entities/options Leer No
options_set Cambia opciones de un componente, validadas con su formulario. Guarda una copia previa entities/options Escribir Siempre Sí
backups_list Lista las copias previas a cambios hechos por evoMCP, sin su contenido entities/backups Leer No
backups_restore Restaura una copia (opciones de componente, ajustes del tema, páginas del constructor, ajustes globales, ficheros). Guarda antes una copia del estado actual entities/backups Escribir Siempre Sí

Entidades de serie: artículos, categorías de artículos, etiquetas, campos personalizados de artículos, menús, elementos de menú, módulos del sitio, estilos de plantilla, banners y sus clientes y categorías, contactos y sus categorías, canales de noticias y sus categorías, redirecciones, grupos de usuarios y niveles de acceso. Las extensiones pueden declarar las suyas con el evento onEvomcpCollectEntities.

Las opciones de com_evomcp, las de registro de usuarios y las de subida de ficheros de medios no se pueden cambiar con options_set; los permisos (rules), la licencia y los secretos tampoco.

YOOtheme Pro (yootheme)

Estas herramientas solo existen si la plantilla YOOtheme está instalada. Las que cambian una página del constructor exigen que el grupo del usuario de la conexión tenga el filtro de texto de Joomla en «Sin filtro».

Herramienta Qué hace Recurso Permiso Aprobación dry_run
yootheme_list_pages Lista los artículos con una página del constructor yootheme/layouts Leer No
yootheme_get_layout Estructura de una página: secciones, filas, columnas y elementos con su ruta. Con format=json, el layout completo (hasta 150 KB) yootheme/layouts Leer No
yootheme_find_nodes Busca nodos por tipo de elemento y por texto; devuelve su ruta yootheme/layouts Leer No
yootheme_list_element_types Tipos de elemento del constructor instalados, con su grupo y si pueden contener otros yootheme/layouts Leer No
yootheme_describe_element Un tipo de elemento: dónde puede ir, qué hijos admite, campos y valores por defecto yootheme/layouts Leer No
yootheme_update_node_props Cambia propiedades de un nodo yootheme/layouts Escribir Delicada Sí
yootheme_add_node Añade un nodo con sus hijos, validando la jerarquía y las propiedades yootheme/layouts Escribir Delicada Sí
yootheme_move_node Mueve un nodo a otro padre o a otra posición yootheme/layouts Escribir Delicada Sí
yootheme_duplicate_node Duplica un nodo con todo lo que contiene, justo después del original yootheme/layouts Escribir Delicada Sí
yootheme_remove_node Quita un nodo con todo lo que contiene. Guarda antes una copia de la página yootheme/layouts Escribir Siempre Sí
yootheme_replace_layout Sustituye el layout entero de una página, validado nodo a nodo. Guarda antes una copia yootheme/layouts Escribir Siempre Sí
yootheme_create_page Crea una página del constructor nueva como borrador (sección, fila y columna) yootheme/layouts Escribir Normal Sí
yootheme_get_theme_info Versión de YOOtheme Pro, estilos de la plantilla y número de páginas del constructor yootheme/theme Leer No
yootheme_get_theme_config Ajustes del personalizador. Sin ruta, los grupos de primer nivel; con una ruta con puntos, ese valor yootheme/theme Leer No
yootheme_set_theme_config Cambia o quita un ajuste del tema por ruta con puntos. Guarda antes una copia, restaurable con backups_restore yootheme/theme Escribir Siempre Sí

La jerarquía válida es layout, sección, fila, columna y elementos. La biblioteca del constructor y las plantillas de página del constructor no tienen herramientas propias.

Sistema (system, config, scheduler)

Solo superusuarios. El núcleo de Joomla y evoMCP no se actualizan desde estas herramientas.

Herramienta Qué hace Recurso Permiso Aprobación dry_run
system_info Versión de Joomla, PHP y base de datos, estado del sitio, número de extensiones y si hay actualizaciones system/info Leer No
system_list_updates Actualizaciones de extensiones que Joomla ya conoce system/updates Leer No
system_find_updates Consulta los servidores de actualización (todas las extensiones o una). Hace peticiones de red system/updates Escribir Normal No
system_apply_update Actualiza una extensión con una de las actualizaciones listadas system/updates Escribir Siempre Sí
system_install_from_url Instala o actualiza una extensión desde una URL https system/install Escribir Siempre Sí
system_uninstall_extension Desinstala una extensión por su id. No las protegidas del núcleo ni evoMCP system/install Escribir Siempre Sí
system_set_config Cambia ajustes de la configuración global de una lista cerrada de claves. Guarda antes una copia config/global Escribir Siempre Sí
system_clear_cache Limpia la caché de Joomla (todos los grupos o uno) y las entradas caducadas system/cache Escribir Delicada Sí
system_read_log Lista los registros de Joomla o lee las últimas líneas de uno, con filtro de texto. Pueden contener IP y correos system/logs Leer No
scheduler_set_task_state Activa o desactiva una tarea programada scheduler/tasks Escribir Delicada Sí
scheduler_run_task Ejecuta una tarea programada ahora mismo scheduler/tasks Escribir Siempre Sí

Límites de system_install_from_url: solo https y sin puerto; solo servidores de los sitios de actualización instalados más la lista de las opciones de evoMCP; solo IP públicas, y cada redirección se vuelve a comprobar; máximo 40 MB. system_set_config nunca toca credenciales, rutas ni sesiones. system_read_log solo lee la carpeta de registros, por nombre y solo el final del fichero.

Capa avanzada: SQL y ficheros (advanced)

Viene deshabilitada de fábrica y solo la usa un superusuario. Hay tres cerrojos y hacen falta los tres:

  1. El plugin «evoMCP - Capa avanzada» se instala deshabilitado y hay que habilitarlo a mano.
  2. El interruptor «Capa avanzada (SQL y ficheros)» de las opciones de evoMCP está apagado y hay que encenderlo.
  3. La conexión necesita permiso full sobre el componente advanced, y solo un Super User puede concedérselo.

El instalador no habilita este plugin, ni al instalar ni al actualizar. Si la capa está encendida, la pestaña Conectar lo avisa.

Herramienta Qué hace Recurso Permiso Aprobación dry_run
advanced_sql_read SELECT, SHOW, DESCRIBE y EXPLAIN SELECT: una sola sentencia, sin comentarios, hasta 200 filas, en una transacción de solo lectura con límite de tiempo. Datos personales posibles advanced/sql Leer No
advanced_sql_write INSERT, UPDATE, DELETE o CREATE TABLE, una sentencia. UPDATE y DELETE exigen un WHERE real y antes se copia la tabla advanced/sql Full Siempre Sí
advanced_files_list Lista una carpeta de las raíces permitidas, sin ficheros ocultos advanced/files Leer No
advanced_files_read Lee un fichero de texto de hasta 200 KB; de un binario devuelve tamaño y huella advanced/files Leer No
advanced_files_write Crea o sobrescribe un fichero de hasta 2 MB. Copia previa de lo que se sobrescribe advanced/files Full Siempre Sí
advanced_files_delete Elimina un fichero permitido, con copia previa si pesa menos de 2 MB advanced/files Full Siempre Sí

Reglas de SQL: se usa #__ como prefijo de tablas. No se pueden leer las tablas de credenciales, sesiones ni las internas de evoMCP, y las columnas que parecen secretos salen ocultas. No se escribe en tablas de evoMCP ni de credenciales. La copia previa de una tabla se llama <tabla>_bak_evomcp_<fecha> y el mantenimiento diario la borra a los 30 días.

Reglas de ficheros:

Raíz Carpeta Escritura
images images Sí
media media Sí
templates templates (no las plantillas del núcleo ni yootheme) Sí
tmp tmp No
logs administrator/logs No

No se admiten .., enlaces simbólicos ni ficheros ocultos. Solo tipos no ejecutables y nunca código PHP. El HTML solo se escribe en plantillas y los SVG no pueden llevar scripts.

Herramientas que añaden otras extensiones evo

Cuando están instaladas, evoLeadGate, evoOrigin y evoYTAccess registran sus herramientas en evoMCP. Se documentan aquí porque cuelgan de su propio componente en la matriz de permisos.

Herramienta Qué hace Recurso Permiso Aprobación dry_run
evoleadgate_list_leads Lista leads capturados: formulario, correo, fecha, verificación, entrega. Datos personales evoleadgate/leads Leer No
evoleadgate_get_lead Lee un lead: campos del formulario, consentimientos, atribución UTM y estado de los correos. No incluye IP ni agente de usuario evoleadgate/leads Leer No
evoleadgate_lead_stats Estadísticas agregadas por formulario y por día, sin datos personales evoleadgate/leads Leer No
evoleadgate_delete_leads Elimina leads y sus descargas por id, hasta 50 evoleadgate/leads Escribir Siempre Sí
evoorigin_stats Visitas por mes, fuente, medio y campaña, sin datos personales evoorigin/stats Leer No
evoorigin_list_visits Lista visitas: origen, página de entrada, IP truncada, usuario si se identificó. Datos personales evoorigin/visits Leer No
evoorigin_list_leads Lista resúmenes de atribución de leads: primer y último origen, número de visitas evoorigin/leads Leer No
evoorigin_get_lead_attribution Atribución de un lead por su referencia evoorigin/leads Leer No
evoorigin_delete_visits Elimina visitas por id, hasta 100 evoorigin/visits Escribir Siempre Sí
evoorigin_delete_leads Elimina resúmenes de atribución por id, hasta 100 evoorigin/leads Escribir Siempre Sí
evoorigin_purge_now Ejecuta ahora la purga de retención según los plazos configurados evoorigin/visits Escribir Siempre Sí
evoytaccess_get_settings Lee los ajustes de evoYTAccess evoytaccess/settings Leer No
evoytaccess_set_settings Cambia los ajustes de evoYTAccess evoytaccess/settings Escribir Siempre Sí

Para desarrolladores: registrar herramientas desde una extensión

Un plugin del grupo evomcp, o un plugin de sistema que escuche onEvomcpCollect, registra un proveedor de herramientas:

public function onEvomcpCollect(Event $event): void
{
    $event->getArgument('registry')->register(new MiProveedor($this->getApplication()));
}

MiProveedor implementa ToolProvider, contrato versión 1:

Método Qué devuelve
contract() La versión del contrato. Los proveedores con otra versión se rechazan
component() Clave, título y árbol de recursos para la matriz de permisos
tools() Las herramientas: nombre, esquema JSON de entrada, permiso read, write o full, anotaciones, personalData, untrustedContent y dryRun
call() La ejecución de una herramienta

El núcleo oculta las herramientas que la conexión no puede usar, valida los argumentos contra el esquema, aplica la aprobación y audita. Las anotaciones destructiveHint, consequentialHint y approvalRequired determinan cuándo se pide aprobación. Para declarar entidades gestionables con las herramientas genéricas, escucha onEvomcpCollectEntities y registra una definición en el EntityRegistry.

OAuth 2.1

Elemento Valor
Metadatos del recurso /.well-known/oauth-protected-resource
Metadatos del servidor /.well-known/oauth-authorization-server
Autorización /oauth/authorize: inicio de sesión de Joomla y pantalla de consentimiento
Token /oauth/token
Registro dinámico de clientes /oauth/register
Clientes identificados por documento de metadatos (CIMD) Admitidos, con protección contra SSRF
Flujos Código de autorización con PKCE S256 y refresco con rotación
Autenticación del cliente Ninguna (cliente público)
Ámbito mcp
Prefijos de token evomcp_ (token manual), evomat_ (acceso), evomrt_ (refresco)

El consentimiento guarda solo lo que el usuario desmarca. Por eso, los componentes que lleguen después a una conexión ya autorizada se ven sin repetir el consentimiento; si el cliente ya tiene la lista de herramientas en memoria, hay que reconectar el conector para refrescarla. Una conexión por OAuth tiene como techo la matriz de la conexión elegida.