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 是一个代码生成工具,可将 OpenAPI 规范(JSON 或 YAML)转换为 Python 格式的 MCP 服务项目。生成结果包含工具模块、API 客户端和配置文件,并可选生成 LangGraph Agent、A2A 服务和评测套件。

主要功能

  1. 01从 OpenAPI 规范生成 MCP 服务
  2. 02每个 API 端点对应一个工具模块
  3. 03生成 API 客户端代码(基于 httpx)
  4. 04可选生成 LangGraph Agent 与 A2A 服务
  5. 05可选生成评测模式与基于 LangFuse 的评估

适用场景

  1. 01为现有 REST API 快速搭建 MCP 服务
  2. 02基于 OpenAPI 规范构建 Agent 原型并进行评测

MCP 相关

该工具生成的是 MCP 服务,使用 FastMCP(mcp>=1.9.0)实现,默认以 STDIO 模式运行,向 AI 助手暴露由 API 端点转换而来的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 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
  • 生成服务(以及可选的 Agent/评估):
    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 标志 – 另外生成一个 LangGraph React Agent(包含 A2A 服务、Makefile、README 和 .env.example), 与生成的 MCP 服务一同提供
  • 📊 --generate-eval:添加交互式评估模式和自动化评估套件
  • 🧠 --generate-system-prompt:使用已配置的大模型为 Agent 生成 SYSTEM 提示词
  • 🔌 可选支持 SLIM 传输(请参阅实验部分)

工作原理

  • 提供 OpenAPI 规范(JSON 或 YAML)。
  • 生成器会解析路径、操作和架构,然后将 Jinja2 模板渲染为结构化的 Python MCP 服务。
  • 还可选择生成配套的 LangGraph Agent 和 A2A 服务封装,使其能够调用生成的 MCP 工具。
  • 还支持使用 LangFuse 进行追踪和评估。

开发

本地开发命令
# Setup venv
uv venv && source .venv/bin/activate

# Initial setup (requires uv CLI)
uv sync

CLI 选项

  • --generate-agent
    • 生成一个封装所生成 MCP 服务的 LangGraph React Agent
    • 包含 A2A 服务、Makefile、README 和 .env.example
  • --generate-eval
    • 添加:
      • eval_mode.py(交互式数据集构建器,将追踪记录保存到 eval/dataset.yaml)
      • eval/evaluate_agent.py(由 LangFuse 驱动的评估,使用正确性、幻觉和轨迹准确度指标)
  • --generate-system-prompt
    • 使用已配置的大模型创建适用于所生成工具的 SYSTEM 提示词
  • --enhance-docstring-with-llm
    • 可选择使用大模型改写工具文档字符串
  • --enable-slim
    • 通过 AgntcyFactory 将生成的 A2A Starlette 应用桥接到 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 Agent + MCP 服务

  1. 生成 Agent 和评估用例
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. 配置 Agent 和大模型(参见 大模型提供商文档),以及 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

还要将这些变量导出到 shell 中:

# Exports each line of the .env ignoring lines starting with #
export $(grep -v '^#' .env | xargs)
  1. 进入 Agent 目录并运行模拟服务:
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

