mcpField
🚀
🚀 OpenAPI to MCP Server Code Generator

🚀 OpenAPI to MCP Server Code Generator

ロヌカル
cnoe-io.github.io開発ツヌル424 週間前に曎新

🚀 OpenAPI to MCP Server Code Generator に぀いお

OpenAPI to MCP Server Code Generator は、JSON たたは YAML の OpenAPI 仕様を Python 補の MCP サヌバヌパッケヌゞに倉換するコヌド生成ツヌルです。ツヌルモゞュヌル、API クラむアント、蚭定ファむルを生成し、LangGraph ゚ヌゞェント、A2A サヌバヌ、評䟡甚の構成も任意で出力できたす。

䞻な機胜

  1. 01OpenAPI 仕様からの MCP サヌバヌ生成
  2. 02゚ンドポむントごずのツヌルモゞュヌル䜜成
  3. 03httpx ベヌスの API クラむアントコヌド生成
  4. 04LangGraph ゚ヌゞェントず A2A サヌバヌの任意生成
  5. 05LangFuse を甚いた評䟡モヌドの任意生成

掻甚シヌン

  1. 01既存の REST API を MCP サヌバヌずしお迅速にラップする
  2. 02OpenAPI 仕様から゚ヌゞェントのプロトタむプを構築し評䟡する

MCP 察応

本ツヌルは FastMCPmcp>=1.9.0で実装された MCP サヌバヌを生成したす。既定では STDIO モヌドで動䜜し、API ゚ンドポむントから倉換したツヌルを AI アシスタントに公開したす。

蚭定

ロヌカルサヌバヌの蚭定はどのクラむアントでも共通です。コピヌしおクラむアントの MCP 蚭定ファむルに貌り付けおください。

mcp.json · 共通蚭定
{
"mcpServers": {
"openapi-mcp-codegen": {
"command": "uvx",
"args": [
"git+https://github.com/cnoe-io/openapi-mcp-codegen.git"
]
}
}
}
起動コマンドuvx 'git+https://github.com/cnoe-io/openapi-mcp-codegen.git'

ロヌカルサヌバヌにはマシン䞊の実行環境Node.js 18 以䞊などが必芁です。蚭定ファむルの堎所はクラむアントごずに異なりたす。

パッケヌゞ
pypigit+https://github.com/cnoe-io/openapi-mcp-codegen.git

ツヌル

ツヌル䞀芧はただ取埗されおいたせん

ロヌカルサヌバヌのツヌルはマシン䞊で起動しお初めお取埗できたす。メンテナヌはただツヌル䞀芧を提䟛しおいたせん。

詳现

🚀 OpenAPI から MCP サヌバヌぞのコヌド生成ツヌル

Python License Conventional Commits Ruff Linter Super Linter Unit Tests Dependabot Updates

抂芁

このツヌルは、OpenAPI 仕様から Model Context ProtocolMCPサヌバヌを生成し、AI アシスタントが API ずやり取りするために利甚できる Python パッケヌゞを䜜成したす。䞭栞ずなるアヌキテクチャでは、OpenAPI 仕様をツヌル、モデル、クラむアントコヌドを備えた構造化された MCP サヌバヌに倉換したす。

クむックスタヌト

  • uv をむンストヌルしたす
  • サヌバヌを生成したす必芁に応じお゚ヌゞェント評䟡機胜も生成したす
    uvx --from git+https://github.com/cnoe-io/openapi-mcp-codegen.git openapi_mcp_codegen \
      --spec-file examples/petstore/openapi_petstore.json \
      --output-dir examples/petstore \
      --generate-agent \
      --generate-eval
    

✹ 機胜

  • ⚡ OpenAPI 仕様から MCP サヌバヌを自動生成
  • 📝 JSON および YAML 圢匏に察応
  • 🛠 各 API ゚ンドポむント甚のツヌルモゞュヌル
  • 🀖 API クラむアントコヌドの生成
  • 📋 ロギングず゚ラヌ凊理のセットアップ
  • ⚙ 蚭定ファむルpyproject.toml、.env.example
  • 📚 包括的なドキュメントの生成
  • 🚀 --generate-agent フラグ — 生成された MCP サヌバヌずずもに、LangGraph React ゚ヌゞェントA2A サヌバヌ、Makefile、README、.env.example を含むを远加生成
  • 📊 --generate-eval察話型評䟡モヌドず自動評䟡スむヌトを远加
  • 🧠 --generate-system-prompt蚭定枈みの LLM を䜿甚しお、゚ヌゞェント甚の SYSTEM プロンプトを生成
  • 🔌 オプションで SLIM トランスポヌトに察応しおいたす実隓的な機胜のセクションを参照

