production-mcp-server
production-mcp-server
Un servidor MCP (Model Context Protocol) de nivel de producción que demuestra cómo exponer herramientas de forma segura a los agentes de IA en entornos empresariales.
La mayoría de los ejemplos de MCP muestran cómo conectar herramientas a agentes. Este repositorio muestra cómo hacerlo de forma segura a escala — con aplicación de permisos, salvaguardas de comportamiento, controles de radio de explosión y pistas de auditoría estructuradas en cada invocación.
El problema → Solución → Impacto
Problema | Los agentes de IA necesitan acceso a herramientas para resultar útiles — pero el acceso sin restricciones provoca incidentes de producción. Los equipos o restringen a los agentes (inútiles) o les dan acceso total (peligroso). |
Solución | Una capa de puerta de enlace MCP gobernada que se sitúa entre cada agente y cada herramienta: con permisos verificados, radio de explosión controlado y auditoría completa en cada llamada. |
Impacto | Los agentes operan de forma segura en producción con autorización de nivel empresarial. Los equipos de seguridad pueden auditar cada acción. Los desarrolladores publican funciones de agentes sin temor a efectos secundarios. |
Related MCP server: nice
Diseño del sistema
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]
endDesglose de capas
Capa | Qué hace | Por qué importa |
Registro de herramientas | Almacena nombre, descripción, permisos requeridos y nivel de riesgo para cada herramienta | Fuente única de verdad — ninguna herramienta se ejecuta sin estar registrada |
Aplicación de permisos | Comprueba los permisos del llamador frente a los requisitos de la herramienta antes de la ejecución | Los agentes solo pueden llamar a las herramientas para las que están autorizados explícitamente |
Protección de radio de explosión | Requiere | Los agentes no pueden provocar accidentalmente operaciones destructivas |
Validación de entradas | Bloquea path traversal, SQL destructivo y otros patrones de ataque | Defensa en profundidad — valida antes de que se ejecute cualquier manejador |
Pista de auditoría | Registro inmutable de solo añadidura de cada invocación | Auditabilidad completa para el cumplimiento normativo y la depuración |
El problema
Cuando los agentes de IA obtienen acceso a herramientas, surgen de inmediato tres modos de fallo:
Acceso sin restricciones — los agentes llaman a herramientas que no deberían, lo que causa efectos secundarios no deseados.
Sin pista de auditoría — cuando algo sale mal, no se puede reconstruir lo que hizo el agente.
Fallos silenciosos — los errores de permisos se omiten, lo que imposibilita la depuración.
Este servidor aborda los tres.
Arquitectura
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
│ └──────────────────────┘ │
└─────────────────────────────┘Patrones clave
1. Acceso gobernado a herramientas
Cada herramienta se registra con requisitos de permisos explícitos:
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. Aplicación de permisos
La capa de salvaguarda comprueba los permisos antes de que se ejecute cualquier manejador:
# 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. Controles de radio de explosión
Las herramientas de riesgo ALTO requieren una bandera de confirmación explícita — los agentes no pueden activar accidentalmente operaciones destructivas:
# 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. Validación de entradas
Las comprobaciones a nivel de argumentos se ejecutan antes que cualquier manejador de herramienta:
# 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. Pista de auditoría estructurada
Cada invocación — permitida o denegada — queda registrada:
# 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()}")Estructura del proyecto
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.tomlInstalación
pip install -e ".[dev]"Ejecutar el servidor
python -m src.serverConecta cualquier cliente compatible con MCP (Claude Desktop, Claude Code, etc.) al servidor.
Ejecutar pruebas
pytest tests/ -vExtensión
Añadir una nueva herramienta
Escribe la función del manejador en
src/tools/:
def read_config(config_key: str) -> str:
return os.environ.get(config_key, "not_found")Regístrala con permisos y nivel de riesgo:
registry.register(ToolDefinition(
name="read_config",
description="Read a configuration value by key.",
handler=read_config,
required_permissions={"config:read"},
risk_level=RiskLevel.LOW,
))Exponla mediante FastMCP:
@mcp.tool()
def config(config_key: str) -> str:
return guardrails.invoke("read_config", {"config_key": config_key}, ...)Las capas de salvaguarda y auditoría se aplican automáticamente — no se necesitan cambios allí.
Integración de tu capa de autenticación
Reemplaza los estáticos CALLER_ID / CALLER_PERMISSIONS en server.py por tu proveedor de identidad real:
# 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"])Por qué esto importa
Los agentes de IA que operan con acceso a herramientas en producción necesitan los mismos controles que cualquier servicio privilegiado: autorización de privilegio mínimo, validación de entradas, límites de radio de explosión y una pista de auditoría completa. Este repositorio es una implementación de referencia de esos patrones mediante el protocolo MCP.
Licencia
MIT
Parte del stack de infraestructura agéntica
Este repositorio es una pieza de un portafolio de infraestructura de agentes de IA de producción:
Repo | Qué es |
Diseño completo del sistema: cómo encajan estas piezas en un despliegue de producción que eliminó el 95 % del triaje manual de incidencias en guardia | |
← Estás aquí: la capa de gobernanza de MCP | |
Cómo se mide la calidad de los agentes y se detectan las regresiones antes de que se publiquen |
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityCmaintenanceA 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
- AlicenseNot gradedqualityBmaintenanceProvides a secure MCP gateway for AI agents to access APIs without exposing raw credentials, with scoped access, audit logging, and OAuth support.MIT

AgentsGateofficial
AlicenseNot gradedqualityAmaintenanceEnables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.134MIT
evav-gatewayofficial
AlicenseNot gradedqualityBmaintenanceGoverned 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
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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