oas2mcp

将任意 OpenAPI 规范文件自动转换为 MCP Server,Rust 编写性能优异,Apache-2.0 开源

🔄 更新: 2026-07-07

oas2mcp 快速入门

你的 REST API 想接入 AI Agent?一个命令,openapi.json 秒变 MCP Server——Rust 编写,零胶水代码。

这是什么?适合谁?

oas2mcp 是一个 Rust 编写的命令行工具,能自动将任何 OpenAPI 规范文件(JSON/YAML)转换为 Model Context Protocol (MCP) Server。它的核心思路极其直接:读入一份 OpenAPI 文档,把文档里的每个 API operation 变成一个 MCP tool——AI Agent 调用这个 tool 时,oas2mcp 自动构建 HTTP 请求发给上游 API,然后把响应返回给 Agent。不需要写一行胶水代码。

与其他 OpenAPI→MCP 转换工具相比,oas2mcp 的差异化在于选用 Rust 而非 TypeScript/Python,带来的优势是:二进制单文件部署、极低内存占用(<10MB)、毫秒级冷启动。劣势也明显:生态更小、Stars 更少(截至 2026-07-06 仅 11 Stars)、需要 Rust 工具链或 Docker 构建。

适合谁?

  • 后端开发者:手头有现成的 OpenAPI 文档(Swagger/OpenAPI 3.x),想让 AI Agent 直接调用内部 API,但不想手写 MCP Server
  • 平台工程团队:需要为内部微服务体系批量生成 MCP 接入点,oas2mcp 的 JWT 角色权限 + OpenTelemetry 指标正好满足企业级需求
  • API 网关运维:配合 Envoy AI Gateway 等代理,oas2mcp 的 stateless streamable-http 模式天然兼容严格代理环境

不适合谁?

  • 需要图形化界面的用户——oas2mcp 纯 CLI 操作
  • 需要一键 npm/pip install 的用户——需要 Rust 或 Docker 构建
  • OpenAPI 文档不规范(缺少 operationId、大量 $ref 嵌套)的场景——自动转换效果会打折扣

准备工作

  • 系统要求:Linux/macOS/Windows 均可;Rust 构建需 rustc 1.80+(edition 2024),或 Docker 环境
  • 前置条件:一份有效的 OpenAPI 3.x 规范文件(JSON 或 YAML 格式),含明确的 operationId
  • 账号要求:无需注册,完全本地运行
  • 付费要求:Apache-2.0 开源协议,完全免费,无任何付费 tier
  • OpenAPI 文档准备建议
    • 确保每个 API operation 有明确的 operationId(oas2mcp 优先使用 operationId 作为 MCP tool 名,没有则回退到 <METHOD>_<path> 格式)
    • 建议 path/query/header 参数定义完整,oas2mcp 会自动将它们转为 MCP tool 的顶层参数
    • 如果有私有文档(如内网 Swagger),准备好认证 header

安装

方式一:Cargo 源码构建(推荐)

git clone https://github.com/therealm-tech/oas2mcp.git
cd oas2mcp
cargo build --release
# 二进制文件位于 target/release/oas2mcp

可选:将二进制加入 PATH:

sudo cp target/release/oas2mcp /usr/local/bin/

方式二:Docker 构建

git clone https://github.com/therealm-tech/oas2mcp.git
cd oas2mcp
docker build -t oas2mcp .

之后通过 Docker 运行:

docker run --rm -v $(pwd)/openapi.json:/spec/openapi.json oas2mcp --openapi-file /spec/openapi.json

注意:截至 2026-07-06,oas2mcp 尚未发布到 crates.io 或 Docker Hub,需从源码构建。这是项目尚处于早期阶段的体现。

基础用法

oas2mcp 的核心命令格式:

oas2mcp [OPTIONS]

必须指定 OpenAPI 来源(二选一):

从本地文件加载(stdio 模式)

最常用的开发场景——直接读取本地的 openapi.json:

oas2mcp --openapi-file ./openapi.json

启动后 oas2mcp 以 stdio 模式运行,等待 MCP 客户端(如 Claude Desktop、Cursor、VS Code Copilot)连接。每个 OpenAPI operation 会自动注册为 MCP tool。

例如,如果 openapi.json 中包含一个 GET /users/{id} 的 operation(operationId: getUser),Agent 就可以直接调用名为 getUser 的 MCP tool,传入 id 参数即可。

从 URL 远程加载

如果你有一个在线托管的 OpenAPI 文档(如公司的 API Gateway 提供的 Swagger UI 端点):

oas2mcp --openapi-url https://api.example.com/v3/api-docs

对于需要认证的私有文档端点:

