Saltar a contenido

Servidor MCP#

El servidor MCP deja que un asistente de IA (Claude u otro cliente compatible con el Model Context Protocol) consulte los datos de Empowerment Center en nombre de un usuario, con sus mismos permisos y solo para leer. El usuario pregunta en lenguaje natural («¿qué zona vendió más en 2025?») y el asistente usa las herramientas de ECenter para buscar en el catálogo, construir la consulta, ejecutarla y explicar las cifras.

Antes de empezar#

  • Quien administra el sistema tiene que activar el servidor: viene desactivado.
  • Cada usuario que lo vaya a usar necesita Acceso por API y MCP y Acceso a Empowerment Center.
  • Cada usuario entra con una credencial de ámbito Asistentes de IA (MCP) que crea para sí mismo o, si la instalación lo configura, con la cuenta de la empresa (véase MCP con la cuenta de la empresa).

Importante

Lo que consulta un asistente sale de ECenter hacia el proveedor de IA que usa ese asistente: nombres de dimensiones y de miembros, cifras, descripciones. Por eso el servidor viene desactivado. Actívelo solo si la organización lo ha aprobado, y limite las conexiones si hace falta.

Qué es para un asistente#

El servidor MCP es un adaptador fino sobre la API de consulta: lo que vale para ella vale aquí.

  • Solo lectura. Ninguna herramienta escribe, envía correo ni abre direcciones.
  • Sin SQL. Ninguna herramienta acepta ni devuelve SQL. Si el usuario pide «ejecuta este SELECT», el asistente tiene que reformularlo como una consulta de cubo o decir que no puede.
  • Los datos del usuario. Los universos limitan las filas y lo oculto no existe. Pedirlo es un error COLUMNS_HIDDEN con identificadores, nunca con nombres.
  • Las cifras las calcula ECenter, con el mismo motor del visor del cubo. El asistente solo elige qué pedir y cómo presentarlo.

El servidor se presenta con el nombre ecenter y unas instrucciones fijas que le dicen al asistente cómo trabajar: empezar por un documento ya revisado o por el catálogo, usar solo sus identificadores, validar antes de ejecutar, preguntar antes de confirmar una consulta pesada y citar los universos y los avisos al dar cifras.

Activar el servidor#

  1. Ponga ECENTER_MCP_ENABLED=true en las variables del backend y reinícielo. Sin ella, /api/mcp responde 404 MCP_DISABLED.
  2. Compruebe que el proxy manda /api/ al backend (la imagen del frontal ya lo hace).
  3. Si lo va a usar un asistente que corre en el navegador, añada su origen en ecenter.mcp.allowed-origins.
  4. Si solo se deben consultar algunas conexiones por el MCP, póngalas en ecenter.mcp.allowed-connections.
  5. Configure ECENTER_PUBLIC_URL con la dirección pública de ECenter, para que la pantalla dé la dirección completa del servidor.

Configuración#

