mcp-sentinel
Sentinel
Eine kontinuierliche, Out-of-Band-Vertrauens- und Zuverlässigkeitsschicht für das Ökosystem des Model Context Protocol.
npm hat eine Lockfile und einen Audit-Befehl. MCP hat beides nicht. Sentinel ist beides.
Das Problem
MCP ist die Art, wie KI-Agenten an ihre Werkzeuge kommen. Ein Agent erfährt, was ein Werkzeug tut, indem er tools/list aufruft und die description und inputSchema liest, die der Server zurückgibt – Text, der direkt in den Prompt des Modells einfließt.
Das Protokoll erlaubt ausdrücklich, dass sich diese Antwort zwischen zwei beliebigen Aufrufen ändert, ohne erforderliche erneute Freigabe und ohne Integritätsprüfung.
Ein Server, den du am Montag freigegeben hast, kann deinem Modell am Dienstag andere Anweisungen geben. Das ist ein Rug Pull – und es wurde bereits gegen Produktions-MCP-Server demonstriert und im postmark-mcp-Vorfall real ausgerollt.
Unterdessen verzeichnet das Ökosystem ~9.650 katalogisierte öffentliche Server, über 30 CVEs, die allein in einem 60-Tage-Fenster Anfang 2026 eingereicht wurden, und 88 % der Organisationen berichten von einem KI-Agenten-Vorfall im vergangenen Jahr – gegenüber 23 %, die überhaupt eine Agenten-Identitätsstrategie haben.
Ein vergifteter Server liefert weiterhin HTTP 200. Genau deshalb kann Uptime-Monitoring das nicht erkennen.
Related MCP server: Sentinel Gateway
Was Sentinel tut
registry sync → read-only probe → canonicalise → fingerprint
↓
alert ← classify severity ← structural diff ← compare to approved baseline
↓ ↓
CI gate hash-chained evidence ledgerEntdeckt Server aus der offiziellen MCP-Registry über inkrementelle
updated_since-SynchronisationTestet sie mit schreibgeschützten Protokollmethoden über beide aktuellen Spec-Revisionen (
2026-07-28zustandslos und2025-11-25mit deminitialize-Handshake)Erstellt Fingerprints für jede Werkzeugdefinition – RFC-8785-Kanonisierung → SHA-256 → Merkle-Root pro Oberfläche
Klassifiziert jede Änderung nach Schweregrad –
SAFE/COMPATIBILITY/SECURITY/IDENTITY– mit veröffentlichten Regel-IDsZeichnet alles in einem Append-only-Ledger auf, das hash-verkettet und unabhängig verifizierbar ist
Bewertet jeden Server anhand fünf zerlegbarer Komponenten, sodass ein niedriger Score immer erklärbar ist
Steuert deine CI –
sentinel verifyendet mit einem Nicht-Null-Exitcode und erzeugt SARIFIst selbst ein MCP-Server, sodass ein Agent, bevor er sich bindet, fragen kann: „Ist dieser Server sicher?“
Warum die Schweregrad-Taxonomie das ganze Produkt ist
Ein naiver „Hat sich der Hash geändert?“-Detektor erzeugt katalogweit grob 53 Alarme pro Arbeitstag. Niemand sichtet das; innerhalb von zwei Wochen ist es stummgeschaltet, und die Kontrolle ist nichts mehr wert.
Wenn man den Schweregrad klassifiziert und erst ab „sicherheitsrelevant oder schlimmer“ eskaliert, reduziert sich das auf ~5 pro Tag – das echte Postfach eines echten Menschen.

