Documentación de la API

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.

Autenticación

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.

GET /api/v1/status

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.

Parámetros

NombreTipoDescripción
urlquery, obligatorioLa URL exacta de un servidor que vigilas — del catálogo público (suscrito) o privado tuyo, con la misma URL que registraste al suscribirte.

Respuesta

{
  "url": "https://ejemplo.com/mcp",
  "in_catalog": true,
  "status": "sano",
  "findings_count": 0,
  "worst_severity": ""
}
CampoSignificado
statussano, revisar, peligroso, auth, no_responde o sin_revisar.
in_catalogtrue si es del catálogo público, false si es un servidor privado tuyo.
findings_countHallazgos del último escaneo, del más reciente únicamente.
worst_severitylow, medium, high, o vacío si no hay ninguno.

CLI local (servidores MCP sin URL)

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.

Clientes soportados

Detecta automáticamente los servidores configurados en Claude Desktop, Claude Code, Cursor, Windsurf, Cline, OpenCode y Codex CLI.

Instalación

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
SistemaFichero
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

Uso

./centinela-agent login cnt_tu_clave_aqui
./centinela-agent scan

login 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/dashboard

Cada 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.

Errores

CódigoMotivo
400Falta el parámetro url.
401Falta la cabecera X-API-Key, o la clave es inválida/revocada.
404No 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.
429Límite mensual de tu plan alcanzado — se cuenta sumando todas tus claves.

Límites por plan

Peticiones a la API por mes, sumando todas tus claves — no por clave suelta.

PlanPeticiones/mes
Gratis100
Starter500
Pro2.000
BusinessSin límite

Tú mismo puedes ver tu uso del mes y el historial de cada clave desde tu cuenta.

Servidor MCP

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" }
    }
  }
}

Herramienta: check_server_trust

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.

CampoDescripción
urlEntrada, obligatoria. La URL exacta del servidor a consultar.
statusSalida. Mismos valores que en la API REST.
findings_count / worst_severitySalida. 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.

Webhooks

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.

Cuerpo de la petición

{
  "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": "..." }
  ]
}

Verificar la firma

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.