Skip to main content
Glama

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.


Was Sentinel tut

  registry sync  →  read-only probe  →  canonicalise  →  fingerprint
                                                             ↓
   alert  ←  classify severity  ←  structural diff  ←  compare to approved baseline
     ↓                ↓
  CI gate      hash-chained evidence ledger
  • Entdeckt Server aus der offiziellen MCP-Registry über inkrementelle updated_since-Synchronisation

  • Testet sie mit schreibgeschützten Protokollmethoden über beide aktuellen Spec-Revisionen (2026-07-28 zustandslos und 2025-11-25 mit dem initialize-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-IDs

  • Zeichnet 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 verify endet mit einem Nicht-Null-Exitcode und erzeugt SARIF

  • Ist 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.

Alert volume at four escalation thresholds


Was es bewusst nicht tut

Das sind bewusste Beschränkungen, keine fehlenden Funktionen. Lies sie, bevor du die Behauptungen bewertest.

Warum

Ruft tools/call nie auf

Sentinel testet Tausende von Servern, die ihm nicht gehören. Deren Werkzeuge umfassen send_email, delete_file, transfer_funds. Ein Monitor, der im gesamten Ökosystem beliebige Werkzeuge aufrufen kann, ist die Schwachstelle. ADR-0004

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 dev

Einen 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 hash

Eine Fähigkeitserweiterung erkennen, bei der sich überhaupt kein Text ändert:

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

Das Klassifikator-Gate ausführen, einen Katalog synchronisieren, einen Legacy-2025-11-25-Server testen:

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

Status

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

pytest

117 bestanden

mypy --strict

sauber, 31 Quelldateien

ruff

sauber

bandit

sauber

lint-imports

2 Verträge eingehalten – core/ importiert nachweislich nichts mit I/O

sentinel eval

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-004 mitten 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

01 – Recherche & Analyse

Bedrohungslandschaft, Protokollrecherche, Konkurrenzanalyse, Diagramme

02 – Projektdefinitionsdokument

Problem, Ziele, Nicht-Ziele, Nutzer, Umfang, Risiken

03 – Anforderungen

FRs, NFRs, User Stories, Abnahmekriterien, Rückverfolgbarkeit

04 – High-Level-Design

C4-Kontext/Container/Komponente, Datenfluss, Bereitstellung

05 – Low-Level-Design

Module, Zustandsmaschinen, ERD, DDL, API-Oberflächen

06 – Drift Detection Design

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)

-
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