从 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 时代发挥更大的价值!

相关推荐
LinXunFeng17 分钟前
AI - Gemini CLI 摆脱终端限制
openai·ai编程·gemini
程序员X小鹿1 小时前
腾讯还是太全面了,限时免费!超全CodeBuddy IDE保姆级教程!(附案例)
ai编程
yeshan6 小时前
使用 Claude Code 的自定义 Sub Agent 完善博文写作体验
ai编程·claude·掘金·日新计划
人生都在赌8 小时前
一个AI工作流如何让代码审查从手动到智能?实战拆解
ai编程·devops·cursor
北极的树8 小时前
大模型上下文工程之Prefix Caching技术详解
人工智能·ai编程
软件测试君8 小时前
【Rag实用分享】小白也能看懂的文档解析和分割教程
aigc·openai·ai编程
qiyue778 小时前
AI编程专栏(七)-什么是上下文工程,与提示工程区别
人工智能·ai编程·cursor
wayne2148 小时前
不写一行代码,也能做出 App?一文看懂「Vibe Coding」
人工智能·ai编程
茉莉花99213 小时前
如何编写一个spring ai alibaba工具
ai编程
友莘居士14 小时前
Dify中的Agent和发现和调用mcp工具两个节点调用的异同
agent·react·dify·functioncalling·mcp