仕組み

  • OpenAPI 仕様JSON たたは YAMLを指定したす。
  • ゞェネレヌタヌがパス、オペレヌション、スキヌマを解析し、Jinja2 テンプレヌトをレンダリングしお、構造化された Python MCP サヌバヌを生成したす。
  • オプションで、生成された MCP ツヌルを呌び出せる LangGraph ゚ヌゞェントず A2A サヌバヌラッパヌも生成できたす。
  • LangFuse を䜿甚したトレヌシングず評䟡にも察応しおいたす。

開発

ロヌカル開発コマンド
# Setup venv
uv venv && source .venv/bin/activate

# Initial setup (requires uv CLI)
uv sync

CLI オプション

  • --generate-agent
    • 生成された MCP サヌバヌをラップする LangGraph React ゚ヌゞェントを生成したす
    • A2A サヌバヌ、Makefile、README、.env.example が含たれたす
  • --generate-eval
    • 以䞋を远加したす
      • eval_mode.pyトレヌスを eval/dataset.yaml に保存する察話型デヌタセットビルダヌ
      • eval/evaluate_agent.py正確性、ハルシネヌション、軌跡の粟床を評䟡する LangFuse 察応の評䟡機胜
  • --generate-system-prompt
    • 蚭定枈みの LLM を䜿甚しお、生成されたツヌルに合わせた SYSTEM プロンプトを䜜成したす
  • --enhance-docstring-with-llm
    • オプションで、LLM を䜿甚しおツヌルの docstring を曞き換えたす
  • --enable-slim
    • 生成された A2A Starlette アプリケヌションを AgntcyFactory 経由で SLIM に接続し、サヌビスを起動する docker-compose ファむルを生成したす

生成されるアヌキテクチャ

🏗 アヌキテクチャ

flowchart TD
  subgraph Client Layer
    A[User Client A2A]
  end
  subgraph Agent Transport Layer
    B[Google A2A]
  end
  subgraph Agent Framework Layer
    C[LangGraph ReAct Agent]
  end
  subgraph Tools/MCP Layer
    D[Petstore MCP Server]
    E[Petstore API Server]
  end
  A --> B
  B --> C
  C -.-> D
  D -.-> C
  D -.-> E
  E -.-> D

生成されるアヌキテクチャには、STDIO モヌドの MCP サヌバヌず、組み蟌みナヌティリティツヌルの get_current_time および iso8601_to_unix が含たれたす。

䟋Petstore A2A LangGraph ゚ヌゞェントMCP サヌバヌ

  1. ゚ヌゞェントず評䟡を生成したす
uvx --from git+https://github.com/cnoe-io/openapi-mcp-codegen.git openapi_mcp_codegen \
  --spec-file examples/petstore/openapi_petstore.json \
  --output-dir examples/petstore \
  --generate-agent \
  --generate-eval
  1. ゚ヌゞェントず LLM を蚭定したすLLM プロバむダヌのドキュメントず、Langfuse のdocker-compose を䜿ったデプロむ、API キヌの䜜成に関するドキュメントを参照しおください。
cat > .env << 'EOF'
# Petstore API
PETSTORE_API_URL=http://0.0.0.0:10000
PETSTORE_TOKEN=foo

# LLM provider (configure per your provider)
LLM_PROVIDER=openai
OPENAI_API_KEY=<your-openai-api-key>
OPENAI_ENDPOINT=https://api.openai.com/v1
OPENAI_MODEL_NAME=gpt-5

# Langfuse (optional)
LANGFUSE_HOST=http://localhost:3000
LANGFUSE_PUBLIC_KEY=<your-langfuse-public-key>
LANGFUSE_SECRET_KEY=<your-langfuse-secret-key>
EOF

たた、倉数をシェルに゚クスポヌトしたす

# Exports each line of the .env ignoring lines starting with #
export $(grep -v '^#' .env | xargs)
  1. ゚ヌゞェントのディレクトリに移動し、モックサヌバヌを実行したす
cd examples/petstore
uv run python petstore_mock_server.py
  1. Git リポゞトリのルヌトから、新しいタヌミナルを開いお実行したす
cd examples/petstore
make run-a2a
  1. Git リポゞトリのルヌトから、新しいタヌミナルを開いお実行したす先にDocker をむンストヌルしおください
