Skip to main content
Glama

Sentinel

Una capa de confianza y fiabilidad continua y fuera de banda para el ecosistema del Model Context Protocol.

npm tiene un lockfile y un comando de auditoría. MCP no tiene ninguno de los dos. Sentinel es ambas cosas.


El problema

MCP es la forma en que los agentes de IA obtienen sus herramientas. Un agente aprende qué hace una herramienta llamando a tools/list y leyendo la description y el inputSchema que devuelve el servidor — texto que va directamente al prompt del modelo.

El protocolo permite explícitamente que esa respuesta cambie entre dos llamadas cualesquiera, sin necesidad de nueva aprobación y sin comprobación de integridad.

Un servidor que aprobaste el lunes puede estar dando a tu modelo instrucciones diferentes el martes. Eso es un rug pull, y ya se ha demostrado contra servidores MCP en producción, y se ha distribuido de verdad en el incidente postmark-mcp.

Mientras tanto, el ecosistema tiene ~9,650 servidores públicos catalogados, más de 30 CVEs presentados en una sola ventana de 60 días a principios de 2026, y el 88% de las organizaciones reportan un incidente con agentes de IA en el último año, frente al 23% que tiene alguna estrategia de identidad de agentes.

Un servidor envenenado sigue devolviendo HTTP 200. Por eso la monitorización de disponibilidad no puede ver esto.


Lo que hace Sentinel

  registry sync  →  read-only probe  →  canonicalise  →  fingerprint
                                                             ↓
   alert  ←  classify severity  ←  structural diff  ←  compare to approved baseline
     ↓                ↓
  CI gate      hash-chained evidence ledger
  • Descubre servidores del Registro MCP oficial mediante sincronización incremental con updated_since

  • Sondea los servidores con métodos de protocolo de solo lectura en ambas revisiones activas de la especificación (2026-07-28 sin estado, y 2025-11-25 con el handshake de initialize)

  • Fingerprints cada definición de herramienta — canonicalización RFC 8785 → SHA-256 → raíz Merkle por superficie

  • Clasifica cada cambio por severidad — SAFE / COMPATIBILITY / SECURITY / IDENTITY — con IDs de regla publicados

  • Registra todo en un registro de evidencia de solo añadir (append-only), encadenado por hash y verificable de forma independiente

  • Puntúa cada servidor con cinco componentes descomponibles, de modo que una puntuación baja siempre sea explicable

  • Controla tu CIsentinel verify termina con código distinto de cero y emite SARIF

  • Es en sí mismo un servidor MCP, para que un agente pueda preguntar «¿es seguro este servidor?» antes de vincularse


Por qué la taxonomía de severidad es el producto entero

Un detector ingenuo de «¿ha cambiado el hash?» genera aproximadamente 53 alertas por día laborable en todo el catálogo. Nadie clasifica esas alertas, así que en dos semanas se silencia y el control no vale nada.

Clasificar la severidad y escalar solo cuando sea relevante para la seguridad o peor lo reduce a ~5 por día — la bandeja de entrada real de una persona real.

Volumen de alertas en cuatro umbrales de escalado


Lo que deliberadamente no hace

Estas son restricciones, no funcionalidades ausentes. Léelas antes de evaluar las afirmaciones.

Por qué

Nunca llama a tools/call

Sentinel sondea miles de servidores que no le pertenecen. Sus herramientas incluyen send_email, delete_file, transfer_funds. Un monitor con la capacidad de invocar herramientas arbitrarias en todo el ecosistema es la vulnerabilidad. ADR-0004

No puede detectar un servidor malicioso desde el primer día

La línea base es el veneno. El fingerprinting no tiene nada contra lo que comparar

Fija definiciones, no comportamiento

Una herramienta puede cambiar lo que hace sin cambiar su esquema. Sentinel no lo vería

Sin LLM en la ruta de detección

La entrada es texto controlado por el atacante, diseñado para manipular modelos de lenguaje. Alimentarlo a un modelo de lenguaje para que juzgue sitúa al detector dentro del propio modelo de amenaza del ataque. ADR-0007

No está en la ruta de solicitud

Fuera de banda por diseño. Adoptarlo es un cambio de configuración, no un cambio de arquitectura


Pruébalo

Requiere uv. Todo se ejecuta contra fixtures grabados — sin red, sin servidores de terceros, nunca.

uv sync --extra dev

