Skip to main content
Glama
TushGoel

production-mcp-server

by TushGoel

production-mcp-server

CI Python License Tests

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

Desglose 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 confirmed=True para operaciones de riesgo ALTO

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:

  1. Acceso sin restricciones — los agentes llaman a herramientas que no deberían, lo que causa efectos secundarios no deseados.

  2. Sin pista de auditoría — cuando algo sale mal, no se puede reconstruir lo que hizo el agente.

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

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

Instalación

pip install -e ".[dev]"

Ejecutar el servidor

python -m src.server

Conecta cualquier cliente compatible con MCP (Claude Desktop, Claude Code, etc.) al servidor.

Ejecutar pruebas

pytest tests/ -v

Extensión

Añadir una nueva herramienta

  1. Escribe la función del manejador en src/tools/:

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

agentic-ops

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

production-mcp-server

← Estás aquí: la capa de gobernanza de MCP

agent-eval-framework

Cómo se mide la calidad de los agentes y se detectan las regresiones antes de que se publiquen

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