Skip to main content
Glama
tomjwxf

protect-mcp

⚠️ Dieses Repository wurde verschoben. Die aktive Entwicklung wird unter ScopeBlind/scopeblind-gateway fortgesetzt.

Dieser persönliche Fork ist möglicherweise nicht auf dem Stand des kanonischen Repositorys. Bitte verwenden Sie das Organisations-Repository für Issues, Pull Requests und den neuesten Code.

protect-mcp

Sicherheits-Gateway für MCP-Server. Standardmäßig Protokollierung im Shadow-Modus, tool-spezifische Richtlinien, optionale lokale Ed25519-Belege und verifizierungsfreundliche Audit-Ausgabe.

Aktueller CLI-Pfad: Umhüllen Sie jeden stdio-MCP-Server als transparenten Proxy. Im Shadow-Modus protokolliert er jede tools/call-Anfrage und lässt alles durch. Fügen Sie eine Richtliniendatei hinzu, um tool-spezifische Regeln durchzusetzen. Führen Sie protect-mcp init aus, um lokale Signierschlüssel und Konfigurationen zu generieren, damit das Gateway auch signierte Belege ausstellen kann.

Schnellstart

# Wrap an existing OpenClaw / MCP config into a usable pack
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe

# Shadow mode — log every tool call, enforce nothing
npx protect-mcp -- node my-server.js

# Generate keys + config template for local signing
npx protect-mcp init

# Shadow mode with local signing enabled
npx protect-mcp --policy protect-mcp.json -- node my-server.js

# Enforce mode
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js

# Export an offline-verifiable audit bundle
npx protect-mcp bundle --output audit.json

Was es tut

protect-mcp sitzt als stdio-Proxy zwischen Ihrem MCP-Client und -Server:

MCP Client ←stdin/stdout→ protect-mcp ←stdin/stdout→ your MCP server

Es fängt tools/call JSON-RPC-Anfragen ab und:

  • Shadow-Modus (Standard): protokolliert jeden Tool-Aufruf und lässt alles durch

  • Enforce-Modus: wendet tool-spezifische Richtlinienregeln wie block, rate_limit und min_tier an

  • Optionale lokale Signierung: wenn die Signierung konfiguriert ist, wird neben dem strukturierten Protokoll ein Ed25519-signierter Beleg ausgegeben

Alle anderen MCP-Nachrichten (initialize, tools/list, Benachrichtigungen) werden transparent durchgereicht.

Was heute verfügbar ist

  • Tool-spezifische Richtlinien — blockieren Sie destruktive Tools, begrenzen Sie die Rate teurer Tools und fügen Sie Mindest-Tier-Anforderungen hinzu

  • Strukturierte Entscheidungsprotokolle — jede Entscheidung wird mit [PROTECT_MCP] an stderr ausgegeben

  • Optionale lokal signierte Belege — werden generiert, wenn Sie mit einer Richtlinie ausführen, die signing.key_path enthält, in .protect-mcp-receipts.jsonl gespeichert und unter http://127.0.0.1:9876/receipts bereitgestellt

  • Offline-Verifizierung — verifizieren Sie Belege oder Pakete mit npx @veritasacta/verify

  • Kein Konto erforderlich — lokale Schlüssel, lokale Richtlinie, lokaler Prozess

Aktuelle Funktionsgrenzen

Diese Punkte sind wichtig, bevor Sie dies einführen oder mit Benutzern sprechen:

  • Die Signierung erfolgt nicht automatisch auf dem einfachen npx protect-mcp -- ... Pfad. Dieser Pfad protokolliert Entscheidungen im Shadow-Modus. Für die lokale Signierung führen Sie npx protect-mcp init aus und starten dann das Gateway mit der generierten Richtliniendatei.

  • Tier-bewusste Richtlinienprüfungen sind aktiv, aber die Manifest-Zulassung ist nicht im Standard-CLI/stdio-Pfad integriert. Die CLI setzt Sitzungen standardmäßig auf unknown, es sei denn, eine Host-Integration ruft die Zulassungs-API programmatisch auf.

  • Die Anmeldeinformationskonfiguration validiert derzeit umgebungsbasierte Referenzen und zeichnet Anmeldeinformations-Labels in Protokollen/Belegen auf. Die generische Injektion pro Aufruf in beliebige stdio-Tools ist adapterspezifisch und wird vom Standard-Proxy-Pfad nicht durchgeführt.

  • Externe PDP-Adapter und Audit-Bundle-Helfer existieren als exportierte Dienstprogramme. Sie sind noch nicht vollständig in den Standard-CLI-Pfad integriert.

Richtliniendatei

{
  "default_tier": "unknown",
  "tools": {
    "dangerous_tool": { "block": true },
    "admin_tool": { "min_tier": "signed-known", "rate_limit": "5/hour" },
    "read_tool": { "require": "any", "rate_limit": "100/hour" },
    "*": { "rate_limit": "500/hour" }
  },
  "signing": {
    "key_path": "./keys/gateway.json",
    "issuer": "protect-mcp",
    "enabled": true
  },
  "credentials": {
    "internal_api": {
      "inject": "env",
      "name": "INTERNAL_API_KEY",
      "value_env": "INTERNAL_API_KEY"
    }
  }
}

Richtlinienregeln

Feld

Werte

Beschreibung

block

true

Blockiert dieses Tool explizit

require

"any", "none"

Grundlegende Zugriffsanforderung

min_tier

"unknown", "signed-known", "evidenced", "privileged"

Mindest-Tier erforderlich, falls Ihr Host den Zulassungsstatus festlegt

rate_limit

"N/unit"

Ratenbegrenzung (z. B. "5/hour", "100/day")

Tool-Namen stimmen exakt überein, wobei "*" als Wildcard-Fallback dient.