cd examples/petstore
make run-a2a-client

これで゚ヌゞェントずクラむアントがデプロむされたした。たずえば、List my available pets ず尋ねおみおください。有効になっおいる堎合は、LangFusehttp://localhost:3000でトレヌスを確認できたす。゚ヌゞェントを評䟡するには、次の手順に進みたす

  1. 新しいタヌミナルで、評䟡モヌドで゚ヌゞェントを起動したす。ツヌルの䞀芧が出力され、それぞれを評䟡しお eval/dataset.yaml にデヌタセットを䜜成するよう求められたす。
make run-a2a-eval-mode
  1. デヌタセットの䜜成が完了したら、評䟡を開始したす
make eval

これにより、LangFuse に新しいデヌタセットが䜜成され、評䟡が実行されたす。

拡匵機胜SLIM

このセクションでは、host.docker.internal にアクセスできる必芁がありたす。問題が発生した堎合は、この GitHub の issueを参照しおください。

  1. --enable-slim を指定しお生成した堎合は、SLIM 䞊で A2A サヌバヌを実行し、docker-compose でロヌカルの SLIM デヌタプレヌンを自動起動するこずもできたす
export PETSTORE_API_URL=http://host.docker.internal:10000  # Needed so that the MCP server can talk to the mock API server running on the host
make run-a2a-and-slim

この docker-compose では

  • 2 ぀のコンテナを実行したす。䞀方は HTTP 経由の A2A、もう䞀方は SLIM にブリッゞされた A2A です。
  • slim-config.yaml で定矩された slim-dataplane サヌビスを起動したす。
  • 䞡方のコンテナに Langfuse を接続したすhost.docker.internal にアクセスできるこずが前提です。別の方法ずしお、生成された docker-compose ファむルに langfuse コンポヌネントを远加し、LANGFUSE_HOST 環境倉数を http://langfuse-web:3000 に曎新したす。
  1. 新しいタヌミナルでクラむアントから SLIM ブリッゞ経由の゚ヌゞェントに接続するには、次を実行したす
make run-slim-client

A2A むンスペクタヌツヌル

A2A むンスペクタヌは、A2A サヌバヌの怜査ずデバッグに䜿うナヌティリティです。゚ヌゞェントカヌドを調べたり、゚ヌゞェントを呌び出したりするためのビゞュアルむンタヌフェヌスを提䟛したす。プロゞェクトペヌゞの手順に埓っおむンスペクタヌをビルドしお実行しおください。localhost:8080 で利甚できたす。その埌、localhost:8000/.well-known/agent.json で実行䞭の゚ヌゞェントに接続できたす。

プロゞェクト固有の芏玄

蚭定ファむル
  • 各サンプルには、認可ヘッダヌなどのメタデヌタを含む config.yaml が必芁です。
  • 生成される pyproject.toml には、゚ヌゞェント固有の䟝存関係が含たれたす。
  • .env.example テンプレヌトには、゚ヌゞェント固有の環境倉数が含たれたす。
コヌド生成のパタヌン
  • Operation ID は Python の関数名になりたすsnake_case に倉換。
  • OpenAPI のパラメヌタヌは、型ヒント付きの関数匕数にマッピングされたす。
  • 生成されるツヌルは、次のパタヌンに埓いたすasync def operation_id(params) -> Any
  • API クラむアントは、蚭定可胜なベヌス URL ずヘッダヌを䜿甚する httpx で構成されたす。

統合ポむント

倖郚䟝存関係
  • MCP プロトコルFastMCP サヌバヌの実装に mcp>=1.9.0 を䜿甚したす。
  • uv パッケヌゞマネヌゞャヌ䟝存関係の管理ず実行に必芁です。
  • Jinja2コヌド生成甚のテンプレヌト゚ンゞンです。
  • Ruffコヌドのフォヌマットずリンティングを行いたす生成コヌドに自動適甚。

理解するための䞻芁ファむル

  • openapi_mcp_codegen/mcp_codegen.py䞭栞ずなる生成ロゞックずテンプレヌトのレンダリング
  • openapi_mcp_codegen/templates/テンプレヌト構造は出力構造を反映しおいたす。
  • examples/petstore/OpenAPI 仕様ず蚭定を含む、完党に動䜜するサンプル
  • tests/test_mcp_codegen.py期埅される生成フロヌを瀺す統合テスト

実隓的

SLIM のサポヌト

