mcp-sentinel
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 ledgerDescubre servidores del Registro MCP oficial mediante sincronización incremental con
updated_sinceSondea los servidores con métodos de protocolo de solo lectura en ambas revisiones activas de la especificación (
2026-07-28sin estado, y2025-11-25con el handshake deinitialize)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 publicadosRegistra 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 CI —
sentinel verifytermina con código distinto de cero y emite SARIFEs 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.

Lo que deliberadamente no hace
Estas son restricciones, no funcionalidades ausentes. Léelas antes de evaluar las afirmaciones.
Por qué | |
Nunca llama a | Sentinel sondea miles de servidores que no le pertenecen. Sus herramientas incluyen |
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 devDetecta 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 hashDetecta una ampliación de capacidades donde no cambia nada textual en absoluto:
uv run sentinel demo --scenario tests/scenarios/schema_widening.yamlEjecuta la puerta del clasificador, sincroniza un catálogo, sondea un servidor heredado 2025-11-25:
uv run sentinel eval --verboseuv run sentinel syncuv run sentinel probe tests/fixtures/servers/legacy_2025.jsonEstado
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)
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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