MCP-Client-Konfiguration

Claude Desktop

Fügen Sie dies zu claude_desktop_config.json hinzu:

{
  "mcpServers": {
    "my-protected-server": {
      "command": "npx",
      "args": [
        "-y", "protect-mcp",
        "--policy", "/path/to/protect-mcp.json",
        "--enforce",
        "--", "node", "my-server.js"
      ]
    }
  }
}

Cursor / VS Code

Das gleiche Muster — ersetzen Sie den Server-Befehl durch protect-mcp, das ihn umhüllt.

CLI-Optionen

protect-mcp [options] -- <command> [args...]
protect-mcp init

Commands:
  init              Generate Ed25519 keypair + config template
  status            Show decision stats and local passport identity
  digest            Generate a local human-readable summary
  receipts          Show recent persisted signed receipts
  bundle            Export an offline-verifiable audit bundle

Options:
  --policy <path>   Policy/config JSON file
  --slug <slug>     Service identifier for logs/receipts
  --enforce         Enable enforcement mode (default: shadow)
  --verbose         Enable debug logging
  --help            Show help

Programmatische Hooks

Die Bibliothek macht auch die Primitive verfügbar, die noch nicht in den Standard-CLI-Pfad integriert sind:

import {
  ProtectGateway,
  loadPolicy,
  evaluateTier,
  meetsMinTier,
  resolveCredential,
  initSigning,
  signDecision,
  queryExternalPDP,
  buildDecisionContext,
  createAuditBundle,
} from 'protect-mcp';

Verwenden Sie diese, wenn Sie Folgendes hinzufügen möchten:

  • Manifest-Zulassung vor Beginn einer Sitzung

  • einen externen PDP (OPA, Cerbos oder einen generischen HTTP-Webhook)

  • benutzerdefinierte, durch Anmeldeinformationen vermittelte Integrationen

  • Audit-Bundle-Export für Ihren eigenen Belegspeicher

Entscheidungsprotokolle und Belege

Jeder Tool-Aufruf gibt strukturiertes JSON an stderr aus:

[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}

Wenn die Signierung konfiguriert ist, folgt ein signierter Beleg:

[PROTECT_MCP_RECEIPT] {"v":2,"type":"decision_receipt","algorithm":"ed25519","kid":"...","issuer":"protect-mcp","issued_at":"2026-03-22T00:00:00Z","payload":{"tool":"read_file","decision":"allow","policy_digest":"...","mode":"shadow","request_id":"..."},"signature":"..."}

Verifizieren mit der CLI: npx @veritasacta/verify receipt.json Verifizieren im Browser: scopeblind.com/verify

Audit-Bundles

Das Paket exportiert einen Helfer für in sich geschlossene Audit-Bundles:

{
  "format": "scopeblind:audit-bundle",
  "version": 1,
  "tenant": "my-service",
  "receipts": ["..."],
  "verification": {
    "algorithm": "ed25519",
    "signing_keys": ["..."]
  }
}

Verwenden Sie createAuditBundle() für Ihre eigenen gesammelten signierten Belege.

Philosophie

  • Shadow zuerst. Sehen Sie, was Agenten tun, bevor Sie etwas erzwingen.

  • Belege sind besser als reine Dashboard-Protokolle. Signierte Artefakte sollten unabhängig verifizierbar sein.

  • Halten Sie die Ansprüche eng. Der Standard-CLI-Pfad leistet noch nicht alles, was die langfristige Architektur unterstützen wird.

  • Bauen Sie auf bestehender Authentifizierung auf. Reißen Sie Ihren Stack nicht auseinander, nur um Kontrolle und Nachweise hinzuzufügen.

Vorfall-verankerte Richtlinienpakete

Werden mit protect-mcp ausgeliefert — jedes verhindert einen echten Angriff:

Richtlinie

Vorfall

OWASP-Kategorien

clinejection.json

CVE-2025-6514: MCP OAuth-Proxy-Hijack (437K Umgebungen)

A01, A03

terraform-destroy.json

Autonomer Terraform-Agent zerstört Produktion

A05, A06

github-mcp-hijack.json

Prompt-Injection über manipuliertes GitHub-Issue

A01, A02, A03

data-exfiltration.json

Datendiebstahl durch Agenten über ausgehenden Tool-Missbrauch

A02, A04

financial-safe.json

Nicht autorisierte Finanztransaktion

A05, A06

npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js

Vollständige OWASP Agentic Top 10 Zuordnung: scopeblind.com/docs/owasp

BYOPE: Externe Richtlinien-Engines

Unterstützt OPA, Cerbos, Cedar (AWS AgentCore) und generische HTTP-Endpunkte:

{
  "policy_engine": "hybrid",
  "external": {
    "endpoint": "http://localhost:8181/v1/data/mcp/allow",
    "format": "cedar",
    "timeout_ms": 200,
    "fallback": "deny"
  }
}

Standards & IP

  • IETF Internet-Draft: draft-farley-acta-signed-receipts-00 — Signierte Entscheidungsbelege für Machine-to-Machine-Zugriffskontrolle

  • Patentstatus: 4 australische vorläufige Patente angemeldet (2025-2026), die Entscheidungsbelege mit konfigurierbarer Offenlegung, Tool-Call-Gateway, Agenten-Manifeste und portable Identität abdecken

  • Verifizierung: MIT-lizenziert — npx @veritasacta/verify --self-test

Lizenz

MIT — frei zu verwenden, zu ändern, zu verteilen und ohne Einschränkungen darauf aufzubauen.

scopeblind.com · npm · GitHub · IETF Draft

Install Server
A
security – no known vulnerabilities
A
license - permissive license
C
quality - C tier

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/tomjwxf/scopeblind-gateway'

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