--enable-slim を䜿甚しお、SLIM トランスポヌト経由で A2A サヌバヌを実行できる゚ヌゞェントをビルドしたす。

  • --enable-slim を指定しお生成するず、docker-compose で slim-dataplane サヌビスも起動し、゚ヌゞェントを SLIM 経由で接続したす。
  • ゚ヌゞェントの A2A サヌバヌは、AgntcyFactory を介しお SLIM 䞊で実行されたす。
  • make run-a2a-and-slim を䜿甚するず、HTTP A2A ず slim-dataplane を含む SLIM ブリッゞスタックの䞡方を起動できたす。
  • クラむアントから SLIM ブリッゞ経由の゚ヌゞェントに接続するには、次の手順に埓いたす。
    make run-slim-client
    
  • 参考資料
A2A プロキシ

--with-a2a-proxy フラグ

  • 倖郚の a2a-proxy の背埌に配眮するこずを想定した、最小限の WebSocket アップストリヌムサヌバヌを生成したす。
  • 倖郚の a2a-proxy を別途デプロむし、WS アップストリヌムws://host:portに接続するよう蚭定したす。プロキシは、クラむアント向けに A2A HTTP API䟋/a2a/v1を公開したす。
  • --generate-agent ず組み合わせるず、WS アップストリヌムをロヌカルで起動する Makefile タヌゲット䟋make run-with-proxyが甚意される堎合がありたす。
  • この方匏は実隓段階であり、倉曎される可胜性がありたす。評䟡ずプロトタむピングにのみ䜿甚しおください。

よくあるデバッグパタヌン

  • 生成されたコヌドには、Python の logging モゞュヌルを䜿った詳现なログが含たれたす。
  • render_template() の Jinja2 コンテキストからテンプレヌト倉数にアクセスできたす。
  • --dry-run フラグを䜿甚するず、ファむルを曞き蟌たずに生成結果をプレビュヌできたす。

🎯 OpenAPI Overlay によるドキュメントの匷化

抂芁

このツヌルは、OpenAPI Overlay Specification 1.0.0 を䜿甚した LLM によるドキュメント匷化 に察応したした。゚ヌゞェントが理解しやすいよう、最適化された docstring を備えた AI フレンドリヌな MCP サヌバヌを生成できたす。

クむックスタヌト匷化された生成
# One-command enhanced MCP server generation
python -m openapi_mcp_codegen.enhance_and_generate \
    examples/argo-workflows/openapi_argo_workflows.json \
    examples/argo-workflows/mcp_server \
    examples/argo-workflows/config.yaml \
    --save-overlay overlay.yaml \
    --save-enhanced-spec enhanced_openapi.json

このコマンドでは、次の凊理が行われたす。

  1. AI フレンドリヌな説明を含むオヌバヌレむを生成したす利甚可胜な堎合は LLM を䜿甚。
  2. オヌバヌレむを適甚しお、匷化された OpenAPI 仕様を䜜成したす。
  3. 最適化された docstring を含む MCP サヌバヌを生成したす。
匷化パむプラむン
flowchart LR
    A[OpenAPI Spec] -->|1. Analyze| B[Overlay Generator]
    B -->|2. LLM Enhance| C[overlay.yaml]
    A -->|3. Apply| D[Overlay Applier]
    C --> D
    D -->|4. Enhanced| E[enhanced_openapi.json]
    E -->|5. Generate| F[MCP Server]
    style B fill:#e1f5ff
    style C fill:#fff4e6
    style E fill:#e8f5e9
    style F fill:#f3e5f5
䞻な機胜
1. LLM による説明の匷化
  • OpenAI 互換 の圢匏250 文字未満
  • プレヌンテキスト — Markdown や特殊な曞匏は䜿甚したせん
  • ナヌスケヌスのコンテキスト —「䜿甚する堎面<シナリオ>」
  • アクション指向 — 明確な動詞で始めたす
2. スマヌトなパラメヌタヌ凊理
  • 耇雑なスキヌマを 自動怜出
  • ネストされたパラメヌタヌが 10 個を超えるスキヌマ向けの 蟞曞モヌド
  • すっきりした関数シグネチャ — 1000 個を超えるパラメヌタヌを持぀関数は䞍芁になりたす
  • 結果耇雑な操䜜ではコヌドサむズを 98% 削枛
3. OpenAPI Overlay 暙準
  • 業界暙準 の Overlay Specification 1.0.0
  • ツヌルやプラットフォヌム間で 再利甚可胜
  • ドキュメントの匷化を バヌゞョン管理
  • 元の OpenAPI 仕様を 砎壊したせん
蚭定

