production-mcp-server
production-mcp-server
Ein produktionsreifer MCP-Server (Model Context Protocol), der demonstriert, wie Tools sicher für KI-Agenten in Unternehmensumgebungen bereitgestellt werden.
Die meisten MCP-Beispiele zeigen, wie man Tools mit Agenten verbindet. Dieses Repository zeigt, wie man es sicher in großem Maßstab macht – mit Berechtigungsdurchsetzung, verhaltensbezogenen Schutzmechanismen, Blast-Radius-Kontrollen und strukturierten Audit-Trails bei jedem Aufruf.
Das Problem → Lösung → Auswirkung
Problem | KI-Agenten benötigen Tool-Zugriff, um nützlich zu sein – aber uneingeschränkter Tool-Zugriff verursacht Produktionsstörungen. Teams sperren Agenten entweder komplett ein (nutzlos) oder gewähren vollen Zugriff (gefährlich). |
Lösung | Eine kontrollierte MCP-Gateway-Schicht, die zwischen jedem Agenten und jedem Tool sitzt: berechtigungsgeprüft, mit kontrolliertem Blast-Radius und bei jedem Aufruf vollständig auditiert. |
Auswirkung | Agenten arbeiten sicher in der Produktion mit einer Autorisierung auf Enterprise-Niveau. Sicherheitsteams können jede Aktion prüfen. Entwickler liefern Agentenfunktionen aus, ohne Angst vor Nebenwirkungen zu haben. |
Related MCP server: evav-gateway
Systemdesign
graph TD
A[🤖 AI Agent<br/>Claude / Any LLM] -->|MCP Protocol| B
subgraph MCP Gateway — Governed Tool Access
B[Request Received] --> C{Layer 1<br/>Permission Check}
C -->|Missing permissions| D[❌ Denied<br/>Audit logged]
C -->|Permitted| E{Layer 2<br/>Blast-Radius Guard}
E -->|HIGH risk, no confirmation| F[❌ Blocked<br/>Audit logged]
E -->|Confirmed or LOW/MED| G{Layer 3<br/>Input Validation}
G -->|Path traversal / SQL injection| H[❌ Blocked<br/>Audit logged]
G -->|Clean inputs| I[✅ Tool Handler Executes]
end
I --> J[(Tool Registry<br/>name · permissions · risk_level)]
I --> K[📋 Audit Trail<br/>every call · permitted or denied]
subgraph Tools
I --> L[📊 Read Metrics]
I --> M[🔍 Query Database]
I --> N[🚀 Trigger Rollback<br/>HIGH RISK — requires confirmed=True]
endAufschlüsselung der Schichten
Schicht | Was sie tut | Warum sie wichtig ist |
Tool-Registry | Speichert Name, Beschreibung, erforderliche Berechtigungen und Risikostufe für jedes Tool | Single Source of Truth – kein Tool läuft ohne Registrierung |
Berechtigungsdurchsetzung | Prüft vor der Ausführung die Berechtigungen des Aufrufers gegen die Tool-Anforderungen | Agenten können nur Tools aufrufen, für die sie ausdrücklich autorisiert sind |
Blast-Radius-Schutz | Erfordert | Agenten können nicht versehentlich destruktive Operationen auslösen |
Eingabevalidierung | Blockiert Path Traversal, destruktives SQL und andere Angriffsmuster | Defense-in-Depth – validiert, bevor ein Handler läuft |
Audit-Trail | Unveränderliches Append-only-Log jedes Aufrufs | Vollständige Prüfbarkeit für Compliance und Debugging |
Das Problem
Wenn KI-Agenten Tool-Zugriff erhalten, treten sofort drei Fehlermodi auf:
Uneingeschränkter Zugriff – Agenten rufen Tools auf, die sie nicht aufrufen sollten, was unbeabsichtigte Nebenwirkungen verursacht
Kein Audit-Trail – Wenn etwas schiefgeht, lässt sich nicht rekonstruieren, was der Agent getan hat
Stille Fehler – Berechtigungsfehler werden verschluckt, was Debugging unmöglich macht
Dieser Server adressiert alle drei.
Architektur
Agent (Claude / any LLM)
│
▼ MCP Protocol
┌─────────────────────────────┐
│ MCP Server │
│ ┌──────────────────────┐ │
│ │ Guardrail Layer │ │ ← permission check → blast-radius guard → arg validation
│ └──────────┬───────────┘ │
│ │ │
│ ┌──────────▼───────────┐ │
│ │ Tool Registry │ │ ← name, description, required_permissions, risk_level
│ └──────────┬───────────┘ │
│ │ │
│ ┌──────────▼───────────┐ │
│ │ Tool Handlers │ │ ← plain Python functions, no security logic here
│ └──────────────────────┘ │
│ │ │
│ ┌──────────▼───────────┐ │
│ │ Audit Trail │ │ ← every invocation logged, permitted or denied
│ └──────────────────────┘ │
└─────────────────────────────┘Kernmuster
1. Kontrollierter Tool-Zugriff
Jedes Tool wird mit expliziten Berechtigungsanforderungen registriert:
registry.register(ToolDefinition(
name="trigger_rollback",
description="Initiate a deployment rollback.",
handler=trigger_rollback,
required_permissions={"deployments:write", "deployments:rollback"},
risk_level=RiskLevel.HIGH,
requires_confirmation=True, # blast-radius guard
))2. Berechtigungsdurchsetzung
Die Guardrail-Schicht prüft Berechtigungen, bevor ein Handler läuft:
# Agent tries to trigger rollback but lacks deployments:write
guardrails.invoke(
tool_name="trigger_rollback",
arguments={"deployment_id": "d-123", "reason": "high error rate"},
caller_id="monitoring-agent",
caller_permissions={"deployments:read"}, # missing write permission
)
# → PermissionDeniedError: Caller 'monitoring-agent' lacks permissions
# {'deployments:write', 'deployments:rollback'} for tool 'trigger_rollback'3. Blast-Radius-Kontrollen
Tools mit hohem Risiko erfordern ein explizites Bestätigungs-Flag – Agenten können nicht versehentlich destruktive Operationen auslösen:
# Without confirmation — blocked
guardrails.invoke("trigger_rollback", {...}, confirmed=False)
# → GuardrailViolationError: HIGH risk tool requires confirmed=True
# With confirmation — permitted
guardrails.invoke("trigger_rollback", {...}, confirmed=True)4. Eingabevalidierung
Prüfungen auf Argumentebene laufen vor jedem Tool-Handler:
# Path traversal — blocked automatically
guardrails.invoke("read_file", {"path": "../../etc/passwd"}, ...)
# → GuardrailViolationError: Path traversal detected
# Destructive SQL — blocked automatically
guardrails.invoke("query", {"query": "DROP TABLE users"}, ...)
# → GuardrailViolationError: Destructive SQL pattern detected5. Strukturierter Audit-Trail
Jeder Aufruf – erlaubt oder verweigert – wird aufgezeichnet:
# After some invocations
events = audit.get_events()
print(events[0].to_json())
# {
# "tool_name": "read_deployment_status",
# "caller_id": "oncall-agent-v1",
# "arguments": {"deployment_id": "d-abc"},
# "result": "{'status': 'healthy', ...}",
# "permitted": true,
# "timestamp": "2026-08-26T14:30:00+00:00",
# "duration_ms": 12.4
# }
print(f"Denied requests: {audit.denied_count()}")Projektstruktur
production-mcp-server/
├── src/
│ ├── server.py # MCP server entry point — tool registration + FastMCP wiring
│ ├── registry.py # Tool registry — metadata, permissions, risk classification
│ ├── guardrails.py # Guardrail layer — 3-layer enforcement on every invocation
│ ├── audit.py # Structured audit trail — append-only event log
│ └── tools/
│ └── example_tools.py # Example handlers — swap with your real data sources
├── tests/
│ ├── test_guardrails.py # Permission enforcement, blast-radius, input validation
│ └── test_registry.py # Tool registration and lookup
├── examples/
│ └── basic_usage.py # Standalone usage without the MCP server
└── pyproject.tomlInstallation
pip install -e ".[dev]"Server ausführen
python -m src.serverVerbinden Sie einen beliebigen MCP-kompatiblen Client (Claude Desktop, Claude Code usw.) mit dem Server.
Tests ausführen
pytest tests/ -vErweitern
Hinzufügen eines neuen Tools
Schreiben Sie die Handler-Funktion in
src/tools/:
def read_config(config_key: str) -> str:
return os.environ.get(config_key, "not_found")Registrieren Sie es mit Berechtigungen und Risikostufe:
registry.register(ToolDefinition(
name="read_config",
description="Read a configuration value by key.",
handler=read_config,
required_permissions={"config:read"},
risk_level=RiskLevel.LOW,
))Stellen Sie es über FastMCP bereit:
@mcp.tool()
def config(config_key: str) -> str:
return guardrails.invoke("read_config", {"config_key": config_key}, ...)Die Guardrail- und Audit-Schichten werden automatisch angewendet – dort sind keine Änderungen erforderlich.
Integration Ihrer Auth-Schicht
Ersetzen Sie die statischen CALLER_ID / CALLER_PERMISSIONS in server.py durch Ihren echten Identitätsanbieter:
# Example: derive permissions from an OAuth token in the MCP session context
def get_caller_context(session) -> tuple[str, set[str]]:
token = session.headers.get("Authorization")
claims = verify_jwt(token)
return claims["sub"], set(claims["permissions"])Warum das wichtig ist
KI-Agenten, die in der Produktion mit Tool-Zugriff arbeiten, benötigen dieselben Kontrollen wie jeder privilegierte Dienst: Least-Privilege-Autorisierung, Eingabevalidierung, Blast-Radius-Grenzen und einen vollständigen Audit-Trail. Dieses Repository ist eine Referenzimplementierung dieser Muster mithilfe des MCP-Protokolls.
Lizenz
MIT
Teil des Agentic-Infrastruktur-Stacks
Dieses Repository ist ein Baustein eines Portfolios für KI-Agenten-Infrastruktur in der Produktion:
Repo | Was es ist |
Vollständiges Systemdesign: wie diese Bausteine in einer Produktionsbereitstellung zusammenspielen, die 95 % der manuellen On-Call-Triage eliminiert hat | |
← Sie sind hier: die MCP-Governance-Schicht | |
Wie die Qualität von Agenten gemessen und Regressionen erkannt werden, bevor sie ausgeliefert werden |
This server cannot be deployed
Maintenance
Related MCP Connectors
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
Governed app access for AI agents: 1,000+ apps & 12,000+ tools via Code Mode MCP.
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceEnables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.17 npmMIT
evav-gatewayofficial
AlicenseNot gradedqualityDmaintenanceGoverned MCP gateway that lets AI agents call tools with policy enforcement, prompt-injection screening, a kill-switch, and tamper-evident signed audit logs.Apache 2.0- AlicenseNot gradedqualityBmaintenanceEnables agents to invoke declared API capabilities through a governed MCP surface where each call is risk-tiered — low-risk calls execute immediately, medium-risk writes queue for human approval, and high-risk actions are withheld from the tool list entirely. Every call, decision and denial is recorded in an audit trail, and responses carrying third-party text are scanned for prompt-injection signals before an agent can read them.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to securely reach enterprise tools and other agents through a governed gateway with pinned tool definitions, delegated authorization, content inspection, human approval, and signed audit trails.Apache 2.0