oas2mcp --openapi-url https://api.internal.example.com/openapi.json \
  --openapi-header "Authorization: Bearer sk-xxxxxx"

选择传输协议

oas2mcp 支持三种 MCP 传输协议:

传输方式适用场景命令参数
stdio(默认)本地子进程 MCP 客户端(Claude Desktop、VS Code 等)无需额外参数
streamable-http远程部署、配合 API Gateway/代理默认使用此模式当通过 HTTP 访问时
SSE(Server-Sent Events)兼容旧版 MCP 客户端旧版 HTTP+SSE 传输(MCP 规范已弃用,保留兼容)

streamable-http 模式下,oas2mcp 默认以 stateless 方式运行——每个请求返回单个 application/json 响应体,与 Envoy AI Gateway 等严格代理天然兼容。如需有状态 session,传 --stream-responses 切换到 SSE 流。

进阶功能

周期性热加载

对于频繁更新 API 的团队,oas2mcp 支持自动重新加载 OpenAPI 文档,无需重启服务:

oas2mcp --openapi-url https://api.example.com/openapi.json \
  --reload-every 5m

配合 OAuth2 自动刷新 token,适合长期运行的 MCP 服务:

oas2mcp --openapi-url https://api.example.com/openapi.json \
  --reload-every 5m \
  --openapi-oauth-token-url https://auth.example.com/oauth/token \
  --openapi-oauth-client-id my-client-id \
  --openapi-oauth-client-secret "$OAUTH_SECRET"

认证穿透

oas2mcp 提供了两层认证控制:

  1. 静态 Header 附加——所有上游 API 请求统一携带固定 header:
oas2mcp --openapi-file ./openapi.json \
  --header "Authorization: Bearer $(cat /run/secrets/api-token)"
  1. 动态 Header 转发(streamable-http 模式)——将 MCP 客户端请求中的 header(如 Authorization)原样转发给上游 API:
oas2mcp --openapi-file ./openapi.json \
  --forward-header Authorization

这意味着 AI Agent 可以用自己的身份凭证访问上游 API,无需共享一个服务级 token。

JWT 角色权限控制(streamable-http 模式)

企业环境中,你可能不希望所有 Agent 都能调用所有 API。oas2mcp 支持基于 JWT 的角色权限:

oas2mcp --openapi-file ./openapi.json \
  --oauth-role-mapper "admin:.*" \
  --oauth-role-mapper "reader:^get|^list|^search"

以上配置:admin 角色可调用所有 tool,reader 角色只能调用以 get/list/search 开头的 tool。

配合 JWT Claim 追踪,可以在日志中看到每次 API 调用的具体用户:

oas2mcp --openapi-file ./openapi.json \
  --trace-claim sub \
  --trace-claim email

可观测性(OpenTelemetry)

oas2mcp 内置 OpenTelemetry 指标导出,统计每个 tool 的调用次数和耗时:

# Prometheus /metrics 端点
oas2mcp --openapi-file ./openapi.json

# OTLP 导出
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
oas2mcp --openapi-file ./openapi.json

指标标签包含 tool 名称和调用结果(success/error),自动保持低基数避免指标爆炸。

自定义 CA 证书

如果你的上游 API 使用了企业私有 CA 签发的证书,通过 --ca-cert 信任:

oas2mcp --openapi-file ./openapi.json \
  --ca-cert /etc/ssl/corp-ca.pem

竞品对比

工具语言/生态Stars核心差异
oas2mcpRust★11二进制单文件、JWT 角色权限、OTel 指标、周期性热加载、stateless HTTP
openapi-mcp-generatorTypeScript/Node.js★400+Zod 类型验证、npm 一键安装、支持 stdio+HTTP、社区更成熟
mcp-openapi-serverTypeScript★200+npx 零安装运行、支持 prompts 和 resources 扩展
Zuplo MCP Gateway商业 SaaS可视化配置、内置速率限制和缓存、无需自建服务

选择建议:追求零依赖单文件部署 + 企业级权限/指标 → oas2mcp;追求开箱即用 + 社区成熟度 → openapi-mcp-generator;需要托管免运维 → Zuplo。

