El estado de confianza de un servidor MCP, por su URL — por REST o hablando MCP directamente con tu agente. Suficiente para meterlo en un pipeline, un gateway propio, o cualquier sistema que necesite decidir en quién confiar sin abrir un panel a mano.
Esto es la referencia de integración. Si buscas qué vigilamos y cómo lo detectamos, esa explicación vive en Cómo funciona Centinela.
Cada petición lleva tu clave en la cabecera X-API-Key. Consigue una desde tu cuenta → Claves de API — se enseña una única vez al crearla, cópiala entonces.
curl "https://centinela.llimalabs.com/api/v1/status?url=https://ejemplo.com/mcp" \
-H "X-API-Key: cnt_tu_clave_aqui"Sin la cabecera, o con una clave inválida o revocada, la petición devuelve 401.
Devuelve el estado de confianza de un servidor MCP concreto — de los que vigilas de verdad (tienes una suscripción activa), del catálogo público o privado tuyo. Que un servidor sea del catálogo público no basta por sí solo: hace falta suscribirte primero desde tu panel, igual que exige el límite de servidores de tu plan.
| Nombre | Tipo | Descripción |
|---|---|---|
| url | query, obligatorio | La URL exacta de un servidor que vigilas — del catálogo público (suscrito) o privado tuyo, con la misma URL que registraste al suscribirte. |
{
"url": "https://ejemplo.com/mcp",
"in_catalog": true,
"status": "sano",
"findings_count": 0,
"worst_severity": ""
}| Campo | Significado |
|---|---|
| status | sano, revisar, peligroso, auth, no_responde o sin_revisar. |
| in_catalog | true si es del catálogo público, false si es un servidor privado tuyo. |
| findings_count | Hallazgos del último escaneo, del más reciente únicamente. |
| worst_severity | low, medium, high, o vacío si no hay ninguno. |
Si usas un servidor MCP que solo corre en tu propia máquina — configurado con command + args en tu cliente de IA, sin ninguna URL — Centinela no puede llegar hasta él por su cuenta: no hay ninguna dirección de red a la que conectarse. El CLI local (centinela-agent) resuelve justo eso: se instala en tu máquina, encuentra esos servidores, los lanza igual que ya hace tu propio cliente de IA, y manda el resultado a tu cuenta — mismo panel, mismas alertas, mismo análisis que cualquier otro servidor.
Detecta automáticamente los servidores configurados en Claude Desktop, Claude Code, Cursor, Windsurf, Cline, OpenCode y Codex CLI.
Descarga el binario para tu sistema y dale permiso de ejecución:
curl -Lo centinela-agent https://centinela.llimalabs.com/downloads/centinela-agent-linux-amd64
chmod +x centinela-agent| Sistema | Fichero |
|---|---|
| macOS (Apple Silicon) | centinela-agent-darwin-arm64 |
| macOS (Intel) | centinela-agent-darwin-amd64 |
| Linux (x86_64) | centinela-agent-linux-amd64 |
| Linux (ARM64) | centinela-agent-linux-arm64 |
| Windows (x86_64) | centinela-agent-windows-amd64.exe |
./centinela-agent login cnt_tu_clave_aqui
./centinela-agent scanlogin guarda tu clave de API (la misma que ya usas para el resto de esta API, ver Autenticación más arriba) en ~/.centinela/config.json. Si prefieres no dejarla en disco (por ejemplo, en un pipeline de CI), exporta CENTINELA_API_KEY antes de scan y sáltate login.
scan busca en la config de cada cliente soportado, lanza cada servidor que encuentra, le pide su lista de herramientas, y la manda a tu cuenta. De paso, si reconoce que el servidor viene claramente de un paquete de npm (npx/npm) o de PyPI (uvx/pipx/python -m), también cruza esa identidad contra vulnerabilidades conocidas — si no lo reconoce (un binario propio, Docker...), escanea igual, solo sin ese dato de más.
Encontrados 2 servidor(es) MCP local(es).
→ claude-desktop · filesystem (npx)... 6 herramienta(s), sin hallazgos
→ cursor · git (uvx)... 4 herramienta(s), 1 hallazgo(s)
Listo. Revisa el detalle en https://centinela.llimalabs.com/dashboardCada servidor local aparece en tu panel igual que uno con URL propia, con la etiqueta 🖥️ Servidor local · [cliente] en vez de una dirección, para que se distinga a simple vista. Volver a ejecutar scan reescanea los mismos servidores sin duplicar filas — útil para correrlo a mano después de tocar la config de tu cliente de IA, o para meterlo en tu propio cron.
| Código | Motivo |
|---|---|
| 400 | Falta el parámetro url. |
| 401 | Falta la cabecera X-API-Key, o la clave es inválida/revocada. |
| 404 | No vigilas ningún servidor con esa URL — hace falta suscribirse primero, aunque sea del catálogo público. Nunca devuelve datos de un servidor privado ajeno, aunque conozcas su URL exacta. |
| 429 | Límite mensual de tu plan alcanzado — se cuenta sumando todas tus claves. |
Peticiones a la API por mes, sumando todas tus claves — no por clave suelta.
| Plan | Peticiones/mes |
|---|---|
| Gratis | 100 |
| Starter | 500 |
| Pro | 2.000 |
| Business | Sin límite |
Tú mismo puedes ver tu uso del mes y el historial de cada clave desde tu cuenta.
Centinela también es, él mismo, un servidor MCP: si trabajas con un agente que habla ese protocolo, puedes darle acceso directo a check_server_trust en vez de que llame a la API por HTTP a mano. Útil cuando el propio agente va a decidir, sobre la marcha, si usar o no otro servidor MCP que le acabas de indicar.
Disponible en los planes de pago (Starter, Pro y Business) — en el plan Gratis, la herramienta responde con un error explicando que hace falta subir de plan. La API REST (GET /api/v1/status) sigue disponible en Gratis, con su propio límite mensual.
El endpoint es https://centinela.llimalabs.com/mcp (transporte streamable-HTTP), y exige la misma cabecera X-API-Key que el resto de la API — la misma clave que ya tienes creada, sin nada nuevo que generar.
{
"mcpServers": {
"centinela": {
"url": "https://centinela.llimalabs.com/mcp",
"headers": { "X-API-Key": "cnt_tu_clave_aqui" }
}
}
}Recibe la URL de un servidor MCP y devuelve su estado de confianza — igual que GET /api/v1/status, con la misma restricción: solo funciona con servidores que ya vigilas desde tu cuenta, no con cualquier URL al azar.
| Campo | Descripción |
|---|---|
| url | Entrada, obligatoria. La URL exacta del servidor a consultar. |
| status | Salida. Mismos valores que en la API REST. |
| findings_count / worst_severity | Salida. Hallazgos del último escaneo. |
Sin suscripción al servidor consultado, la herramienta devuelve un error visible para el agente (no un fallo silencioso) explicando que hace falta suscribirse primero. Cuenta para el mismo límite mensual de tu plan que la API REST.
Un aviso POST a tu propia URL en cuanto aparece un hallazgo nuevo (severidad media o alta) en un servidor que vigilas — para meterlo en Slack, PagerDuty, o tu propio sistema, sin depender del correo. Se dispara con el mismo criterio que ya usa el email, así que nunca vas a recibir aviso doble de exactamente el mismo hallazgo por los dos canales a la vez y luego nada más.
Disponible en los planes de pago (Starter, Pro y Business). Se gestiona desde tu cuenta → Webhooks — el secreto de firma se enseña una única vez, al crearlo.
{
"event": "findings.new",
"server_id": 42,
"server_name": "ejemplo-mcp",
"generated_at": "2026-08-25T18:00:00Z",
"findings": [
{ "category": "hidden_unicode", "severity": "high", "tool_name": "buscar", "description": "..." }
]
}Cada petición lleva la cabecera X-Centinela-Signature: sha256= seguido del HMAC-SHA256 del cuerpo tal cual, en hexadecimal, con tu secreto como clave — mismo mecanismo que ya usa Stripe, en sentido contrario: aquí el que firma somos nosotros. Recalcula el HMAC del cuerpo recibido y compáralo con la cabecera antes de confiar en la petición.
Sin reintentos automáticos si tu URL falla o tarda — cada intento (éxito, código de error, o sin respuesta) queda en el historial de entregas de tu cuenta para que puedas diagnosticar tu propio receptor. El correo sigue funcionando igual como respaldo, así que un webhook caído no te deja sin avisos.