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
- 确保每个 API operation 有明确的
安装
方式一: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 提供了两层认证控制:
- 静态 Header 附加——所有上游 API 请求统一携带固定 header:
oas2mcp --openapi-file ./openapi.json \
--header "Authorization: Bearer $(cat /run/secrets/api-token)"
- 动态 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 | 核心差异 |
|---|---|---|---|
| oas2mcp | Rust | ★11 | 二进制单文件、JWT 角色权限、OTel 指标、周期性热加载、stateless HTTP |
| openapi-mcp-generator | TypeScript/Node.js | ★400+ | Zod 类型验证、npm 一键安装、支持 stdio+HTTP、社区更成熟 |
| mcp-openapi-server | TypeScript | ★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 顶层参数
- 来源:GitHub README Features 章节 — 页面访问核验
- 三种 MCP 传输协议覆盖:stdio(本地子进程)、streamable-http(远程部署)、SSE(兼容旧版客户端)
- 企业级特性:JWT/JWKS 角色权限控制、OpenTelemetry 指标、周期性热加载、自定义 CA 证书信任
- 来源:GitHub README 完整 Option 表格 — 页面核验 滚动验证
- 局限:不支持 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
- 来源:GitHub Cargo.toml tokio + hyper + reqwest 依赖栈
- 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 目录仅有基本示例
- 来源:GitHub 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,无使用限制,无隐藏成本
- 来源:GitHub LICENSE 文件 — 页面访问核验 Apache-2.0
- 自托管:数据完全本地化,不依赖第三方服务,无 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
- 来源:GitHub 仓库首页 — 页面访问核验
- 无公开的生产环境部署案例或用户 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编程 分类下的其他工具