最佳实践

  • operationId 规范先行:自动转换的质量高度依赖 OpenAPI 文档的 operationId 命名。建议团队约定 {method}_{resource}_{action} 格式(如 get_user_by_id),Agent 更容易理解和调用
  • stdin/stdout 用于本地开发:在 Claude Desktop 的 claude_desktop_config.json 中配置 oas2mcp 的 stdio 模式,无需暴露网络端口
  • streamable-http + JWT 用于生产:配合 API Gateway 使用,每个 Agent 使用自己的 JWT 身份,权限从 token claims 中提取
  • reload-every 而非重启:API 变更频繁时,用 --reload-every 设置自动重载间隔(如 5m),避免服务中断
  • 只导出需要的 operation:如果 OpenAPI 文档包含内部 operation 不希望暴露,用 --oauth-role-mapper 配合正则过滤;或者在文档层做筛选后再传入 oas2mcp
  • 关注 upstream 超时:oas2mcp 代理请求到上游 API,上游响应慢会直接影响 Agent 体验。建议配合可观测性指标监控 P99 耗时
  • 测试先行:在正式接入 AI Agent 前,用 MCP Inspector 或 curl 手动调用几个 tool 验证转换结果是否符合预期

常见问题 FAQ

Q: oas2mcp 支持 OpenAPI 2.0(Swagger)吗?

目前主要面向 OpenAPI 3.x。Swagger 2.0 文档建议先用 swagger-converter 在线转为 3.0 格式再使用。

Q: 如果 OpenAPI 文档里没有 operationId 怎么办?

oas2mcp 会自动回退到 <HTTP_METHOD>_<path> 格式(例如 GET /users/{id}get_users_{id})。但强烈建议在源文档中补充 operationId,生成的方法名更可控。

Q: 支持 WebSocket/Long-polling 等非 REST 模式吗?

不支持。oas2mcp 仅处理标准 HTTP REST API(GET/POST/PUT/PATCH/DELETE),每个 MCP tool 调用对应一次 HTTP 请求-响应。

Q: oas2mcp 的性能如何?适合高并发吗?

Rust 异步运行时(tokio)保证单实例可处理数千并发连接。每个 MCP tool 调用为新 HTTP 请求(无连接池复用),建议配合 HTTP keep-alive 的上游。

Q: 与 Anthropic 官方 MCP Server 推荐列表中的工具有何关系?

截至 2026-07-06,oas2mcp 未出现在 Anthropic 官方 MCP Server 推荐列表中(列表以知名社区项目为主)。oas2mcp 定位为独立开源项目,与官方生态无隶属关系。

📊 评分与标签

评分说明

总分 5.3/10 · H_观察