Propiedad Por defecto Qué es
ecenter.mcp.enabled (ECENTER_MCP_ENABLED) false Activa el servidor
ecenter.mcp.wait 20s Lo que espera run_query antes de responder que la consulta sigue en curso
ecenter.mcp.rows-per-call 200 Filas de un resultado por llamada
ecenter.mcp.max-rows-per-call 1000 Lo más que puede pedir el asistente en una llamada
ecenter.mcp.rate 120 Llamadas por minuto de cada credencial, por instancia
ecenter.mcp.allowed-origins vacío Orígenes admitidos en la cabecera Origin (https://asistente.example.org, http://localhost:*). Una petición con otro origen, 403 ORIGIN_NOT_ALLOWED. Sin cabecera Origin (un cliente que no es un navegador) no se mira.
ecenter.mcp.allowed-connections vacío Las conexiones (su UUID) que se pueden consultar por MCP; vacío, las del titular
ecenter.mcp.max-payload 1MB El mayor cuerpo de una petición; por encima, 413 CONTENT_TOO_LARGE

Los límites de la API de consulta (2 consultas a la vez por usuario, 50 000 filas por resultado, 30 minutos de vida) valen igual. Véase Resultados, límites y errores.

Conectar un asistente#

El usuario lo hace él mismo desde Credenciales de servicio, en el menú de la cuenta.

  1. Abra el menú de la cuenta y elija Credenciales de servicio.
  2. En la tarjeta Conectar un asistente (MCP), copie la Dirección del servidor MCP con Copiar.
  3. Pulse Nueva credencial…, marque el ámbito Asistentes de IA (MCP) y créela (véase Credenciales de servicio). Copie el secreto.
  4. En Configuración, pulse Copiar para llevarse un fragmento de configuración genérico y sustituya <secreto de la credencial> por el secreto.
  5. Pegue esa configuración en su asistente.

La tarjeta solo aparece si el servidor está activado. Si la instalación tiene configurado el OAuth, ofrece también Con la cuenta de la empresa, sin credencial.

La tarjeta Conectar un asistente (MCP) con la dirección del servidor y el fragmento de configuraciónLa tarjeta Conectar un asistente (MCP) con la dirección del servidor y el fragmento de configuración
La tarjeta Conectar un asistente (MCP) con la dirección del servidor y el fragmento de configuración

El fragmento tiene el formato mcpServers que entienden la mayoría de los clientes:

{
  "mcpServers": {
    "ecenter": {
      "type": "http",
      "url": "https://ecenter.example.org/api/mcp",
      "headers": {
        "Authorization": "Bearer <secreto de la credencial>"
      }
    }
  }
}

El formato puede variar un poco de un asistente a otro. El transporte es HTTP (Streamable HTTP) sin estado; el servidor responde 405 a los GET.

claude mcp add --transport http ecenter https://ecenter.example.org/api/mcp \
  --header "Authorization: Bearer $ECENTER_MCP_TOKEN"

Use el fragmento mcpServers de la tarjeta, o configure a mano un servidor remoto HTTP con la dirección y la cabecera Authorization: Bearer <secreto>.

Para probar el servidor: npx @modelcontextprotocol/inspector, transporte Streamable HTTP, la dirección del servidor y la cabecera Authorization: Bearer <secreto>. Conéctese en modo Via Proxy: el modo Direct llama desde el navegador con una cabecera Origin que el servidor rechaza si no está en allowed-origins.

Un cliente que solo admite OAuth necesita la configuración con la cuenta de la empresa; uno que se conecta desde la nube de su proveedor necesita además que ECenter sea accesible desde internet.

Herramientas#

Las nueve herramientas son de solo lectura, con descripciones fijas y en un orden fijo:

Herramienta Qué hace
list_connections Las conexiones que el usuario puede consultar. Si hay una, el asistente la usa sin preguntar.
get_catalog El catálogo visible: tablas, dimensiones (con las agrupaciones), métricas con su descripción de negocio, y listas. Por páginas de 200, con search y factTable.
search_members Los miembros de una dimensión, para escribir una condición con códigos reales.
validate_query Valida una consulta sin ejecutarla y estima sus filas; propone el identificador correcto si uno no existe.
run_query Ejecuta la consulta y devuelve las primeras 200 filas, el cursor de las siguientes y los enlaces al CSV y al Excel. Si tarda más de 20 s, devuelve {id, status: RUNNING}.
get_query_result El estado de una consulta o una página más de su resultado.
explain_result La explicación en palabras: la frase, la segmentación, las tablas, los universos y los avisos.
list_workbooks Los libros que el usuario puede abrir, con sus documentos de cubo y sus marcadores.
get_document_query La consulta de un documento (y de un marcador), restringida a lo que ve el usuario.

Además ofrece:

  • Recursos: la guía ecenter://guide (cómo se construye una consulta, las visualizaciones, los universos, los límites), el catálogo de una conexión, un libro, y el resultado de una consulta en CSV (ecenter://results/{id}.csv) y en Excel (ecenter://results/{id}.xlsx), este para que el asistente se lo ofrezca al usuario.
  • Dos prompts en español: analizar_metrica (una métrica, con su desglose, su periodo y su conexión opcionales) y comparar_periodos (una métrica, el periodo actual y, opcionalmente, el anterior, que por defecto es el mismo del año anterior).

La consulta que construye el asistente es la misma de la API, con todas sus ampliaciones: comparar periodos, métricas calculadas, la semana, consultas compuestas, «sin registros», % acumulado, media móvil y agregación de una dimensión. Véase La consulta de cubo.

Cómo se protege#

Riesgo Defensa
Instrucciones escondidas en los datos (un nombre de libro o una descripción que dice «ignora lo anterior…») Solo lectura; todo texto que sale va sin caracteres de control ni invisibles y recortado a 500 caracteres; la guía le dice al asistente que los nombres y los valores son datos, no instrucciones
Que cambien las herramientas sin avisar Descripciones fijas y versionadas con el producto, en un orden fijo
Robo del secreto Caducidad, revocación, el secreto nunca en la URL, y cada resultado solo lo ve la credencial que lo pidió
Consumo excesivo de la base de datos Los límites de la API, y el asistente tiene que preguntar al usuario antes de confirmar una consulta pesada
Peticiones desde una web maliciosa (DNS rebinding) La cabecera Origin, si viene, tiene que estar en allowed-origins
Datos hacia el proveedor de IA Desactivado por defecto, allowed-connections, el aviso en la pantalla de credenciales y la auditoría con el canal MCP

Errores#

Los errores de una herramienta llegan al asistente como un resultado con isError, el texto CÓDIGO: mensaje y los mismos campos que en la API. Por ejemplo, con algo oculto: «COLUMNS_HIDDEN: La consulta usa 1 métrica a la que usted no tiene acceso (1203): quítelo de la consulta». Así el asistente se corrige solo.

Antes de llegar a las herramientas, la superficie responde en HTTP:

HTTP code Cuándo
401 CREDENTIAL_REQUIRED, INVALID_CREDENTIAL Sin credencial, o la credencial no vale
403 ORIGIN_NOT_ALLOWED La cabecera Origin no está en allowed-origins
403 NOT_ALLOWED El usuario no tiene Acceso por API y MCP y Acceso a Empowerment Center
403 LICENSE_INVALID Sin licencia válida
404 MCP_DISABLED El servidor está desactivado
405 — Un GET a /api/mcp
413 CONTENT_TOO_LARGE El cuerpo pasa de max-payload
429 RATE_LIMITED Más de 120 llamadas por minuto

Comprobar que funciona#

Una prueba rápida, con el usuario que vaya a usarlo:

  1. Conecte MCP Inspector o su asistente.
  2. Compruebe que aparece el servidor ecenter con sus nueve herramientas.
  3. Pida list_connections y get_catalog: deben salir las conexiones y lo que ese usuario ve en la aplicación, y nada de lo que no ve.
  4. Haga una pregunta cuya respuesta conozca («importe total por zona») y compárela con la del visor del cubo del mismo usuario.
  5. Pregunte por algo que el usuario no ve: el asistente debe decir que no tiene acceso, sin nombrarlo ni inventar cifras.
  6. En Administración › Auditoría, compruebe que las consultas aparecen con el canal MCP.

Auditoría#

Las consultas del asistente llegan a la auditoría como las de la API, con el canal MCP y la referencia cred:<id> (o oauth:<cliente> con la cuenta de la empresa). El primer uso de cada credencial en cada hora se anota como un acceso; validar, leer el catálogo y listar libros no se auditan.

Véase también#