现在,Agent 和客户端都已部署,例如可以询问 List my available pets。如果启用了跟踪,可以在 LangFuse(http://localhost:3000)中查看。按照以下步骤评估 Agent:

  1. 在新终端中以评估模式启动 Agent。这将输出工具列表,并提示你评估每个工具并在 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:

  • 运行两个容器:一个通过 HTTP 运行 A2A,另一个将 A2A 桥接到 SLIM,
  • 启动 slim-config.yaml 中定义的 slim-dataplane 服务,
  • 将 Langfuse 接入两个容器(假设可以访问 host.docker.internal;或者将 langfuse 组件添加到生成的 docker-compose 文件中,并将 LANGFUSE_HOST 环境变量更新为 http://langfuse-web:3000)。
  1. 要从客户端连接到桥接至 SLIM 的 Agent,请在新终端中运行:
make run-slim-client

A2A Inspector 工具

A2A Inspector 是用于检查和调试 A2A 服务的实用工具。它提供可视化界面,用于浏览 Agent 卡片并调用 Agent。按照项目页面上的说明构建并运行 Inspector,之后应可通过 localhost:8080 访问。然后即可连接到运行于 localhost:8000/.well-known/agent.json 的 Agent。

项目特定约定

配置文件
  • 每个示例都需要 config.yaml,其中包含授权标头等元数据
  • 生成的 pyproject.toml 包含 Agent 专属依赖项
  • .env.example 模板包含 Agent 专属环境变量
代码生成模式
  • 操作 ID 会转换为 Python 函数名(转换为 snake_case)
  • OpenAPI 参数会映射为带类型提示的函数参数
  • 生成的工具遵循以下模式:async def operation_id(params) -> Any
  • API 客户端使用 httpx,并支持配置基础 URL 和标头

集成点

外部依赖项
  • MCP 协议:使用 mcp>=1.9.0 实现 FastMCP 服务
  • uv 包管理器:依赖管理和执行所必需
  • Jinja2:用于代码生成的模板引擎
  • Ruff:代码格式化和 lint(自动应用于生成的代码)

了解项目的关键文件

  • openapi_mcp_codegen/mcp_codegen.py:核心生成逻辑和模板渲染
  • openapi_mcp_codegen/templates/:模板结构与输出结构相对应
  • examples/petstore/:包含 OpenAPI 规范和配置的完整可运行示例
  • tests/test_mcp_codegen.py:展示预期生成流程的集成测试

实验性

SLIM 支持

使用 --enable-slim 构建可通过 SLIM 传输运行 A2A 服务的 Agent。

  • 使用 --enable-slim 生成时,docker-compose 还会启动 slim-dataplane 服务,并通过 SLIM 连接 Agent。
  • Agent 的 A2A 服务通过 AgntcyFactory 在 SLIM 上运行。
  • 使用 make run-a2a-and-slim 启动 HTTP A2A 和 SLIM 桥接堆栈,其中包括 slim-dataplane。
  • 要从客户端连接到经 SLIM 桥接的 Agent:
    make run-slim-client
    
  • 参考:
A2A 代理

--with-a2a-proxy 标志

  • 生成一个精简的 WebSocket 上游服务,用于部署在外部 a2a-proxy 后面。
  • 单独部署外部 a2a-proxy,并将其配置为连接到 WS 上游(ws://host:port)。该代理会向客户端提供 A2A HTTP API(例如 /a2a/v1)。
  • 与 --generate-agent 配合使用时,可能会提供一个 Makefile 目标(例如 make run-with-proxy),用于在本地启动 WS 上游服务。
  • 该方式仍处于实验阶段,可能会有变更。仅用于评估和原型开发。

常见调试模式

  • 生成的代码通过 Python 的 logging 模块提供了详尽的日志记录
  • 可通过 render_template() 中的 Jinja2 上下文访问模板变量
  • 使用 --dry-run 标志预览生成结果,而不写入文件

🎯 使用 OpenAPI Overlay 增强文档

概述

此工具现在支持使用 OpenAPI Overlay Specification 1.0.0 增强文档。生成对 AI 友好的 MCP 服务,并优化文档字符串,帮助 Agent 更好地理解内容。

快速开始:增强生成
# 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. 生成 Overlay,添加对 AI 友好的描述(如果可用,则使用大模型)
  2. 应用 Overlay,生成增强版 OpenAPI 规范
  3. 生成 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. 大模型增强描述
  • 兼容 OpenAI 的格式(少于 250 个字符)
  • 纯文本——不含 Markdown 或特殊格式
  • 使用场景上下文——“使用场景:”
  • 以操作为导向——以明确的动词开头
2. 智能参数处理
  • 自动检测复杂架构
  • 字典模式适用于包含超过 10 个嵌套参数的架构
  • 简洁的函数签名——不再生成包含 1,000 多个参数的函数
  • 结果:复杂操作的代码量减少 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
Overlay 生成选项
# 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"
大模型增强后
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%Agent 性能更佳
文件管理

纳入版本控制:

  • ✅ openapi.json - 原始 OpenAPI 规范
  • ✅ config.yaml - 配置
  • 🤔 overlay.yaml - 可选(可重新生成,但便于审查和编辑)

自动生成(无需存储):

  • ❌ enhanced_openapi.json - 根据原始规范和 Overlay 派生
  • ❌ mcp_server/ - 生成的代码输出
大模型提供商设置
# 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

你可以手动编辑 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

📚 其他资源

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。