📊 可观测社区指标(数据核验日期:2026-07-07)

  • GitHub: therealm-tech/oas2mcp ★11, 🔱1, 22 commits
    • 页面访问核验:★11, 🔱1, 22 commits, Apache-2.0 license, 主要语言 Rust(2026-07-07 页面抓取)
  • crates.io: 尚未发布到 crates.io — 页面访问核验返回 “Crate ‘oas2mcp’ not found”
  • Docker Hub: 尚未发布官方镜像(需从源码 docker build
  • HN/Reddit/社区: 暂无显著社区讨论数据。项目处于极早期,仅在 MCP 开发者小圈子中有零星关注
  • 发布历史: 22 commits,无正式 release/tag,无版本号发布。项目活跃度偏低

⚙️ 功能完整度 1.0/2.5

  • 核心功能覆盖全面:从文件或 URL 读取 OpenAPI 文档(JSON/YAML),每个 operation 自动映射为 MCP tool,operationId 作为 tool 名,path/query/header 参数自动转为 MCP tool 顶层参数
  • 三种 MCP 传输协议覆盖:stdio(本地子进程)、streamable-http(远程部署)、SSE(兼容旧版客户端)
  • 企业级特性:JWT/JWKS 角色权限控制、OpenTelemetry 指标、周期性热加载、自定义 CA 证书信任
  • 局限:不支持 OpenAPI 2.0(Swagger),不支持 WebSocket/GraphQL;缺少 $ref 跨文件解析
  • 对比 openapi-mcp-generator(Zod 验证、npm 安装):缺少 type-safe 自动验证层,但 JWT 角色权限和 OTel 指标是企业级差异化优势
  • 对比 Zuplo MCP Gateway:缺少可视化配置和内置速率限制/缓存,但完全免费且可自部署

✨ 输出质量 1.0/2.5

  • Rust 异步运行时(tokio)保证生成的 MCP Server 响应高效:单实例可处理数千并发,冷启动 <100ms,内存占用 <10MB
  • MCP tool 输入 schema 基于 OpenAPI 参数自动生成,本地 $ref 已内联为展开后的 JSON Schema
  • 局限:无公开 benchmark 数据,无社区生产环境案例佐证可靠性;OpenAPI 3.1 全特性支持未经充分测试
    • 来源:无公开测试报告或第三方评测
  • 对比 openapi-mcp-generator:缺少 Zod runtime 验证层——参数类型与实际 API 响应不匹配时,错误直接抛给 Agent
  • 对比 amplication/OpenAPI MCP:功能相近,oas2mcp 的 Rust 性能优势在低规格硬件上更明显

🖐️ 易用性 0.9/1.5

  • 命令行设计清晰:单一二进制 + 环境变量映射,--help 输出完整参数表格
  • 配置灵活:所有参数均可通过环境变量设置,适合容器化部署;Dockerfile 已提供但无预构建镜像
  • 局限:无 npm/pip/brew 等包管理器分发,用户必须安装 Rust 工具链或 Docker;无 GUI;examples 目录仅有基本示例
  • 对比 openapi-mcp-generator(npx openapi-mcp-generator ./openapi.json):Rust 编译多了一步 cargo build --release(首次需 3-5 分钟),对非 Rust 开发者不够友好
  • 对比 mcp-openapi-server(npx @ivotoby/openapi-mcp-server):TypeScript 方案零构建,即装即用

💰 性价比 1.5/1.5

  • Apache-2.0 协议:完全开源,无任何付费 tier,无使用限制,无隐藏成本
  • 自托管:数据完全本地化,不依赖第三方服务,无 API 调用费用
    • Rust 二进制的资源开销极低(内存 <10MB, CPU 可忽略)
  • 对比 Zuplo MCP Gateway(商业产品,按 API 调用量计费):oas2mcp 零成本替代
  • 对比 openapi-mcp-generator(MIT 协议,也免费):两者在价格上均无可挑剔,oas2mcp 的 Rust 运行时资源占用更低

🔒 稳定性 0.3/1.0

  • 项目极早期:仅 ★11, 🔱1, 22 commits,无正式 release 版本,无版本号或 changelog
  • 无公开的生产环境部署案例或用户 testimonial,无社区 stress testing 数据
  • 优雅关闭(SIGTERM/SIGINT)是良好工程实践的体现,但缺少健康检查端点(/healthz)和就绪探针支持
  • 对比 openapi-mcp-generator(★400+, 多次 release):成熟度差距明显
  • 对比 Zuplo(商业公司运营、SLA 保障):稳定性不在同一量级

🛡️ 隐私安全 0.6/1.0

  • Apache-2.0 开源协议,代码可审计;自托管模式数据不出服务器,无第三方数据泄露风险
  • 传输安全:支持自定义 CA 证书(--ca-cert),上游 API 通信使用 reqwest,默认验证 TLS 证书
  • JWT/JWKS 角色权限:streamable-http 模式下可验证调用者 JWT 并基于 role→tool 正则做访问控制
  • 局限:无 SOC2/ISO 27001 等合规认证(对早期项目属正常);无 built-in 速率限制或 DDoS 防护
  • 对比 openapi-mcp-generator:JWT/JWKS 角色权限是明显安全优势
  • 对比 Zuplo:商业产品通常有 SOC2 合规和内置 WAF,安全体系更完善

评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。

🏷️ 标签说明

  • 开源免费: Apache-2.0 协议,完全开源免费,无付费限制。来源:GitHub LICENSE
  • MCP: 核心功能为将 OpenAPI 转换为 MCP Server,支持 stdio/streamable-http/SSE 三种 MCP 传输协议。来源:GitHub README
  • API: 代理任意 OpenAPI 规范的 REST API 为 MCP tool,支持 HTTP header 认证穿透和 JWT 角色权限。来源:GitHub README Auth passthrough

📋 来源与核验记录

  • ✅ 已核验:
    • GitHub therealm-tech/oas2mcp — ★11, 🔱1, 22 commits, Apache-2.0 license, 主要语言 Rust(2026-07-07 抓取)
    • GitHub README — 含完整 Features 列表、Usage 参数表、安装步骤(2026-07-07 滚动验证)
    • GitHub LICENSE — Apache-2.0 协议全文(2026-07-07 确认)
    • GitHub Cargo.toml — edition 2024, tokio/hyper/reqwest 依赖栈(2026-07-07 确认)
    • GitHub examples/ — 示例文件列表可查(2026-07-07 确认)
    • crates.io oas2mcp — “Crate ‘oas2mcp’ not found”,确认未发布到 crates.io
  • ⚠️ 间接来源(第三方信息):
    • openapi-mcp-generator 功能描述(Zod 验证、npm 安装)— 来自 web_search 搜索结果
    • mcp-openapi-server 功能描述 — 来自 web_search 搜索结果
    • Zuplo MCP Gateway 功能描述(商业产品,速率限制,缓存)— 来自 web_search 搜索结果
  • ❌ 无死链

同分类推荐

AI编程 分类下的其他工具

)}