MCP Spine
MCP Spine
Context Minifier & State Guard — Ein Local-First-MCP-Middleware-Proxy, der Token-Verschwendung reduziert, Tool-Abnutzung verhindert und Kontext-Verfall eliminiert.
MCP Spine sitzt zwischen Ihrem LLM-Client (Claude Desktop usw.) und Ihren MCP-Servern und bietet Sicherheits-Härtung, intelligentes Tool-Routing, Schema-Kompression und Dateistatus-Verfolgung — alles über einen einzigen Proxy.
Warum
LLM-Agenten, die MCP-Tools verwenden, stehen vor drei Problemen:
Token-Verschwendung — Tool-Schemas verbrauchen Tausende von Token pro Anfrage. Bei über 40 geladenen Tools verbrauchen Sie Kontext für JSON-Schemas, noch bevor das Gespräch überhaupt beginnt.
Kontext-Verfall — In langen Sitzungen greifen LLMs auf alte Dateiversionen zurück, die sie sich zuvor gemerkt haben, und überschreiben stillschweigend Ihre neuesten Änderungen.
Keine Sicherheitsgrenze — MCP-Server laufen mit vollem Zugriff. Es gibt keinen Audit-Trail, kein Rate-Limiting und keine Bereinigung von Geheimnissen zwischen dem LLM und Ihren Tools.
MCP Spine löst alle drei Probleme.
Installation
pip install mcp-spine
# With semantic routing (optional)
pip install mcp-spine[ml]Schnellstart
# Generate config
mcp-spine init
# Diagnose your setup
mcp-spine doctor --config spine.toml
# Validate config
mcp-spine verify --config spine.toml
# Start the proxy
mcp-spine serve --config spine.tomlClaude Desktop Integration
Ersetzen Sie alle Ihre einzelnen MCP-Server-Einträge durch einen einzigen Spine-Eintrag:
{
"mcpServers": {
"spine": {
"command": "python",
"args": ["-u", "-m", "spine.cli", "serve", "--config", "/path/to/spine.toml"],
"cwd": "/path/to/mcp-spine"
}
}
}Das -u-Flag stellt sicher, dass stdout ungepuffert bleibt, was Pipe-Hänger unter Windows verhindert.
Funktionen
Stufe 1: Sicherheits-Proxy
JSON-RPC-Nachrichtenvalidierung und -bereinigung
Bereinigung von Geheimnissen (AWS-Schlüssel, GitHub-Token, Bearer-Token, private Schlüssel, Verbindungszeichenfolgen)
Tool-spezifisches und globales Rate-Limiting mit gleitenden Fenstern
Pfad-Traversal-Prävention mit Symlink-bewusstem Jail
Befehlsinjektionsschutz für das Starten von Servern
HMAC-fingerabdruckbasierter SQLite-Audit-Trail
Circuit-Breaker bei fehlerhaften Servern
Deklarative Sicherheitsrichtlinien über Konfiguration
Stufe 2: Semantischer Router
Lokale Vektor-Embeddings unter Verwendung von
all-MiniLM-L6-v2(keine API-Aufrufe, keine Daten verlassen Ihre Maschine)ChromaDB-gestützte Tool-Indizierung
Routing zur Abfragezeit: Nur die relevantesten Tools werden an das LLM gesendet
spine_set_contextMeta-Tool für expliziten KontextwechselKeyword-Überlappung + Aktualitäts-Boost-Reranking
Hintergrund-Modellladen — Tools funktionieren sofort, Routing aktiviert sich bei Bereitschaft
Stufe 3: Schema-Minifizierung
4 Aggressionsstufen (0=aus, 1=leicht, 2=standard, 3=aggressiv)
Stufe 2 erreicht 61% Token-Einsparungen bei Tool-Schemas
Entfernt
$schema, Titel,additionalProperties, Parameterbeschreibungen, StandardwerteBewahrt alle erforderlichen Felder und Typinformationen
Stufe 4: State Guard
Überwacht Projektdateien über
watchfilesPflegt ein SHA-256-Manifest mit monotoner Versionierung
Injiziert kompakte Status-Pins in Tool-Antworten
Verhindert, dass LLMs veraltete Dateiversionen bearbeiten
Human-in-the-Loop
require_confirmationRichtlinien-Flag für destruktive ToolsSpine fängt den Aufruf ab, zeigt die Argumente an und wartet auf die Benutzerfreigabe
spine_confirm/spine_denyMeta-Tools für das LLM, um die Entscheidung weiterzuleitenTool-spezifische Granularität über Glob-Muster
Tool-Ausgabe-Speicher
Ringpuffer-Caching der letzten 50 Tool-Ergebnisse
Deduplizierung nach Tool-Name + Argument-Hash
TTL-Ablauf (Standard 1 Stunde)
spine_recallMeta-Tool zum Abfragen zwischengespeicherter ErgebnisseVerhindert Kontextverlust, wenn der semantische Router Tools zwischen den Turns austauscht
SSE-Transport
Verbindung zu entfernten MCP-Servern über HTTP/SSE zusätzlich zu lokalen stdio-Servern
Keine externen Abhängigkeiten (verwendet stdlib urllib)
Unterstützt benutzerdefinierte Header für die Authentifizierung
Diagnose
# Check your setup
mcp-spine doctor --config spine.toml
# Live monitoring dashboard
mcp-spine dashboard
# Usage analytics
mcp-spine analytics --hours 24
# Query audit log
mcp-spine audit --last 50
mcp-spine audit --security-only
mcp-spine audit --tool write_fileBeispielkonfiguration
[spine]
log_level = "info"
audit_db = "spine_audit.db"
# Add as many servers as you need — they start concurrently
[[servers]]
name = "filesystem"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
timeout_seconds = 120
[[servers]]
name = "github"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = { GITHUB_TOKEN = "ghp_..." }
timeout_seconds = 180
[[servers]]
name = "sqlite"
command = "uvx"
args = ["mcp-server-sqlite", "--db-path", "/path/to/database.db"]
timeout_seconds = 60
[[servers]]
name = "memory"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-memory"]
timeout_seconds = 60
[[servers]]
name = "brave-search"
command = "node"
args = ["/path/to/node_modules/@modelcontextprotocol/server-brave-search/dist/index.js"]
env = { BRAVE_API_KEY = "your_key" }
timeout_seconds = 60
# Remote server via SSE
# [[servers]]
# name = "remote-tools"
# transport = "sse"
# url = "https://your-server.com/sse"
# headers = { Authorization = "Bearer token" }
# timeout_seconds = 30
# Semantic routing
[routing]
max_tools = 15
rerank = true
# Schema minification — 61% token savings at level 2
[minifier]
level = 2
# State guard — prevent context rot
[state_guard]
enabled = true
watch_paths = ["/path/to/project"]
# Human-in-the-loop for destructive tools
[[security.tools]]
pattern = "write_file"
action = "allow"
require_confirmation = true
[[security.tools]]
pattern = "write_query"
action = "allow"
require_confirmation = true
# Security
[security]
scrub_secrets_in_logs = true
audit_all_tool_calls = true
global_rate_limit = 120
per_tool_rate_limit = 60
[security.path]
allowed_roots = ["/path/to/project"]
denied_patterns = ["**/.env", "**/*.key", "**/*.pem"]Sicherheitsmodell
Defense-in-Depth — jede Schicht geht davon aus, dass die anderen versagen könnten.
Bedrohung | Schadensbegrenzung |
Prompt-Injektion über Tool-Args | Eingabevalidierung, Tool-Namens-Allowlists |
Pfad-Traversal | Symlink-bewusstes Jail für |
Geheimnis-Leckage | Automatische Bereinigung von AWS-Schlüsseln, Token, privaten Schlüsseln |
Durchgehende Agenten-Schleifen | Tool-spezifisches + globales Rate-Limiting |
Befehlsinjektion | Befehls-Allowlist, Blockierung von Shell-Metazeichen |
Denial of Service | Nachrichtengrößenbeschränkungen, Circuit-Breaker |
Zugriff auf sensible Dateien | Deny-List-Muster für |
Tool-Missbrauch | Richtlinienbasierte Blockierung, Audit-Logging, HITL-Bestätigung |
Log-Manipulation | HMAC-Fingerabdrücke bei jedem Audit-Eintrag |
Destruktive Operationen |
|
Architektur
Client ◄──stdio──► MCP Spine ◄──stdio──► Filesystem Server
│ ◄──stdio──► GitHub Server
│ ◄──stdio──► SQLite Server
│ ◄──stdio──► Memory Server
│ ◄──stdio──► Brave Search
│ ◄──SSE────► Remote Server
┌───┴───┐
│SecPol │ ← Rate limits, path jail, secret scrub
│Router │ ← Semantic routing (local embeddings)
│Minify │ ← Schema compression (61% savings)
│Guard │ ← File state pinning (SHA-256)
│HITL │ ← Human-in-the-loop confirmation
│Memory │ ← Tool output cache
└───────┘Startsequenz
Sofortiger Handshake (~2ms) — Reagiert sofort auf
initializeGleichzeitiger Serverstart — Alle Server verbinden sich parallel über
asyncio.gatherProgressive Bereitschaft — Tools verfügbar, sobald ein Server verbunden ist
Späte Serverbenachrichtigung —
tools/listChangedwird gesendet, wenn langsame Server fertig sindHintergrund-ML-Laden — Semantischer Router aktiviert sich im Hintergrund, wenn das Modell geladen ist
Windows-Unterstützung
Kampferprobt unter Windows mit spezifischer Härtung für:
MSIX-Sandbox-Pfade für Claude Desktop-Konfiguration und Logs
npx.cmd-Auflösung übershutil.which()Pfade mit Leerzeichen (
C:\Users\John Doe\) und Klammern (C:\Program Files (x86)\)PureWindowsPathfür plattformübergreifende Basename-ExtraktionZusammenführung von Umgebungsvariablen (Konfigurations-Env erweitert, ersetzt nicht die System-Env)
UTF-8-Kodierung ohne BOM
Ungepufferter stdout (
-u-Flag) zur Vermeidung von Pipe-Hängern
Projektstruktur
mcp-spine/
├── pyproject.toml
├── spine/
│ ├── cli.py # Click CLI (init, serve, verify, audit, dashboard, analytics, doctor)
│ ├── config.py # TOML config loader with validation
│ ├── proxy.py # Core proxy event loop
│ ├── protocol.py # JSON-RPC message handling
│ ├── transport.py # Server pool, circuit breakers, concurrent startup
│ ├── audit.py # Structured logging + SQLite audit trail
│ ├── router.py # Semantic routing (ChromaDB + sentence-transformers)
│ ├── minifier.py # Schema pruning (4 aggression levels)
│ ├── state_guard.py # File watcher + SHA-256 manifest + pin injection
│ ├── memory.py # Tool output cache (ring buffer + dedup + TTL)
│ ├── dashboard.py # Live TUI dashboard (Rich)
│ ├── sse_client.py # SSE transport client for remote servers
│ └── security/
│ ├── secrets.py # Credential detection & scrubbing
│ ├── paths.py # Path traversal jail
│ ├── validation.py # JSON-RPC message validation
│ ├── commands.py # Server spawn guards
│ ├── rate_limit.py # Sliding window throttling
│ ├── integrity.py # SHA-256 + HMAC fingerprints
│ ├── env.py # Fail-closed env var resolution
│ └── policy.py # Declarative security policies
├── tests/
│ ├── test_security.py # Security tests
│ ├── test_config.py # Config validation tests
│ ├── test_minifier.py # Schema minification tests
│ ├── test_state_guard.py # State guard tests
│ ├── test_proxy_features.py # HITL, dashboard, analytics tests
│ └── test_memory.py # Tool output memory tests
├── configs/
│ └── example.spine.toml # Complete reference config
└── .github/
└── workflows/
└── ci.yml # GitHub Actions: test + lint + publishTests
pytest tests/ -v135+ Tests decken Sicherheit, Konfigurationsvalidierung, Schema-Minifizierung, State Guard, HITL-Richtlinien, Dashboard-Abfragen, Analysen, Tool-Speicher und Windows-Pfad-Grenzfälle ab.
CI läuft bei jedem Push: Windows + Linux, Python 3.11/3.12/3.13.
Lizenz
MIT
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/Donnyb369/mcp-spine'
If you have feedback or need assistance with the MCP directory API, please join our Discord server