Skip to main content
Glama
tuskermanshu

Swagger MCP Server

by tuskermanshu
README.md
# Swagger MCP 服务器

[![smithery badge](https://smithery.ai/badge/@tuskermanshu/swagger-mcp-server)](https://smithery.ai/server/@tuskermanshu/swagger-mcp-server)

一个基于Model Context Protocol (MCP)的服务器,用于解析Swagger/OpenAPI文档并生成TypeScript类型和API客户端代码。

## 功能特点

- 解析Swagger/OpenAPI文档,支持v2和v3规范
- 生成TypeScript类型定义
- 生成不同框架的API客户端代码(Axios、Fetch、React Query等)
- 通过MCP协议提供这些功能,便于与大型语言模型集成
- **优化的大型文档处理**:
  - 内存和文件系统缓存机制
  - 懒加载解析策略
  - 增量解析与部分结果返回
  - 进度反馈
  - 自动识别不同格式的Swagger UI URLs

## 快速开始

### 安装依赖

```bash
npm install
# 或者使用pnpm
pnpm install
```

### 启动服务器

```bash
node start-server.js
```

服务器默认使用标准输入/输出通信。

### 使用MCP工具

可以通过标准输入/输出与MCP服务器通信。以下是一些示例:

```bash
# 解析Swagger文档
node examples/optimized-swagger-parser-example.js

# 生成TypeScript类型
node examples/typescript-generator-example.js

# 生成API客户端
node examples/api-client-generator-example.js
```

## 可用工具

### 1. Swagger/OpenAPI解析工具

#### 标准解析工具 (parse-swagger)

```json
{
  "method": "parse-swagger",
  "params": {
    "url": "https://petstore3.swagger.io/api/v3/openapi.json",
    "includeSchemas": true,
    "includeDetails": true
  }
}
```

#### 优化解析工具 (parse-swagger-optimized)

适用于完整解析,带有高级选项:

```json
{
  "method": "parse-swagger-optimized",
  "params": {
    "url": "https://petstore3.swagger.io/api/v3/openapi.json",
    "includeSchemas": true,
    "includeDetails": true,
    "useCache": true,
    "skipValidation": true,
    "cacheTTLMinutes": 60,
    "lazyLoading": false,
    "filterTag": "pet"
  }
}
```

#### 轻量级解析工具 (parse-swagger-lite)

为大型文档优化,快速但只返回基本信息:

```json
{
  "method": "parse-swagger-lite",
  "params": {
    "url": "https://petstore3.swagger.io/api/v3/openapi.json",
    "includeSchemas": false,
    "includeDetails": false,
    "useCache": true,
    "skipValidation": true
  }
}
```

### 2. TypeScript类型生成工具

#### 标准类型生成器 (generate-typescript-types)

```json
{
  "method": "generate-typescript-types",
  "params": {
    "swaggerUrl": "https://petstore3.swagger.io/api/v3/openapi.json",
    "outputDir": "./generated/types",
    "namespace": "PetStore",
    "strictTypes": true,
    "generateEnums": true,
    "generateIndex": true
  }
}
```

#### 优化类型生成器 (generate-typescript-types-optimized)

```json
{
  "method": "generate-typescript-types-optimized",
  "params": {
    "swaggerUrl": "https://petstore3.swagger.io/api/v3/openapi.json",
    "outputDir": "./generated/types",
    "namespace": "PetStore",
    "strictTypes": true,
    "useCache": true,
    "skipValidation": true,
    "lazyLoading": true,
    "includeSchemas": ["Pet", "Order", "User"]
  }
}
```

### 3. API客户端生成工具

#### 标准API客户端生成器 (generate-api-client)

```json
{
  "method": "generate-api-client",
  "params": {
    "swaggerUrl": "https://petstore3.swagger.io/api/v3/openapi.json",
    "outputDir": "./generated/api",
    "clientType": "axios",
    "generateTypeImports": true,
    "typesImportPath": "../types",
    "groupBy": "tag"
  }
}
```

#### 优化API客户端生成器 (generate-api-client-optimized)

```json
{
  "method": "generate-api-client-optimized",
  "params": {
    "swaggerUrl": "https://petstore3.swagger.io/api/v3/openapi.json",
    "outputDir": "./generated/api",
    "clientType": "react-query",
    "generateTypeImports": true,
    "typesImportPath": "../types",
    "groupBy": "tag",
    "useCache": true,
    "skipValidation": true,
    "lazyLoading": true,
    "includeTags": ["pet", "store"]
  }
}
```

### 4. 文件写入工具

```json
{
  "method": "file-writer",
  "params": {
    "filePath": "./output.txt",
    "content": "Hello, world!",
    "createDirs": true
  }
}
```

## 处理大型API文档

对于大型API文档,推荐使用以下配置:

1. 使用优化版工具,启用缓存和懒加载
2. 使用标签或路径前缀过滤,只获取需要的API操作
3. 仅在必要时包含模式定义
4. 设置合理的缓存有效期,避免频繁重新解析

示例:

```json
{
  "method": "parse-swagger-lite",
  "params": {
    "url": "https://your-large-api-doc-url.json",
    "useCache": true,
    "skipValidation": true,
    "lazyLoading": true,
    "filterTag": "your-specific-tag",
    "includeSchemas": false
  }
}
```

## 支持的客户端框架

目前支持以下API客户端框架:

- **Axios**: 功能全面的Promise基HTTP客户端
- **Fetch**: 浏览器原生API,无需额外依赖
- **React Query**: 用于React应用的数据获取和缓存库,提供hooks和缓存功能

示例 - 生成React Query客户端:

```json
{
  "method": "generate-api-client-optimized",
  "params": {
    "swaggerUrl": "https://petstore3.swagger.io/api/v3/openapi.json",
    "outputDir": "./generated/react-query",
    "clientType": "react-query",
    "generateTypeImports": true
  }
}
```

## 缓存管理

API文档缓存存储在 `.api-cache` 目录中。如果需要清除缓存:

1. 删除 `.api-cache` 目录
2. 或者设置 `useCache: false` 参数

## 配置选项

可在 `swagger-mcp-config.json` 中自定义服务器设置:

```json
{
  "name": "Swagger MCP Server",
  "version": "1.0.0",
  "transport": "stdio"
}
```

## 开发与调试

启动调试服务器:

```bash
node start-server.js
```

然后使用MCP Inspector连接:

```bash
npx @modelcontextprotocol/inspector pipe -- node start-server.js
```

或者直接方式(但可能导致输出混乱):

```bash
npx @modelcontextprotocol/inspector -- node start-server.js
```

## 项目路线图

参见 [road.md](road.md) 文件了解开发计划和进度。

## 安装

### 通过Smithery安装

要通过[Smithery](https://smithery.ai/server/@tuskermanshu/swagger-mcp-server)为Claude Desktop自动安装swagger-mcp-server:

```bash
npx -y @smithery/cli install @tuskermanshu/swagger-mcp-server --client claude
```

## 构建

```bash
# 构建项目
npm run build

# 或使用pnpm
pnpm build
```

## 可用的MCP工具

1. `parse-swagger` - 解析Swagger/OpenAPI文档,返回API操作信息
2. `parse-swagger-optimized` - 解析Swagger/OpenAPI文档(优化版)
3. `parse-swagger-lite` - 轻量级解析Swagger/OpenAPI文档,专为大型文档优化
4. `generate-typescript-types` - 从Swagger/OpenAPI文档生成TypeScript类型定义
5. `generate-typescript-types-optimized` - 从Swagger/OpenAPI文档生成TypeScript类型定义(优化版)
6. `generate-api-client` - 从Swagger/OpenAPI文档生成API客户端代码
7. `generate-api-client-optimized` - 从Swagger/OpenAPI文档生成API客户端代码(优化版)
8. `file-writer` - 将内容写入文件系统 

TDQS

B3/5.0

Scored across 12 tools

Disambiguation2/5

Multiple tools have overlapping purposes that could cause confusion. For example, generate-api-client, generate-api-client-optimized, parse-swagger, parse-swagger-lite, and parse-swagger-optimized all appear to serve similar functions with minor variations in performance or features, making it difficult for an agent to choose the right one without detailed context. The template tools are clearer but the core parsing/generation tools have significant ambiguity.

Naming Consistency3/5

The naming shows mixed conventions. Most tools use snake_case (e.g., file_writer, parse-swagger), but some use kebab-case (e.g., generate-api-client) or a mix (e.g., parse-swagger-lite). The template tools follow a consistent verb_noun pattern (template-delete, template-get, etc.), but overall the server lacks a uniform naming style, reducing predictability.

Tool Count4/5

With 12 tools, the count is reasonable for a Swagger/OpenAPI server that handles parsing, code generation, and template management. It's slightly high due to redundant optimized/lite versions, but still within a manageable scope for the domain, avoiding the extremes of being too thin or overwhelming.

Completeness4/5

The tool set covers key areas for Swagger/OpenAPI processing: parsing documents, generating client code and TypeScript types, and managing templates. Minor gaps exist, such as no direct tool for validating Swagger documents or handling server-side code generation, but core workflows are well-supported, allowing agents to perform essential tasks without major dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues