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_HIDDENcon 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#
- Ponga
ECENTER_MCP_ENABLED=trueen las variables del backend y reinícielo. Sin ella,/api/mcpresponde404 MCP_DISABLED. - Compruebe que el proxy manda
/api/al backend (la imagen del frontal ya lo hace). - Si lo va a usar un asistente que corre en el navegador, añada su origen en
ecenter.mcp.allowed-origins. - Si solo se deben consultar algunas conexiones por el MCP, póngalas en
ecenter.mcp.allowed-connections. - Configure
ECENTER_PUBLIC_URLcon 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.
- Abra el menú de la cuenta y elija Credenciales de servicio.
- En la tarjeta Conectar un asistente (MCP), copie la Dirección del servidor MCP con Copiar.
- Pulse Nueva credencial…, marque el ámbito Asistentes de IA (MCP) y créela (véase Credenciales de servicio). Copie el secreto.
- En Configuración, pulse Copiar para llevarse un fragmento de configuración genérico y sustituya
<secreto de la credencial>por el secreto. - 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.


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.
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) ycomparar_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:
- Conecte MCP Inspector o su asistente.
- Compruebe que aparece el servidor
ecentercon sus nueve herramientas. - Pida
list_connectionsyget_catalog: deben salir las conexiones y lo que ese usuario ve en la aplicación, y nada de lo que no ve. - Haga una pregunta cuya respuesta conozca («importe total por zona») y compárela con la del visor del cubo del mismo usuario.
- Pregunte por algo que el usuario no ve: el asistente debe decir que no tiene acceso, sin nombrarlo ni inventar cifras.
- 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.