production-mcp-server
production-mcp-server
Сервер MCP (Model Context Protocol) производственного уровня, демонстрирующий, как безопасно предоставлять инструменты ИИ-агентам в корпоративных средах.
Большинство примеров MCP показывают, как подключать инструменты к агентам. Этот репозиторий показывает, как делать это безопасно в масштабе — с контролем разрешений, поведенческими ограничениями, контролем радиуса поражения и структурированными журналами аудита при каждом вызове.
Проблема → Решение → Эффект
Проблема | ИИ-агентам для полезности нужен доступ к инструментам, но неограниченный доступ вызывает инциденты в продакшене. Команды либо полностью ограничивают агентов (бесполезно), либо дают полный доступ (опасно). |
Решение | Управляемый шлюзовой слой MCP, расположенный между каждым агентом и каждым инструментом: с проверкой разрешений, контролем радиуса поражения и полным аудитом каждого вызова. |
Эффект | Агенты безопасно работают в продакшене с авторизацией корпоративного уровня. Команды безопасности могут аудировать каждое действие. Разработчики выпускают функции агентов, не опасаясь побочных эффектов. |
Related MCP server: evav-gateway
Проектирование системы
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 deployed
Maintenance
Related MCP Connectors
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
Governed app access for AI agents: 1,000+ apps & 12,000+ tools via Code Mode MCP.
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceEnables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.17 npmMIT
evav-gatewayofficial
AlicenseNot gradedqualityDmaintenanceGoverned 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- AlicenseNot gradedqualityBmaintenanceEnables agents to invoke declared API capabilities through a governed MCP surface where each call is risk-tiered — low-risk calls execute immediately, medium-risk writes queue for human approval, and high-risk actions are withheld from the tool list entirely. Every call, decision and denial is recorded in an audit trail, and responses carrying third-party text are scanned for prompt-injection signals before an agent can read them.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to securely reach enterprise tools and other agents through a governed gateway with pinned tool definitions, delegated authorization, content inspection, human approval, and signed audit trails.Apache 2.0