Skip to main content
Glama
TushGoel

production-mcp-server

by TushGoel

production-mcp-server

CI Python License Tests

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: nice

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]
    end

Aufschlü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 confirmed=True für Operationen mit hohem Risiko

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:

  1. Uneingeschränkter Zugriff – Agenten rufen Tools auf, die sie nicht aufrufen sollten, was unbeabsichtigte Nebenwirkungen verursacht

  2. Kein Audit-Trail – Wenn etwas schiefgeht, lässt sich nicht rekonstruieren, was der Agent getan hat

  3. 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 detected

5. 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.toml

Installation

pip install -e ".[dev]"

Server ausführen

python -m src.server

Verbinden Sie einen beliebigen MCP-kompatiblen Client (Claude Desktop, Claude Code usw.) mit dem Server.

Tests ausführen

pytest tests/ -v

Erweitern

Hinzufügen eines neuen Tools

  1. Schreiben Sie die Handler-Funktion in src/tools/:

def read_config(config_key: str) -> str:
    return os.environ.get(config_key, "not_found")
  1. 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,
))
  1. 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

agentic-ops

Vollständiges Systemdesign: wie diese Bausteine in einer Produktionsbereitstellung zusammenspielen, die 95 % der manuellen On-Call-Triage eliminiert hat

production-mcp-server

← Sie sind hier: die MCP-Governance-Schicht

agent-eval-framework

Wie die Qualität von Agenten gemessen und Regressionen erkannt werden, bevor sie ausgeliefert werden

A
license - permissive license
Not graded
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 Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A secure MCP gateway for enterprise AI tool execution, enabling governed invocation of business tools with authentication, RBAC, audit logging, PII redaction, and async processing.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a secure MCP gateway for AI agents to access APIs without exposing raw credentials, with scoped access, audit logging, and OAuth support.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.
    134
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Governed 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

View all related MCP servers

Related MCP Connectors

  • See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.

  • Security firewall for AI agents — scans MCP calls for injection, secrets, and risks.

  • Runtime permission, approval, and audit layer for AI agent tool execution.

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/TushGoel/production-mcp-server'

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