从 OpenAPI 到 AI 助手:我开发了一个让 API 文档"活"起来的工具

背景

最近在做一个内部项目时遇到了一个有趣的问题:如何让 Cursor、Cherry Studio 这样的 AI 编程助手能够直接调用我们的 REST API?

传统的做法是写一堆工具函数,手动处理 HTTP 请求,然后让 AI 调用这些函数。但这种方式有个问题:每次 API 更新,都要手动维护这些工具函数。作为一个"懒惰"的程序员,我想着能不能直接从 OpenAPI 文档自动生成这些工具?

经过几周的研究和开发,mcp-swagger-server 诞生了。

什么是 Model Context Protocol (MCP)?

在介绍我的工具之前,先聊聊 MCP。它是 Anthropic 推出的一个标准协议,用于让 AI 助手与外部工具进行交互。简单来说,就是给 AI 助手提供了一套"插件系统"。

但是配置 MCP 服务器还是挺繁琐的,特别是对于已有 OpenAPI 文档的项目。

解决方案:一行命令搞定

我的思路很简单:既然 OpenAPI 文档已经完整描述了 API 的结构,为什么不直接把它转换成 MCP 格式?

于是有了这个工具:

css 复制代码
npm install -g mcp-swagger-server

# 推荐使用 streamable 协议,性能更好,支持双向流式传输
mcp-swagger-server --transport streamable --port 3322 --openapi http://product.com/openapi.json

就这么简单,API 的所有端点都变成了 AI 助手可以直接调用的工具。

实际体验

让我用 GitHub API 做个演示。对于 Cursor 用户,可以在设置中配置 MCP 服务器:

arduino 复制代码
// 首先需要全局安装脚手架
npm install -g mcp-swagger-server
json 复制代码
{
  "mcp.servers": {
    "github-api": {
      "command": "mcp-swagger-server",
      "args": [
        "--transport", "streamable",
        "--port", "3322",
        "--openapi", "https://api.github.com/openapi.json"
      ]
    }
  }
}

Cherry Studio 用户可以在插件管理中添加:

json 复制代码
{
  "name": "GitHub API",
  "type": "mcp-streamable",
  "endpoint": "http://localhost:3322",
  "config": {
    "openapi": "http://products/openapi.json"
  }
}

配置完成后,你可以直接对 AI 助手说:"帮我看看我的商品列表",它就能自动调用 product项目 API 获取数据。

为什么不用现有方案?

市面上确实有一些类似的工具,但都有各自的问题:

  1. 配置复杂:需要写大量配置文件
  2. 功能单一:只支持特定的传输协议
  3. 缺乏灵活性:不支持文件监控、自动重启等开发友好的功能

我希望做一个真正开箱即用的工具。

核心特性

多种传输协议

根据不同场景选择最合适的协议,强烈推荐使用 streamable 协议

css 复制代码
# Streamable - 双向流式传输(推荐)✨
# 性能最佳,支持实时通信,适合现代 AI 编程工具
mcp-swagger-server --transport streamable --port 3322 --openapi ./api.yaml

# STDIO - AI 客户端集成(如传统工具)
mcp-swagger-server --transport stdio --openapi ./api.yaml

# HTTP - Web 应用集成
mcp-swagger-server --transport http --port 3323 --openapi ./api.yaml

# SSE - 单向流式传输
mcp-swagger-server --transport sse --port 3324 --openapi ./api.yaml

💡 为什么推荐 streamable?

  • 更好的性能:双向流式传输,减少连接开销
  • 实时响应:支持长连接,响应更快
  • 现代化:更适合现代 AI 编程工具的架构
  • 扩展性强:未来功能扩展的最佳基础

开发友好

支持文件监控,OpenAPI 文档一更新,服务器自动重启:

css 复制代码
# 推荐在开发环境使用 streamable + watch
mcp-swagger-server --transport streamable --port 3322 --openapi ./api.yaml --watch

错误恢复

生产环境中的自动重启和错误恢复:

css 复制代码
mcp-swagger-server --transport streamable --openapi ./api.yaml --auto-restart --max-retries 10

技术实现的一些思考

CLI 设计

花了不少时间优化 CLI 的用户体验。使用 chalk 实现了一套视觉设计系统,让终端输出更加专业和友好:

csharp 复制代码
class CliDesign {
  static readonly brand = {
    primary: chalk.hex('#00D4FF'),    // 科技感的青色
    success: chalk.hex('#4ECDC4'),    // 薄荷绿
    warning: chalk.hex('#FFE66D'),    // 金黄色
    // ...
  };
}

OpenAPI 解析

支持多种格式的 OpenAPI 文档:

  • 远程 URL(JSON/YAML)
  • 本地文件(自动识别格式)
  • 动态重载(文件监控)

协议适配

不同的传输协议有不同的特点,需要做相应的适配:

  • STDIO: 适合 AI 客户端,简单直接
  • HTTP: 适合 Web 集成,RESTful 风格
  • SSE: 适合实时应用,单向流式传输
  • Streamable: 适合复杂应用,双向流式传输