Was es bewusst nicht tut
Das sind bewusste Beschränkungen, keine fehlenden Funktionen. Lies sie, bevor du die Behauptungen bewertest.
Warum | |
Ruft | Sentinel testet Tausende von Servern, die ihm nicht gehören. Deren Werkzeuge umfassen |
Kann einen von Tag eins an bösartigen Server nicht erkennen | Die Baseline ist das Gift. Das Fingerprinting hat nichts, womit es vergleichen könnte. |
Fixiert Definitionen, nicht Verhalten | Ein Werkzeug kann sein Verhalten ändern, ohne sein Schema zu ändern. Sentinel würde das nicht sehen. |
Kein LLM im Erkennungspfad | Die Eingabe ist angreiferkontrollierter Text, der darauf ausgelegt ist, Sprachmodelle zu manipulieren. Wenn man ihn einem Sprachmodell zur Bewertung vorlegt, platziert man den Detektor im eigenen Bedrohungsmodell des Angriffs. ADR-0007 |
Nicht im Anforderungspfad | Konstruktionsbedingt Out-of-Band. Die Einführung ist eine Konfigurationsänderung, keine Architekturänderung |
Ausprobieren
Erfordert uv. Alles läuft gegen aufgezeichnete Fixtures – kein Netzwerk, keine Drittanbieter-Server, niemals.
uv sync --extra devEinen Rug Pull Ende-zu-Ende erkennen:
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 hashEine Fähigkeitserweiterung erkennen, bei der sich überhaupt kein Text ändert:
uv run sentinel demo --scenario tests/scenarios/schema_widening.yamlDas Klassifikator-Gate ausführen, einen Katalog synchronisieren, einen Legacy-2025-11-25-Server testen:
uv run sentinel eval --verboseuv run sentinel syncuv run sentinel probe tests/fixtures/servers/legacy_2025.jsonStatus
M1–M3 implementiert und grün. M4–M6 entworfen, nicht gebaut.
Meilenstein | Status |
M0 – Designdokumente, ADRs, Bedrohungsmodell | ✅ |
M1 – Registry-Synchronisierung + Dual-Revision-Probe-Client + Konformität | ✅ |
M2 – Kanonisierung, Fingerprinting, Merkle, Nachweis-Ledger | ✅ |
M3 – Schema-Analysator + Schweregrad-Klassifikator + Korpus + CI-Gate | ✅ ⭐ |
M4 – Scheduler + Vertrauensbewertung + Alarmierung | ⬜ entworfen |
M5 – REST-API + Sentinel-als-MCP-Server + Policy-Gate | ⬜ entworfen |
M6 – Dashboard + Bereitstellung | ⬜ entworfen |
Aktuelle Gates, alle grün auf main:
Gate | Ergebnis |
| 117 bestanden |
| sauber, 31 Quelldateien |
| sauber |
| sauber |
| 2 Verträge eingehalten – |
| GRÜN – 66 Korpus-Fälle, 1.000 Präzision/Recall, 1.000 Regel-Zuordnung |
Ehrlich gesagt zu dieser 1.000. Der Korpus wurde zusammen mit den Regeln erstellt, diese Zahlen messen also interne Konsistenz und Regressionssicherheit, nicht Generalisierung auf Angriffe, an die noch niemand gedacht hat. Was das Gate wirklich einbringt, ist, dass eine Regeländerung, die einen bestehenden Fall bricht, den Build scheitern lässt – und es hat sich in M3 bereits bezahlt gemacht, indem es vier echte Defekte erfasste: einen Wortgrenzen-Bug, der
INJ-004mitten im Satz nicht matchbar machte, und einen Schemavergleich, der fehlend mit leer verwechselte und die Beziehung bei jeder Enum-Entfernung umdrehte. Echten Recall zu messen, erfordert Drift aus dem Live-Ökosystem – das ist M4s Aufgabe.
Dokumentation
Beginne mit 02 – PDD für das Was und Warum, danach 06 – Drift Detection Design für den Kernalgorithmus.
Dokument | |
Bedrohungslandschaft, Protokollrecherche, Konkurrenzanalyse, Diagramme | |
Problem, Ziele, Nicht-Ziele, Nutzer, Umfang, Risiken | |
FRs, NFRs, User Stories, Abnahmekriterien, Rückverfolgbarkeit | |
C4-Kontext/Container/Komponente, Datenfluss, Bereitstellung | |
Module, Zustandsmaschinen, ERD, DDL, API-Oberflächen | |
Der Kernalgorithmus. Kanonisierung, Fingerprinting, Schweregrad-Taxonomie, Schema-Subtyping | |
[07 – Trust-Scoring-Modell](docs/07-trust-sc |
2. Verwechslung von "abwesend" mit "leer".
Ich habe eine Abkürzung hinzugefügt, sodass ein Schema, das erscheint, wo vorher keines war, als Verbreiterung gelesen wird, anstatt zu INCOMPARABLE zu komponieren. Ich schrieb es als if not before and after: — was auch auslöst, wenn before {} ist. In JSON Schema ist {} ein gültiges Schema, das alles akzeptiert, also das Gegenteil von abwesend. Das Ergebnis kehrte die Beziehung in jedem Enum-Entfernungsfall um: Das Entfernen eines Enum meldete NARROWED statt WIDENED, und SEC-021 — die Regel, von der die beste Demo des gesamten Projekts abhängt — hörte auf auszulösen. Sechs Unit-Tests deckten es auf. Behoben durch einen expliziten is None-Test, mit einem Kommentar, der das Warum erklärt, denn die Falsy-Version wirkt idiomatischer und ist falsch.
3. Hinzufügen von Eigenschaften bei einem offenen Objekt. Der Analysator berechnete korrekt, dass das Hinzufügen einer deklarierten Eigenschaft zu einem Objekt, bei dem additionalProperties nicht gesetzt ist, die Menge der akzeptierten Dokumente nicht verändert — der Schlüssel war bereits erlaubt. Streng genommen wahr, und es bedeutete, dass SEC-025, SEC-026 und SEC-027 nie sahen, dass ein webhook_url- oder access_token-Parameter hinzugefügt wurde, weil keine Änderung aufgezeichnet wurde. Die Korrektur war eine bewusste Abweichung von der reinen Sprachsemantik: Sentinel überwacht die deklarierte Oberfläche, denn die Eigenschaftsliste ist das, was das Prompt des Modells erreicht und ihm sagt, was es senden darf. Es wird nun als Verbreiterung aufgezeichnet, und die Begründung ist ein Kommentar in schema_compat.py statt Folklore.
4. Bandit hat meinen eigenen Detektor markiert. Der INJ-006-Detektor für versteckte Inhalte enthält wörtliche Nullbreiten- und bidirektionale Steuerzeichen, denn genau danach sucht er. Bandits B613-Prüfung existiert, um genau diese Zeichen im Quellcode zu finden. Sie hatte recht, und der Befund war falsch. Übersprungen mit dem Grund, der in pyproject.toml festgehalten wurde, statt es stillschweigend zu tun.
Das Muster über alle vier hinweg: Die interessanten Fehler lagen nicht in der MCP-Protokollverarbeitung, die gut spezifiziert und größtenteils mechanisch ist. Sie lagen in der Semantik — was "geändert" bedeutet, was "leer" bedeutet, was eine Sicherheitskontrolle tun sollte, wenn ihre eigenen Werkzeuge sie markieren.
Autor: Nathan Alvares · Lizenz: TBD (Apache-2.0 vorgesehen)
Related MCP Connectors
Signed, offline-verifiable safety scores for the MCP servers, packages & tools an agent connects to
The MCP server that vets MCP servers: identity, risk grade and per-tool risk before you install.
Independent trust scores, tool surfaces and change history for MCP servers.
Live behavioral security verifier, schema auditor, and trust oracle for A2A, MCP & x402 agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for checking supply-chain trust before connecting to AI agents, frameworks, or MCP servers.8105 npm29 PyPI1MIT
- AlicenseBqualityDmaintenanceMCP zero-trust gateway that sits in front of every internal MCP server, detects tool-poisoning/metadata drift in real time, and maintains a cryptographic provenance ledger of every agent tool call.201 npmISC
- AlicenseNot gradedqualityBmaintenanceA transparent MCP proxy that independently re-verifies tool-call claims instead of trusting them, paired with devmcp — the git/CI server it's proven against.1MIT
- FlicenseAqualityCmaintenanceAn MCP server that exposes governance, trust-scoring, compliance, guardrail, cost, drift, and supply-chain scanning tools and resources to any MCP client over stdio, Streamable HTTP, or legacy HTTP+SSE. It lets agents route every tool call through a deterministic five-way decision (allow, redact, require approval, deny, or quarantine) with hash-chained evidence, human approval workflows, and in-agent trust gates for LangChain, LangGraph, and Google ADK.30-