Skip to main content
Glama
TushGoel

production-mcp-server

by TushGoel

production-mcp-server

CI Python License Tests

Сервер MCP (Model Context Protocol) производственного уровня, демонстрирующий, как безопасно предоставлять инструменты ИИ-агентам в корпоративных средах.

Большинство примеров MCP показывают, как подключать инструменты к агентам. Этот репозиторий показывает, как делать это безопасно в масштабе — с контролем разрешений, поведенческими ограничениями, контролем радиуса поражения и структурированными журналами аудита при каждом вызове.


Проблема → Решение → Эффект

Проблема

ИИ-агентам для полезности нужен доступ к инструментам, но неограниченный доступ вызывает инциденты в продакшене. Команды либо полностью ограничивают агентов (бесполезно), либо дают полный доступ (опасно).

Решение

Управляемый шлюзовой слой MCP, расположенный между каждым агентом и каждым инструментом: с проверкой разрешений, контролем радиуса поражения и полным аудитом каждого вызова.

Эффект

Агенты безопасно работают в продакшене с авторизацией корпоративного уровня. Команды безопасности могут аудировать каждое действие. Разработчики выпускают функции агентов, не опасаясь побочных эффектов.


Related MCP server: nice

Проектирование системы

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

Разбивка по слоям

Слой

Что делает

Почему это важно

Реестр инструментов

Хранит имя, описание, требуемые разрешения и уровень риска для каждого инструмента

Единый источник истины — ни один инструмент не запускается без регистрации

Контроль разрешений

Проверяет разрешения вызывающей стороны на соответствие требованиям инструмента перед выполнением

Агенты могут вызывать только те инструменты, на которые у них есть явное разрешение

Защита радиуса поражения

Требует confirmed=True для операций с уровнем риска HIGH

Агенты не могут случайно запустить разрушительные операции

Проверка входных данных

Блокирует обход путей, деструктивные SQL-запросы и другие паттерны атак

Эшелонированная защита — проверка выполняется до запуска любого обработчика

Журнал аудита

Неизменяемый журнал только на добавление для каждого вызова

Полная аудируемость для соответствия требованиям и отладки

Проблема

Когда ИИ-агенты получают доступ к инструментам, немедленно возникают три режима отказа:

  1. Неограниченный доступ — агенты вызывают инструменты, которые не должны, вызывая непреднамеренные побочные эффекты

  2. Отсутствие журнала аудита — когда что-то идёт не так, невозможно восстановить, что сделал агент

  3. Тихие сбои — ошибки разрешений проглатываются, что делает отладку невозможной

Этот сервер решает все три проблемы.

Архитектура

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
│  └──────────────────────┘   │
└─────────────────────────────┘

Ключевые паттерны

1. Управляемый доступ к инструментам

Каждый инструмент регистрируется с явными требованиями к разрешениям:

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. Контроль разрешений

Защитный слой проверяет разрешения до запуска любого обработчика:

# 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. Контроль радиуса поражения

Инструменты с уровнем риска HIGH требуют явного флага подтверждения — агенты не могут случайно запустить разрушительные операции:

# 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. Проверка входных данных

Проверки на уровне аргументов выполняются до любого обработчика инструмента:

# 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. Структурированный журнал аудита

Каждый вызов — разрешённый или отклонённый — записывается:

# 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()}")

Структура проекта

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

Установка

pip install -e ".[dev]"

Запуск сервера

python -m src.server

Подключите любой MCP-совместимый клиент (Claude Desktop, Claude Code и т. д.) к серверу.

Запуск тестов

pytest tests/ -v

Расширение

Добавление нового инструмента

  1. Напишите функцию-обработчик в src/tools/:

def read_config(config_key: str) -> str:
    return os.environ.get(config_key, "not_found")
  1. Зарегистрируйте его с разрешениями и уровнем риска:

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. Опубликуйте через FastMCP:

@mcp.tool()
def config(config_key: str) -> str:
    return guardrails.invoke("read_config", {"config_key": config_key}, ...)

Защитный слой и слой аудита применяются автоматически — никаких изменений там не требуется.

Интеграция вашего слоя аутентификации

Замените статические CALLER_ID / CALLER_PERMISSIONS в server.py на ваш реальный поставщик удостоверений:

# 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"])

Почему это важно

ИИ-агенты, работающие с доступом к инструментам в продакшене, нуждаются в тех же средствах контроля, что и любой привилегированный сервис: авторизация с минимальными привилегиями, проверка входных данных, ограничение радиуса поражения и полный журнал аудита. Этот репозиторий — эталонная реализация этих паттернов с использованием протокола MCP.

Лицензия

MIT


Часть стека агентной инфраструктуры

Этот репозиторий — одна из частей портфеля производственной ИИ-агентной инфраструктуры:

Репозиторий

Что это

agentic-ops

Полное проектирование системы: как эти части сочетаются в производственном развёртывании, которое устранило 95% ручного разбора инцидентов при дежурствах

production-mcp-server

← Вы здесь: слой управления MCP

agent-eval-framework

Как измеряется качество агентов и регрессии выявляются до релиза

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