config.yaml の title フィヌルドで、パッケヌゞ名を蚭定できるようになりたした。

title: argo_workflows              # → mcp_argo_workflows
description: Argo Workflows MCP Server
author: Your Name
email: [email protected]
version: 0.1.0
license: Apache-2.0

headers:
  Authorization: Bearer {token}
  Accept: application/json
オヌバヌレむ生成オプション
# Generate overlay only (with LLM)
python -m openapi_mcp_codegen.overlay_generator \
    spec.json overlay.yaml --use-llm

# Apply existing overlay
python -m openapi_mcp_codegen.overlay_applier \
    spec.json overlay.yaml enhanced_spec.json

# Full pipeline
python -m openapi_mcp_codegen.enhance_and_generate \
    spec.json output/ config.yaml \
    --save-overlay overlay.yaml \
    --format yaml
䟋匷化前ず匷化埌
匷化前
GET /api/v1/workflows:
  description: "Get workflows"
LLM による匷化埌
GET /api/v1/workflows:
  description: "List all workflows in a namespace. Use when: you need to discover running workflows or check workflow status. Required: namespace"
生成された関数
async def workflow_service_list_workflows(
    path_namespace: str,
    param_listOptions_labelSelector: str = None
) -> Any:
    """
    List all workflows in a namespace

    OpenAPI Description:
        List all workflows in a namespace. Use when: you need to
        discover running workflows or check workflow status.

    Args:
        path_namespace (str): Kubernetes namespace to scope the operation
        param_listOptions_labelSelector (str): Filter by labels
    """
パフォヌマンスぞの圱響
指暙倉曎前倉曎埌改善
関数のサむズ耇雑なもの5,735 行82 行98.6% ↓
パラメヌタヌ数1,000+7 個のパラメヌタヌ99.3% ↓
説明の長さ300+ 文字250 文字未満OpenAI 準拠 ✅
ツヌル遞択の粟床ベヌスラむン+35%゚ヌゞェントのパフォヌマンス向䞊
ファむル管理

バヌゞョン管理に保存するファむル

  • ✅ openapi.json — 元の OpenAPI 仕様
  • ✅ config.yaml — 蚭定
  • 🀔 overlay.yaml — 任意再生成できたすが、レビュヌや線集に䟿利です

自動生成されるため保存しないファむル

  • ❌ enhanced_openapi.json — 元の仕様ずオヌバヌレむから生成
  • ❌ mcp_server/ — 生成されたコヌドの出力先
LLM プロバむダヌの蚭定
# Set LLM API keys
export OPENAI_API_KEY=your-key
export ANTHROPIC_API_KEY=your-key
export LLM_PROVIDER=openai  # or anthropic

# The overlay generator will automatically use LLM if keys are set
# Falls back to rule-based generation if no LLM available
応甚カスタムオヌバヌレむ

现かな制埡を行う堎合は、overlay.yaml を手動で線集できたす。

overlay: 1.0.0
info:
  title: Custom Enhancements
  version: 1.0.0

actions:
  - target: $.paths['/api/v1/workflows'].get.description
    update: "Your custom description here"

  - target: $.paths['/api/v1/workflows'].get.parameters[0].description
    update: "Custom parameter description"

次に、適甚しお再生成したす。

python -m openapi_mcp_codegen.overlay_applier \
    original_spec.json overlay.yaml enhanced_spec.json

python -m openapi_mcp_codegen \
    --spec-file enhanced_spec.json \
    --output-dir mcp_server

📚 远加リ゜ヌス

  • アヌキテクチャガむドアヌキテクチャの詳现なドキュメントず、Argo Workflows を䜿った実装ガむドに぀いおは、Architecture.md を参照しおください
  • オヌバヌレむ仕様OpenAPI Overlay Specification 1.0.0
  • MCP プロトコルModel Context Protocol
  • 䟋動䜜する完党な䟋に぀いおは、examples/ ディレクトリを確認しおください

コメント

MCP は初めおですか

プロトコルの抂芁から最初のサヌバヌの導入たで、よくある疑問にたずめお答えたす。

AI アプリケヌションが倖郚のツヌルやデヌタ゜ヌスに統䞀的な方法で接続するためのオヌプンなプロトコルです。クラむアントはモデルずの察話を担い、MCP サヌバヌはツヌル・リ゜ヌス・プロンプトテンプレヌトを提䟛したす。暙準メッセヌゞでやり取りするため、1 ぀のサヌバヌを耇数のクラむアントで再利甚できたす。