MCPGen
MCPGen
Генерируйте безопасные MCP-серверы с поддержкой политик на основе спецификаций OpenAPI.
MCPGen — это MVP-фреймворк на Python, ориентированный на промышленное использование, который превращает спецификации OpenAPI в безопасные по умолчанию серверы инструментов. Он может генерировать демонстрационный сервер FastAPI или сервер MCP в стиле stdio, при этом операции записи остаются заблокированными, пока будущие политики явно не разрешат их использование.
Проблема
Приложениям ИИ часто требуется доступ ко многим API, базам данных и внутренним системам. Без использования фреймворка команды склонны постоянно пересоздавать одни и те же интеграции, предоставлять модели слишком много инструментов и пропускать такие меры безопасности, как классификация рисков, журналы аудита и механизмы защиты операций записи.
MCP-серверы делают инструменты доступными для систем ИИ, но быстрые прототипы могут случайно открыть доступ к опасным операциям, таким как DELETE, POST, PATCH или PUT, без предварительной проверки.
Решение
MCPGen считывает YAML- или JSON-файл OpenAPI и генерирует:
структурированные дескрипторы инструментов
списки безопасных доступных инструментов
отчеты об исключенных инструментах
схемы входных данных
сервер FastAPI или MCP с поддержкой политик
предварительный просмотр (dry-run)
безопасное выполнение
GETжурналы аудита в формате JSONL
семантическую маршрутизацию инструментов с резервным поиском по ключевым словам
Поведение по умолчанию намеренно консервативно: доступны только низкорисковые инструменты GET.
Функции
Парсинг OpenAPI YAML/JSON
Генерация инструментов на основе эндпоинтов
Классификация рисков:
GET= низкийPOST,PUT,PATCH= среднийDELETE= высокий
Фильтрация «безопасно по умолчанию»
Генерация схемы входных данных на основе параметров пути/запроса и тел запросов JSON
Семантическая маршрутизация инструментов с резервным поиском по ключевым словам
Режим FastAPI
Режим MCP stdio с
tools/listиtools/callПредварительный просмотр запросов (dry-run)
Безопасное реальное выполнение только для низкорисковых инструментов
GETЦентральный механизм политик
Журналирование аудита в формате JSONL
CLI-команды:
generate,inspectКонфигурация через
mcpgen.yaml
Поток архитектуры
OpenAPI spec
-> parser
-> tool generator
-> risk classifier
-> safety filter
-> tools.json / tools.all.json / tools.embeddings.json / safety_report.json
-> generated FastAPI or MCP server
-> policy engine
-> semantic/keyword router
-> dry-run or safe GET execution
-> audit logБыстрый старт
Установите локально:
pip install -e .[dev]Изучите спецификацию:
mcpgen inspect --from examples/jsonplaceholder.openapi.yamlСгенерируйте сервер FastAPI:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholderЗапустите его:
cd generated_jsonplaceholder
export API_BASE_URL=https://jsonplaceholder.typicode.com
uvicorn server:app --reload --port 8001PowerShell:
cd generated_jsonplaceholder
$env:API_BASE_URL = "https://jsonplaceholder.typicode.com"
uvicorn server:app --reload --port 8001Откройте:
http://127.0.0.1:8001/
http://127.0.0.1:8001/docs
http://127.0.0.1:8001/tools
http://127.0.0.1:8001/safetyПример входных данных OpenAPI
Демо-спецификация:
examples/jsonplaceholder.openapi.yamlОна включает:
GET /usersGET /users/{id}GET /postsGET /posts/{id}POST /postsDELETE /posts/{id}
Фрагмент:
paths:
/users/{id}:
get:
operationId: getUserById
summary: Get user by ID
parameters:
- name: id
in: path
required: true
schema:
type: integerПример сгенерированного инструмента
Сгенерированный безопасный инструмент:
{
"name": "get_user_by_id",
"description": "Get user by ID",
"method": "GET",
"path": "/users/{id}",
"risk_level": "low",
"enabled": true,
"operation_id": "getUserById",
"input_schema": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "User ID",
"x-mcpgen-location": "path"
}
},
"required": ["id"]
}
}Исключенные инструменты, такие как create_post и delete_post, остаются в tools.all.json и описаны в safety_report.json.
Демо-команды FastAPI
Из корня проекта:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholder
cd generated_jsonplaceholder
export API_BASE_URL=https://jsonplaceholder.typicode.com
uvicorn server:app --reload --port 8001PowerShell:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholder
cd generated_jsonplaceholder
$env:API_BASE_URL = "https://jsonplaceholder.typicode.com"
uvicorn server:app --reload --port 8001Список доступных безопасных инструментов:
curl http://127.0.0.1:8001/toolsМаршрутизация инструментов по запросу:
curl -X POST http://127.0.0.1:8001/tools \
-H "Content-Type: application/json" \
-d "{\"query\":\"get user by id\"}"Эквивалент PowerShell:
Invoke-RestMethod -Method Post http://127.0.0.1:8001/tools `
-ContentType "application/json" `
-Body '{"query":"get user by id"}'Предварительный просмотр безопасного инструмента:
curl -X POST http://127.0.0.1:8001/tools/get_user_by_id/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"id\":1}}"Выполнение безопасного инструмента GET:
curl -X POST http://127.0.0.1:8001/execute \
-H "Content-Type: application/json" \
-d "{\"tool_name\":\"get_user_by_id\",\"params\":{\"id\":1}}"Эквивалент PowerShell:
Invoke-RestMethod -Method Post http://127.0.0.1:8001/execute `
-ContentType "application/json" `
-Body '{"tool_name":"get_user_by_id","params":{"id":1}}'Показать заблокированное поведение POST:
curl -X POST http://127.0.0.1:8001/tools/create_post/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"title\":\"Hello\",\"body\":\"Demo\",\"userId\":1}}"Показать заблокированное поведение DELETE:
curl -X POST http://127.0.0.1:8001/tools/delete_post/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"id\":1}}"Показать журнал аудита:
cat logs/audit.logЭквивалент PowerShell:
Get-Content logs\audit.logРежим MCP
Сгенерируйте сервер MCP в стиле stdio:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode mcp --output generated_jsonplaceholder_mcpЗапуск:
cd generated_jsonplaceholder_mcp
export API_BASE_URL=https://jsonplaceholder.typicode.com
python server.pyPowerShell:
cd generated_jsonplaceholder_mcp
$env:API_BASE_URL = "https://jsonplaceholder.typicode.com"
python server.pyПример входных данных JSON-RPC tools/list:
{"jsonrpc":"2.0","id":1,"method":"tools/list"}Пример входных данных для предварительного просмотра tools/call:
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_user_by_id","arguments":{"id":1}}}Режим MCP использует те же tools.json, механизм политик и журнал аудита, что и режим FastAPI. В текущей версии MVP tools/call по умолчанию работает в режиме предварительного просмотра. С параметром execution_mode: safe-execute он может выполнять только низкорисковые инструменты GET.
Семантическая маршрутизация инструментов
MCPGen записывает tools.embeddings.json во время генерации и использует его, когда:
routing_mode: semanticЕсли эмбеддинги недоступны или семантическое ранжирование не удается, MCPGen автоматически переключается на маршрутизацию по ключевым словам. Вы можете принудительно включить маршрутизацию по ключевым словам с помощью:
routing_mode: keywordТекст инструмента объединяет имя инструмента, описание и необязательные теги. Пример:
create_invoice create invoice for customer billing paymentsПо умолчанию MCPGen использует детерминированный локальный механизм эмбеддингов, чтобы демо и тесты работали без загрузки моделей. Чтобы использовать sentence-transformers, установите:
export MCPGEN_EMBEDDING_BACKEND=sentence-transformersPowerShell:
$env:MCPGEN_EMBEDDING_BACKEND = "sentence-transformers"Сравните режимы маршрутизации, изменив routing_mode в mcpgen.yaml и перегенерировав сервер. Семантический режим ранжирует по векторному сходству; режим ключевых слов ранжирует по нормализованному пересечению токенов и включает совпавшие термины.
Модель безопасности
MCPGen безопасен по умолчанию:
В
tools.jsonдоступны только низкорисковые инструментыGET.Инструменты записи со средним уровнем риска исключены, если будущая конфигурация явно не разрешит их.
Высокорисковые инструменты
DELETEвсегда заблокированы.Реальное выполнение ограничено только низкорисковыми инструментами
GET.Выполнение операций записи не реализовано.
Аутентификация не реализована.
Решения политики возвращают:
{
"allowed": false,
"status": "blocked",
"reason": "Medium-risk tool is not listed in enabled_tools.",
"risk_level": "medium",
"tool_name": "create_post"
}Журналирование аудита
Журналы аудита — это записи JSONL, записываемые в:
logs/audit.logКонфигурация:
audit_enabled: true
audit_log_path: logs/audit.log
routing_mode: semanticКаждое событие включает:
временную метку
имя инструмента
метод
путь
уровень риска
режим
статус
разрешение
причину
источник
действие
Действия включают:
policy_evaluationdry_runexecution_startedexecution_successexecution_errorexecution_blocked
Конфигурация
Конфигурация по умолчанию:
max_tools: 5
allowed_methods:
- GET
output_dir: generated_mcp_server
api_base_url: https://api.example.com
enabled_tools: []
execution_mode: dry-run
audit_enabled: true
audit_log_path: logs/audit.logДля демо JSONPlaceholder установите:
api_base_url: https://jsonplaceholder.typicode.comТекущие ограничения
Это MVP, ориентированный на промышленное использование, а не готовый к эксплуатации фреймворк.
Нет аутентификации или управления секретами, кроме подготовки переменных окружения.
Нет выполнения операций записи.
Нет пользовательского интерфейса для подтверждения действий.
Нет оптимизации векторной базы данных или кэша эмбеддингов.
Нет ограничения частоты запросов (rate limiting).
Нет хранилища аудита на базе базы данных.
Режим MCP использует минимальный каркас stdio, если официальный Python MCP SDK недоступен.
Дорожная карта
Интеграция с официальным MCP SDK
Управление аутентификацией и секретами
Рабочий процесс подтверждения для включенных инструментов среднего риска
Ограничение частоты запросов
Валидация запросов/ответов
Улучшенная поддержка схем OpenAPI
Подключаемые хранилища аудита
Более качественные модели семантической маршрутизации и оптимизация кэша эмбеддингов
Шаблоны развертывания
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.
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/breezykalama/mcpgen'
If you have feedback or need assistance with the MCP directory API, please join our Discord server