production-mcp-server
production-mcp-server
Сервер 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Разбивка по слоям
Слой | Что делает | Почему это важно |
Реестр инструментов | Хранит имя, описание, требуемые разрешения и уровень риска для каждого инструмента | Единый источник истины — ни один инструмент не запускается без регистрации |
Контроль разрешений | Проверяет разрешения вызывающей стороны на соответствие требованиям инструмента перед выполнением | Агенты могут вызывать только те инструменты, на которые у них есть явное разрешение |
Защита радиуса поражения | Требует | Агенты не могут случайно запустить разрушительные операции |
Проверка входных данных | Блокирует обход путей, деструктивные SQL-запросы и другие паттерны атак | Эшелонированная защита — проверка выполняется до запуска любого обработчика |
Журнал аудита | Неизменяемый журнал только на добавление для каждого вызова | Полная аудируемость для соответствия требованиям и отладки |
Проблема
Когда ИИ-агенты получают доступ к инструментам, немедленно возникают три режима отказа:
Неограниченный доступ — агенты вызывают инструменты, которые не должны, вызывая непреднамеренные побочные эффекты
Отсутствие журнала аудита — когда что-то идёт не так, невозможно восстановить, что сделал агент
Тихие сбои — ошибки разрешений проглатываются, что делает отладку невозможной
Этот сервер решает все три проблемы.
Архитектура
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 detected5. Структурированный журнал аудита
Каждый вызов — разрешённый или отклонённый — записывается:
# 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Расширение
Добавление нового инструмента
Напишите функцию-обработчик в
src/tools/:
def read_config(config_key: str) -> str:
return os.environ.get(config_key, "not_found")Зарегистрируйте его с разрешениями и уровнем риска:
registry.register(ToolDefinition(
name="read_config",
description="Read a configuration value by key.",
handler=read_config,
required_permissions={"config:read"},
risk_level=RiskLevel.LOW,
))Опубликуйте через 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
Часть стека агентной инфраструктуры
Этот репозиторий — одна из частей портфеля производственной ИИ-агентной инфраструктуры:
Репозиторий | Что это |
Полное проектирование системы: как эти части сочетаются в производственном развёртывании, которое устранило 95% ручного разбора инцидентов при дежурствах | |
← Вы здесь: слой управления MCP | |
Как измеряется качество агентов и регрессии выявляются до релиза |
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