MCPGen
MCPGen
OpenAPI仕様から、ポリシーを意識した安全なMCPサーバーを生成します。
MCPGenは、OpenAPI仕様をデフォルトで安全なツールサーバーに変換する、プロダクション指向のMVP Pythonフレームワークです。FastAPIデモサーバーやMCP形式のstdioサーバーを生成でき、将来的にポリシー設定で明示的に許可されない限り、書き込み操作はブロックされたままになります。
問題点
AIアプリケーションは、多くのAPI、データベース、内部システムへのアクセスを必要とすることがよくあります。フレームワークがない場合、チームは同じ統合を繰り返し構築し、モデルに対して過剰なツールを公開し、リスク分類、監査ログ、書き込み操作のガードレールといった安全管理を省略しがちです。
MCPサーバーはAIシステムがツールを利用できるようにしますが、迅速なプロトタイプ作成では、レビューなしで DELETE、POST、PATCH、PUT といった危険な操作を誤って公開してしまう可能性があります。
解決策
MCPGenはOpenAPIのYAMLまたはJSONファイルを読み込み、以下を生成します:
構造化されたツール記述子
安全に公開されたツールリスト
除外されたツールレポート
入力スキーマ
ポリシーを意識したFastAPIまたはMCPサーバー
ドライラン(空実行)プレビュー
安全な
GET実行JSONL監査ログ
キーワードフォールバック付きのセマンティックツールルーティング
デフォルトの動作は意図的に保守的であり、低リスクの GET ツールのみが公開されます。
機能
OpenAPI YAML/JSON解析
エンドポイントからのツール生成
リスク分類:
GET= 低POST,PUT,PATCH= 中DELETE= 高
デフォルトでの安全なフィルタリング
パス/クエリパラメータおよびJSONリクエストボディからの入力スキーマ生成
キーワードフォールバック付きのセマンティックツールルーティング
FastAPIモード
tools/listおよびtools/callを備えたMCP stdioモードドライランのリクエストプレビュー
低リスクの
GETツールのみに対する安全な実実行中央ポリシーエンジン
JSONL監査ログ
CLIコマンド:
generate,inspectmcpgen.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.yamlFastAPIサーバーを生成:
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/safetyOpenAPI入力例
デモ仕様:
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.logPowerShellでの同等コマンド:
Get-Content logs\audit.logMCPモード
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.pytools/list JSON-RPC入力の例:
{"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モードは、FastAPIモードと同じ tools.json、ポリシーエンジン、監査ログを使用します。現在の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"mcpgen.yaml の routing_mode を変更してサーバーを再生成し、ルーティングモードを比較してください。セマンティックモードはベクトル類似度でランク付けし、キーワードモードは正規化されたトークンの重複度でランク付けし、一致した用語を含めます。
安全性モデル
MCPGenはデフォルトで安全です:
低リスクの
GETツールのみがtools.jsonで公開されます。中リスクの書き込みツールは、将来の設定で明示的に有効にされない限り除外されます。
高リスクの
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.logJSONPlaceholderデモの場合、以下を設定します:
api_base_url: https://jsonplaceholder.typicode.com現在の制限事項
これはプロダクション指向のMVPであり、本番環境対応のフレームワークではありません。
環境変数の準備以外、認証やシークレット管理はありません。
書き込み実行はありません。
確認ワークフローのUIはありません。
ベクトルデータベースや埋め込みキャッシュの最適化はありません。
レート制限はありません。
データベースバックエンドの監査シンクはありません。
公式のPython MCP SDKが利用できない場合、MCPモードは最小限のstdio足場を使用します。
ロードマップ
公式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