Skip to main content
Glama

Swagger MCP Server

by zidong0822
README.md9.77 kB
# Swagger 2.0 MCP 服务器 这是一个基于 Model Context Protocol (MCP) 的服务器,可以自动将 Swagger 2.0 API 规范转换为 MCP 工具,让 AI 助手能够直接调用 REST API。 ## 功能特性 - 🔄 **自动转换**: 自动将 Swagger 2.0 规范转换为 MCP 工具 - 📝 **完整参数支持**: 支持路径参数、查询参数、请求头、表单数据和请求体 - 🛡️ **类型验证**: 基于 Swagger 规范进行参数类型验证 - 🌐 **HTTP 方法支持**: 支持 GET、POST、PUT、DELETE 等所有 HTTP 方法 - 📊 **响应处理**: 智能处理 JSON 和文本响应 - 🚨 **错误处理**: 完善的错误处理和状态码报告 ## 安装 ### 方式一:通过 npm 安装(推荐) ```bash # 全局安装 npm install -g swagger-mcp # 或者使用 npx(无需安装) npx swagger-mcp --url https://petstore.swagger.io/v2/swagger.json ``` ### 方式二:从源码安装 1. 克隆项目: ```bash git clone <repository-url> cd swagger-mcp ``` 2. 安装依赖: ```bash npm install ``` 3. 准备你的 `swagger.json` 文件,放在项目根目录下。 ## 使用方法 ### 启动服务器 #### 使用本地 Swagger 文件 ```bash npm start ``` 或者使用启动脚本: ```bash ./start.sh ``` #### 使用远程 Swagger URL ```bash # 直接使用 Node.js node src/index.js --url https://petstore.swagger.io/v2/swagger.json # 或者使用启动脚本 ./start.sh --url https://petstore.swagger.io/v2/swagger.json # 也可以使用 --swagger 参数 ./start.sh --swagger https://api.example.com/docs/swagger.json ``` #### 开发模式(支持热重载) ```bash npm run dev ``` ### URL 参数支持 服务器支持以下方式指定 Swagger 文档: 1. **本地文件**(默认):从项目根目录的 `swagger.json` 文件读取 2. **远程 URL**:通过 `--url` 或 `--swagger` 参数指定远程 Swagger 文档 #### 远程 URL 功能特性 - ✅ **自动验证**: 验证 URL 格式和响应内容 - ✅ **超时控制**: 可配置的请求超时时间(默认 10 秒) - ✅ **缓存支持**: 可选择将远程文档缓存到本地 - ✅ **错误处理**: 详细的错误信息和重试机制 - ✅ **安全控制**: 可在配置中禁用远程 URL 功能 #### 配置选项 在 `config.json` 中可以配置以下选项: ```json { "swagger": { "allowRemoteUrl": true, // 是否允许远程URL "urlTimeout": 10000, // URL请求超时时间(ms) "cacheRemoteSpec": true // 是否缓存远程文档 } } ``` ### Swagger 文件格式 确保你的 `swagger.json` 文件符合 Swagger 2.0 规范。示例结构: ```json { "swagger": "2.0", "info": { "title": "My API", "version": "1.0.0" }, "host": "api.example.com", "basePath": "/v1", "schemes": ["https"], "paths": { "/users": { "get": { "summary": "获取用户列表", "parameters": [ { "name": "limit", "in": "query", "type": "integer", "required": false } ] } } } } ``` ## 工具命名规则 MCP 工具的命名遵循以下规则: - 格式:`{HTTP方法}_{路径}` - 路径中的 `/` 替换为 `_` - 路径参数的 `{}` 被移除 示例: - `GET /users` → `GET_users` - `POST /users/{id}/posts` → `POST_users_id_posts` - `PUT /articles/{articleId}` → `PUT_articles_articleId` ## 参数处理 服务器支持以下类型的参数: ### 路径参数 (Path Parameters) ```json { "name": "id", "in": "path", "required": true, "type": "integer" } ``` ### 查询参数 (Query Parameters) ```json { "name": "limit", "in": "query", "required": false, "type": "integer" } ``` ### 请求头 (Header Parameters) ```json { "name": "Authorization", "in": "header", "required": true, "type": "string" } ``` ### 表单数据 (Form Data) ```json { "name": "file", "in": "formData", "required": true, "type": "file" } ``` ### 请求体 (Body Parameters) ```json { "name": "body", "in": "body", "required": true, "schema": { "type": "object", "properties": { "name": { "type": "string" }, "email": { "type": "string" } } } } ``` ## 响应格式 服务器返回的响应包含: - HTTP 状态码 - 响应数据(JSON 或文本格式) 示例响应: ``` 状态码: 200 响应数据: { "id": 1, "name": "John Doe", "email": "john@example.com" } ``` ## 错误处理 服务器会处理以下类型的错误: - Swagger 文件读取错误 - 无效的工具名称 - API 调用失败 - 网络连接错误 所有错误都会以 MCP 错误格式返回,包含详细的错误信息。 ## 示例 ### 本地示例 项目包含一个示例 `swagger.json` 文件,使用 JSONPlaceholder API 进行演示。你可以直接运行服务器来测试以下功能: - 获取所有文章:`GET_posts` - 根据 ID 获取文章:`GET_posts_id` - 创建新文章:`POST_posts` - 更新文章:`PUT_posts_id` - 删除文章:`DELETE_posts_id` - 获取用户列表:`GET_users` - 根据 ID 获取用户:`GET_users_id` ### 远程 URL 示例 你可以使用以下公开的 Swagger API 进行测试: #### 1. Swagger Petstore API ```bash ./start.sh --url https://petstore.swagger.io/v2/swagger.json ``` #### 2. JSONPlaceholder API ```bash ./start.sh --url https://jsonplaceholder.typicode.com/swagger.json ``` #### 3. 自定义 API ```bash # 使用你自己的 API 文档 ./start.sh --url https://your-api.com/swagger.json # 或者使用不同的端点路径 ./start.sh --swagger https://your-api.com/api-docs ``` ### 在 Cursor 中使用 #### 1. 配置 MCP 服务器 在 Cursor 的 MCP 配置文件中(通常位于 `~/.cursor/mcp.json`)添加以下配置: ```json { "mcpServers": { "swagger-mcp": { "command": "npx", "args": [ "swagger-mcp", "--url", "https://petstore.swagger.io/v2/swagger.json" ] } } } ``` #### 2. 多个 API 配置示例 ```json { "mcpServers": { "petstore-api": { "command": "npx", "args": [ "swagger-mcp", "--url", "https://petstore.swagger.io/v2/swagger.json" ] }, "my-custom-api": { "command": "npx", "args": [ "swagger-mcp", "--swagger", "https://your-api.com/swagger.json" ] }, "local-swagger": { "command": "npx", "args": ["swagger-mcp"] } } } ``` #### 3. 重启 Cursor 配置完成后,重启 Cursor 即可使用 Swagger API 工具。 ### 使用流程示例 1. **配置 MCP 服务器**: 在 Cursor 中配置 MCP 服务器(如上所示) 2. **重启 Cursor**: 重启后 Cursor 会自动连接到 MCP 服务器 3. **使用 API 工具**: 在 Cursor 中直接调用 API,例如: - 询问:"帮我查找状态为 available 的宠物" - 询问:"创建一个新的宠物记录" - 询问:"获取商店库存信息" ## 开发 ### 项目结构 ``` swagger-mcp/ ├── src/ │ └── index.js # 主服务器文件 ├── swagger.json # Swagger API 规范 ├── package.json # 项目配置 └── README.md # 项目文档 ``` ### 自定义配置 你可以通过修改 `swagger.json` 文件来配置不同的 API: 1. 更新 `host` 字段指向你的 API 服务器 2. 修改 `basePath` 设置 API 基础路径 3. 添加或修改 `paths` 定义你的 API 端点 4. 更新 `definitions` 定义数据模型 ## 发布到 npm 如果您想发布自己的版本: 1. **修改包名**: 在 `package.json` 中修改 `name` 字段为您的包名 2. **登录 npm**: ```bash npm login ``` 3. **发布包**: ```bash npm publish ``` 4. **使用发布的包**: ```bash npx your-package-name --url https://your-api.com/swagger.json ``` ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request! ## 故障排除 ### 常见问题 #### 1. 远程 URL 无法访问 ``` ❌ 无法从远程URL获取Swagger文档: HTTP错误: 404 Not Found ``` **解决方案**: - 检查 URL 是否正确 - 确认 API 文档是否公开可访问 - 检查网络连接 #### 2. URL 格式错误 ``` ❌ 无效的URL格式: invalid-url ``` **解决方案**: - 确保 URL 以 `http://` 或 `https://` 开头 - 检查 URL 拼写是否正确 #### 3. 配置不允许远程 URL ``` ❌ 配置不允许使用远程URL ``` **解决方案**: - 在 `config.json` 中设置 `"allowRemoteUrl": true` #### 4. 请求超时 ``` ❌ 远程URL请求超时 (10000ms) ``` **解决方案**: - 检查网络连接 - 在 `config.json` 中增加 `urlTimeout` 值 - 尝试使用其他网络环境 #### 5. Swagger 文档格式错误 ``` ❌ 不是有效的Swagger 2.0文档 ``` **解决方案**: - 确认文档是 Swagger 2.0 格式(不是 OpenAPI 3.0) - 检查 JSON 格式是否正确 - 验证必需字段是否存在 ### 调试技巧 1. **启用详细日志**: 在 `config.json` 中设置 `"enableConsole": true` 2. **检查缓存文件**: 如果启用了缓存,检查生成的 `swagger-cache-*.json` 文件 3. **测试 URL 可访问性**: ```bash curl -H "Accept: application/json" https://your-api.com/swagger.json ``` 4. **验证 Swagger 文档**: 使用在线工具如 [Swagger Editor](https://editor.swagger.io/) 验证文档格式 ## 支持 如果你遇到任何问题,请: 1. 检查上述故障排除指南 2. 确认 `swagger.json` 文件或远程 URL 格式是否正确 3. 确认 API 服务器是否可访问 4. 查看控制台错误信息 5. 提交 Issue 描述问题详情,包括: - 使用的命令 - 错误信息 - Swagger 文档 URL(如果使用远程 URL)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zidong0822/swagger-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server