Detecta un rug pull, de principio a fin:

uv run sentinel demo
▸ T+0m — Baseline. Reviewed by a human and approved.
  root 04dcdce60579b4af…
  baseline approved — drift is measured against this

▸ T+5m — The rug pull. Description only — the schema is untouched.
  DRIFT · SECURITY rules INJ-004, INJ-007
    SECURITY      /tools/send_email/description
      description changed: INJ-004 Exfiltration reference; INJ-007 Concealment instruction.
      evidence: ~/.ssh | Do not mention this to the user

Simulating an attacker with database write access
  rewriting ledger entry seq=4 to hide the finding…
  DETECTED ledger chain broken at seq=4: payload does not match its recorded hash

Detecta una ampliación de capacidades donde no cambia nada textual en absoluto:

uv run sentinel demo --scenario tests/scenarios/schema_widening.yaml

Ejecuta la puerta del clasificador, sincroniza un catálogo, sondea un servidor heredado 2025-11-25:

uv run sentinel eval --verbose
uv run sentinel sync
uv run sentinel probe tests/fixtures/servers/legacy_2025.json

Estado

M1–M3 implementados y en verde. M4–M6 diseñados, no construidos.

Hito

Estado

M0 — Documentos de diseño, ADRs, modelo de amenaza

M1 — Sincronización del registro + cliente de sondeo de doble revisión + conformidad

M2 — Canonicalización, fingerprinting, Merkle, registro de evidencia

M3 — Analizador de esquemas + clasificador de severidad + corpus + puerta de CI

✅ ⭐

M4 — Planificador + puntuación de confianza + alertas

⬜ diseñado

M5 — API REST + Sentinel como servidor MCP + puerta de políticas

⬜ diseñado

M6 — Panel de control + despliegue

⬜ diseñ

2. Confundir "ausente" con "vacío". Añadí un atajo para que un esquema que aparece donde no había ninguno se lea como una ampliación en lugar de componerse como INCOMPARABLE. Lo escribí como if not before and after: — que también se activa cuando before es {}. En JSON Schema, {} es un esquema válido que acepta cualquier cosa, que es lo opuesto a ausente. El resultado invirtió la relación en todos los casos de eliminación de enum: eliminar un enum notificaba NARROWED en lugar de WIDENED, y SEC-021 — la regla de la que depende la mejor demo de todo el proyecto — dejó de activarse. Seis pruebas unitarias lo detectaron. Se corrigió comprobando explícitamente is None, con un comentario explicando el porqué, porque la versión falsy parece más idiomática y es incorrecta.

3. Adiciones de propiedades en un objeto abierto. El analizador calculaba correctamente que añadir una propiedad declarada a un objeto con additionalProperties sin establecer no cambia el conjunto de documentos aceptados — la clave ya estaba permitida. Estrictamente cierto, y significaba que SEC-025, SEC-026 y SEC-027 nunca veían añadirse un parámetro webhook_url o access_token, porque no se registraba ningún cambio. La corrección fue una desviación deliberada de la semántica pura del lenguaje: Sentinel supervisa la superficie declarada, porque la lista de propiedades es lo que llega al prompt del modelo y le indica lo que puede enviar. Ahora se registra como una ampliación, y el razonamiento es un comentario en schema_compat.py en lugar de folclore.

4. Bandit señaló mi propio detector. El detector de contenido oculto INJ-006 contiene caracteres de control literales de ancho cero y bidireccionales, porque eso es lo que busca. La comprobación B613 de Bandit existe para detectar exactamente esos caracteres en el código fuente. Tenía razón, y el hallazgo estaba equivocado. Se omitió con el motivo escrito en pyproject.toml en lugar de hacerlo en silencio.

El patrón en los cuatro casos: los errores interesantes no estaban en el manejo del protocolo MCP, que está bien especificado y es en su mayoría mecánico. Estaban en la semántica — qué significa "cambiado", qué significa "vacío", qué debería hacer un control de seguridad cuando sus propias herramientas lo señalan.


Autor: Nathan Alvares · Licencia: TBD (Apache-2.0 prevista)

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Scans MCP servers for tool poisoning, prompt injection and supply chain risks.

  • Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.

  • Independent A-F trust grade for any MCP server, watched for drift. Free, never for sale.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IronNathanAlvares/mcp-sentinel'

If you have feedback or need assistance with the MCP directory API, please join our Discord server