MCPGen
MCPGen
Generieren Sie sichere, richtlinienkonforme MCP-Server aus OpenAPI-Spezifikationen.
MCPGen ist ein produktionsorientiertes MVP-Python-Framework, das OpenAPI-Spezifikationen in standardmäßig sichere Tool-Server umwandelt. Es kann einen FastAPI-Demo-Server oder einen MCP-artigen stdio-Server generieren, während Schreibvorgänge blockiert bleiben, sofern sie nicht durch zukünftige Richtlinien explizit aktiviert werden.
Problem
KI-Anwendungen benötigen häufig Zugriff auf viele APIs, Datenbanken und interne Systeme. Ohne ein Framework neigen Teams dazu, dieselben Integrationen wiederholt zu erstellen, dem Modell zu viele Tools bereitzustellen und Sicherheitskontrollen wie Risikoklassifizierung, Audit-Logs und Schutzmaßnahmen für Schreibvorgänge zu überspringen.
MCP-Server stellen KI-Systemen Tools zur Verfügung, aber schnelle Prototypen können versehentlich gefährliche Operationen wie DELETE, POST, PATCH oder PUT ohne Überprüfung offenlegen.
Lösung
MCPGen liest eine OpenAPI-YAML- oder JSON-Datei und generiert:
strukturierte Tool-Deskriptoren
Listen sicherer, bereitgestellter Tools
Berichte über zurückgehaltene Tools
Eingabeschemata
einen richtlinienkonformen FastAPI- oder MCP-Server
Trockenlauf-Vorschauen
sichere
GET-AusführungJSONL-Audit-Logs
semantisches Tool-Routing mit Keyword-Fallback
Das Standardverhalten ist bewusst konservativ: Nur risikoarme GET-Tools werden bereitgestellt.
Funktionen
OpenAPI YAML/JSON-Parsing
Tool-Generierung aus Endpunkten
Risikoklassifizierung:
GET= niedrigPOST,PUT,PATCH= mittelDELETE= hoch
Standardmäßig sichere Filterung
Eingabeschema-Generierung aus Pfad-/Abfrageparametern und JSON-Anfrage-Bodys
Semantisches Tool-Routing mit Keyword-Fallback
FastAPI-Modus
MCP-stdio-Modus mit
tools/listundtools/callTrockenlauf-Anfrage-Vorschauen
Sichere echte Ausführung nur für risikoarme
GET-ToolsZentrale Richtlinien-Engine
JSONL-Audit-Logging
CLI-Befehle:
generate,inspectKonfiguration über
mcpgen.yaml
Architektur-Ablauf
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 logSchnellstart
Lokal installieren:
pip install -e .[dev]Eine Spezifikation untersuchen:
mcpgen inspect --from examples/jsonplaceholder.openapi.yamlEinen FastAPI-Server generieren:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode fastapi --output generated_jsonplaceholderAusführen:
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Öffnen:
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/safetyBeispiel OpenAPI-Eingabe
Demo-Spezifikation:
examples/jsonplaceholder.openapi.yamlSie enthält:
GET /usersGET /users/{id}GET /postsGET /posts/{id}POST /postsDELETE /posts/{id}
Auszug:
paths:
/users/{id}:
get:
operationId: getUserById
summary: Get user by ID
parameters:
- name: id
in: path
required: true
schema:
type: integerBeispiel für ein generiertes Tool
Generiertes sicheres Tool:
{
"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"]
}
}Zurückgehaltene Tools wie create_post und delete_post verbleiben in tools.all.json und werden in safety_report.json erläutert.
FastAPI-Demo-Befehle
Vom Projektstammverzeichnis aus:
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 8001Liste der bereitgestellten sicheren Tools:
curl http://127.0.0.1:8001/toolsTools nach Abfrage routen:
curl -X POST http://127.0.0.1:8001/tools \
-H "Content-Type: application/json" \
-d "{\"query\":\"get user by id\"}"PowerShell-Äquivalent:
Invoke-RestMethod -Method Post http://127.0.0.1:8001/tools `
-ContentType "application/json" `
-Body '{"query":"get user by id"}'Trockenlauf eines sicheren Tools:
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}}"Ausführung eines sicheren GET-Tools:
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-Äquivalent:
Invoke-RestMethod -Method Post http://127.0.0.1:8001/execute `
-ContentType "application/json" `
-Body '{"tool_name":"get_user_by_id","params":{"id":1}}'Blockiertes POST-Verhalten anzeigen:
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}}"Blockiertes DELETE-Verhalten anzeigen:
curl -X POST http://127.0.0.1:8001/tools/delete_post/dry-run \
-H "Content-Type: application/json" \
-d "{\"inputs\":{\"id\":1}}"Audit-Log anzeigen:
cat logs/audit.logPowerShell-Äquivalent:
Get-Content logs\audit.logMCP-Modus
Einen MCP-artigen stdio-Server generieren:
mcpgen generate --from examples/jsonplaceholder.openapi.yaml --mode mcp --output generated_jsonplaceholder_mcpAusführen:
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.pyBeispiel tools/list JSON-RPC-Eingabe:
{"jsonrpc":"2.0","id":1,"method":"tools/list"}Beispiel tools/call Trockenlauf-Eingabe:
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_user_by_id","arguments":{"id":1}}}Der MCP-Modus verwendet dieselben tools.json, Richtlinien-Engine und Audit-Logging wie der FastAPI-Modus. Im aktuellen MVP ist tools/call standardmäßig ein Trockenlauf. Mit execution_mode: safe-execute können nur risikoarme GET-Tools ausgeführt werden.
Semantisches Tool-Routing
MCPGen schreibt während der Generierung tools.embeddings.json und verwendet es, wenn:
routing_mode: semanticWenn Embeddings nicht verfügbar sind oder das semantische Ranking fehlschlägt, greift MCPGen automatisch auf Keyword-Routing zurück. Sie können das Keyword-Routing erzwingen mit:
routing_mode: keywordDer Tool-Text kombiniert den Tool-Namen, die Beschreibung und optionale Tags. Beispiel:
create_invoice create invoice for customer billing paymentsStandardmäßig verwendet MCPGen ein deterministisches lokales Embedding-Fallback, damit Demos und Tests ohne Modell-Downloads funktionieren. Um sentence-transformers zu verwenden, setzen Sie:
export MCPGEN_EMBEDDING_BACKEND=sentence-transformersPowerShell:
$env:MCPGEN_EMBEDDING_BACKEND = "sentence-transformers"Vergleichen Sie Routing-Modi, indem Sie routing_mode in mcpgen.yaml ändern und den Server neu generieren. Der semantische Modus rankt nach Vektorähnlichkeit; der Keyword-Modus rankt nach normalisierter Token-Überschneidung und enthält übereinstimmende Begriffe.
Sicherheitsmodell
MCPGen ist standardmäßig sicher:
Nur risikoarme
GET-Tools werden intools.jsonbereitgestellt.Tools mit mittlerem Risiko für Schreibvorgänge werden zurückgehalten, sofern sie nicht durch zukünftige Konfiguration explizit aktiviert werden.
Hochriskante
DELETE-Tools werden immer blockiert.Die echte Ausführung ist auf risikoarme
GET-Tools beschränkt.Schreibausführung ist nicht implementiert.
Authentifizierung ist nicht implementiert.
Richtlinienentscheidungen geben zurück:
{
"allowed": false,
"status": "blocked",
"reason": "Medium-risk tool is not listed in enabled_tools.",
"risk_level": "medium",
"tool_name": "create_post"
}Audit-Logging
Audit-Logs sind JSONL-Datensätze, die geschrieben werden nach:
logs/audit.logKonfiguration:
audit_enabled: true
audit_log_path: logs/audit.log
routing_mode: semanticJedes Ereignis enthält:
Zeitstempel
Tool-Name
Methode
Pfad
Risikostufe
Modus
Status
Erlaubt
Grund
Quelle
Aktion
Aktionen umfassen:
policy_evaluationdry_runexecution_startedexecution_successexecution_errorexecution_blocked
Konfiguration
Standardkonfiguration:
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.logFür die JSONPlaceholder-Demo setzen Sie:
api_base_url: https://jsonplaceholder.typicode.comAktuelle Einschränkungen
Dies ist ein produktionsorientiertes MVP, kein produktionsreifes Framework.
Keine Authentifizierung oder Geheimnisverwaltung über die Vorbereitung von Umgebungsvariablen hinaus.
Keine Schreibausführung.
Keine Benutzeroberfläche für Bestätigungs-Workflows.
Keine Vektordatenbank oder Optimierung des Embedding-Caches.
Kein Rate Limiting.
Kein datenbankgestützter Audit-Sink.
Der MCP-Modus verwendet ein minimales stdio-Gerüst, falls das offizielle Python-MCP-SDK nicht verfügbar ist.
Roadmap
Offizielle MCP-SDK-Integration
Authentifizierungs- und Geheimnisverwaltung
Bestätigungs-Workflow für aktivierte Tools mit mittlerem Risiko
Rate Limiting
Anfrage-/Antwort-Validierung
Bessere Unterstützung für OpenAPI-Schemata
Anschließbare Audit-Sinks
Bessere semantische Routing-Modelle und Optimierung des Embedding-Caches
Bereitstellungsvorlagen
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