使用场景

内部 API 集成

css 复制代码
# 让 AI 助手直接调用内部 API(推荐使用 streamable)
mcp-swagger-server --transport streamable --port 3322 --openapi https://internal-api.company.com/openapi.json

API 开发调试

css 复制代码
# 开发环境,文件变化自动重启
mcp-swagger-server --transport streamable --port 3322 --openapi ./dev-api.yaml --watch

微服务集成

bash 复制代码
# 多个服务同时运行
mcp-swagger-server --transport streamable --port 3001 --openapi https://service-a.com/openapi.json &
mcp-swagger-server --transport streamable --port 3002 --openapi https://service-b.com/openapi.json &

一些有趣的发现

在开发过程中发现了几个有趣的点:

  1. OpenAPI 质量参差不齐:很多公开 API 的 OpenAPI 文档都有问题,需要做容错处理
  2. AI 助手偏好:不同的 AI 助手对工具描述的格式有不同的偏好
  3. 性能考虑:大型 API 文档(如 GitHub API)转换后可能有数百个工具,需要做优化

社区反馈

项目在公司使用后,收到了一些有趣的反馈:

  • 有人用它来测试自己的 API 文档质量
  • 有团队用它来做 API Mock 服务
  • 还有人建议支持 GraphQL(这个想法不错!)

下一步计划

即将推出的功能

  1. HTTPS/TLS 支持 🔒
    • 添加 SSL/TLS 加密支持,确保数据传输安全
    • 支持自定义证书和 Let's Encrypt 自动证书
    • 为企业级应用提供更好的安全保障
  1. 身份认证与授权 🔐
    • 支持 JWT、OAuth 2.0、API Key 等多种认证方式
    • 基于角色的访问控制(RBAC)
    • 与现有身份认证系统集成
  1. 性能优化与缓存
    • 智能缓存机制,减少重复请求
    • 连接池管理,提升高并发性能
    • 支持集群部署和负载均衡

未来规划

  1. GraphQL 支持:正在研究如何将 GraphQL Schema 转换为 MCP 格式
  2. 插件系统:支持自定义转换规则和中间件
  3. Web UI 管理界面:提供可视化的服务器管理和监控(已经实现部分)
  4. 云原生支持:Docker 镜像、Kubernetes 部署、Helm Charts
  5. 监控与可观测性:集成 Prometheus、Grafana,提供完整的监控方案
  6. 多语言 SDK:提供 Python、Go、Java 等语言的客户端库

试用体验

如果你也在用 AI 助手处理 API 相关的工作,不妨试试这个工具:

css 复制代码
npm install -g mcp-swagger-server

# 推荐使用 streamable 协议体验最佳性能
mcp-swagger-server --transport streamable --port 3322 --openapi https://api.github.com/openapi.json

然后在你的 AI 编程工具(如 Cursor 或 Cherry Studio)中配置相应的 MCP 连接,就能看到转换后的 API 工具了。

项目开源地址:GitHub - mcp-swagger-server

欢迎大家试用并提供反馈!如果觉得有用,给个 Star 就是对我最大的鼓励 ⭐

写在最后

开发这个工具的初衷很简单:让已有的 API 文档能够更好地为 AI 时代服务。现在看来,这个方向是对的。

随着 AI 助手越来越普及,我相信会有更多类似的需求。希望这个小工具能为大家节省一些时间,让大家有更多精力去做真正有价值的事情。


如果你在使用过程中遇到任何问题,欢迎在 GitHub Issues 中反馈。让我们一起让 API 文档在 AI 时代发挥更大的价值!

相关推荐
一眼万年0428 分钟前
每天都在使用的VS Code Copilot Chat 开源啦!
aigc·ai编程·visual studio code
饼干哥哥31 分钟前
AI编程搞钱|从0到1,用Cursor开发浏览器插件,上架谷歌商城赚美金
ai编程
源图客4 小时前
MCP Chart Server服务本地部署案例
mcp
鬼鬼鬼9 小时前
从软件1.0到3.0:在这场AI浪潮中,我们如何面对?
aigc·ai编程·cursor
散步去海边9 小时前
Cursor 进阶使用教程
前端·ai编程·cursor
摆烂工程师9 小时前
国内如何安装和使用 Claude Code 教程 - Windows 用户篇
人工智能·ai编程·claude
临界点oc9 天前
SpringAI + DeepSeek大模型应用开发 - 进阶篇(上)
openai·springai·阿里百炼
极客密码9 天前
Cursor再见!简单两步,Augment真无限续杯,爽用Claude 4!
ai编程·cursor·trae
伊泽瑞尔10 天前
打造极致聊天体验:uz-chat——全端AI聊天组件来了!
后端·chatgpt·openai
weixin_4250230010 天前
Spring Boot使用MCP服务器
服务器·spring boot·后端·spring ai·mcp