基于苗影速选后端系统 API 测试实践经验,我们需要开发一个专门用于 Cursor 环境的 API 接口测试 MCP 服务器,以提升 API 测试的效率和质量。
- 功能: 基于 Swagger/OpenAPI 文档自动执行 API 测试
- 输入: Swagger 文档 URL 或 JSON 文件路径
- 输出: 结构化的测试报告(Markdown 格式)
- 特性:
- 自动解析 API 端点和参数
- 支持认证 Token 管理(JWT、Bearer Token)
- 智能参数填充(基于 Schema 生成测试数据)
- 并发测试执行优化
- 功能: 生成专业的 API 测试报告
- 格式: Markdown 文档,支持中文
- 内容包含:
- 测试概览统计(成功率、响应时间、错误分类)
- 按模块分组的详细测试结果
- 错误分析和修复建议
- 性能指标分析
- 问题优先级分类
- 功能: 基于常见错误模式提供修复建议
- 错误类型识别:
- 参数验证错误(400 Bad Request)
- 认证授权错误(401/403)
- 服务器内部错误(500)
- 业务逻辑错误
- 数据库约束冲突
- 智能建议: 基于错误信息提供具体的修复方案
- 功能: 智能生成和管理测试数据
- 特性:
- 基于 JSON Schema 自动生成测试数据
- 支持数据依赖关系(如先创建用户再创建订单)
- 测试数据清理和重置
- 支持多环境配置(开发、测试、生产)
基于官方 MCP TypeScript SDK 的标准架构:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 创建 MCP 服务器实例
const server = new McpServer({
name: "cursor-api-testing-mcp",
version: "1.0.0"
});
// 核心工具集设计(符合 MCP 单一职责原则)
const tools = {
// 1. 解析 Swagger 文档
parse_swagger_doc: {
parameters: {
swagger_url: z.string().url(),
base_url: z.string().url().optional()
}
},
// 2. 测试单个 API 端点
test_single_endpoint: {
parameters: {
endpoint: z.string(),
method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']),
auth_token: z.string().optional(),
test_data: z.any().optional(),
timeout: z.number().default(5000)
}
},
// 3. 批量测试模块
batch_test_module: {
parameters: {
module_name: z.string(),
endpoints: z.array(z.string()),
concurrent_limit: z.number().default(5),
auth_token: z.string().optional()
}
},
// 4. 智能错误分析
analyze_error_pattern: {
parameters: {
error_message: z.string(),
status_code: z.number(),
endpoint: z.string(),
context: z.any().optional()
}
},
// 5. 生成测试数据
generate_test_data: {
parameters: {
json_schema: z.any(),
data_type: z.enum(['create', 'update', 'query']),
dependencies: z.array(z.string()).optional()
}
},
// 6. 生成测试报告
generate_markdown_report: {
parameters: {
test_results: z.array(z.any()),
template: z.enum(['detailed', 'summary', 'chinese']).default('chinese'),
output_path: z.string().optional()
}
},
// 7. 管理测试环境
configure_test_environment: {
parameters: {
environment: z.enum(['development', 'testing', 'production']),
config: z.object({
base_url: z.string().url(),
timeout: z.number().default(10000),
concurrent_limit: z.number().default(5),
auth_config: z.any().optional()
})
}
},
// 8. 清理测试数据
cleanup_test_data: {
parameters: {
cleanup_type: z.enum(['all', 'failed_tests', 'temp_data']),
confirm: z.boolean().default(false)
}
}
};
// 资源定义(用于数据访问)
const resources = {
test_reports: "report://latest", // 最新测试报告
test_progress: "progress://current", // 当前测试进度
environment_config: "config://env", // 环境配置
error_patterns: "patterns://errors", // 错误模式库
test_templates: "templates://tests" // 测试模板
};基于 MCP SDK 标准和我们的实际测试经验:
// MCP 工具响应格式(符合 MCP 规范)
interface MCPToolResponse {
content: Array<{
type: "text" | "resource_link";
text?: string;
uri?: string;
name?: string;
mimeType?: string;
}>;
isError?: boolean;
}
// 测试结果数据结构(内部使用)
interface APITestResult {
endpoint: string;
method: string;
status: 'success' | 'failed' | 'timeout';
statusCode: number;
responseTime: number;
errorMessage?: string;
errorCategory?: 'validation' | 'auth' | 'server' | 'business' | 'network';
suggestions?: string[];
timestamp: string;
}
// 错误分析结果
interface ErrorAnalysisResult {
pattern: string;
category: string;
severity: 'low' | 'medium' | 'high' | 'critical';
description: string;
fixSuggestions: string[];
affectedEndpoints: string[];
documentationLinks?: string[];
}
// 测试进度信息
interface TestProgress {
currentModule: string;
completedTests: number;
totalTests: number;
failedTests: number;
elapsedTime: number;
estimatedRemaining: number;
currentEndpoint?: string;
}基于实际的 MCP 工具调用格式:
// 1. 解析 Swagger 文档并开始测试
await client.callTool({
name: "parse_swagger_doc",
arguments: {
swagger_url: "http://localhost:3000/docs-json",
base_url: "http://localhost:3000"
}
});
// 2. 测试单个端点
await client.callTool({
name: "test_single_endpoint",
arguments: {
endpoint: "/api/v1/orders/{id}",
method: "GET",
auth_token: "Bearer eyJhbGciOiJIUzI1NiIs...",
timeout: 5000
}
});
// 3. 批量测试模块
await client.callTool({
name: "batch_test_module",
arguments: {
module_name: "订单管理模块",
endpoints: ["/orders", "/orders/{id}", "/orders/statistics"],
concurrent_limit: 3,
auth_token: "Bearer eyJhbGciOiJIUzI1NiIs..."
}
});
// 4. 智能错误分析
await client.callTool({
name: "analyze_error_pattern",
arguments: {
error_message: "Store ID is required for class Order extends base_entity_1.StoreBaseEntity",
status_code: 500,
endpoint: "/api/v1/orders/{id}",
context: { userType: "super_admin", operation: "findOne" }
}
});
// 5. 生成测试报告
await client.callTool({
name: "generate_markdown_report",
arguments: {
test_results: testResultsArray,
template: "chinese",
output_path: "./API测试报告-苗影速选后端系统.md"
}
});- 自动发现: 解析 Swagger 文档,识别所有 API 端点
- 智能排序: 根据依赖关系排序测试执行顺序
- 数据准备: 自动生成或使用预设测试数据
- 并发执行: 合理控制并发数,避免服务器过载
- 实时反馈: 显示测试进度和实时结果
- 报告生成: 自动生成详细的测试报告
- 网络错误: 自动重试机制
- 认证失效: 自动刷新 Token
- 服务器过载: 动态调整并发数
- 数据冲突: 智能数据清理和重置
// 开发者提交代码后,自动执行 API 测试
const result = await mcp_api-testing_execute_full_test({
swagger_url: "http://localhost:3000/docs-json",
auth_token: await getAuthToken(),
test_modules: ["认证授权", "用户管理", "订单管理"],
generate_report: true
});
if (result.summary.successRate < 0.8) {
console.log("⚠️ API 测试失败率过高,请检查以下问题:");
result.recommendations.forEach(rec => console.log(`- ${rec.message}`));
}// 在 CI/CD 流水线中集成 API 测试
const testResult = await mcp_api-testing_execute_ci_test({
environment: "test",
coverage_threshold: 0.9,
performance_threshold: 500, // ms
fail_on_error: true
});
// 生成测试报告并上传到测试管理平台
await mcp_api-testing_upload_report({
result: testResult,
platform: "jenkins",
build_number: process.env.BUILD_NUMBER
});// 定期执行 API 健康检查
const healthCheck = await mcp_api-testing_health_check({
endpoints: ["GET /health", "GET /api/v1/status"],
interval: "5m",
alert_threshold: 0.95
});
// 性能回归测试
const regressionTest = await mcp_api-testing_regression_test({
baseline_report: "./baseline-report.json",
current_results: testResults,
performance_tolerance: 0.1 // 10% 性能下降容忍度
});{
"environments": {
"development": {
"base_url": "http://localhost:3000",
"timeout": 5000,
"concurrent_limit": 5
},
"testing": {
"base_url": "https://test-api.example.com",
"timeout": 10000,
"concurrent_limit": 10
},
"production": {
"base_url": "https://api.example.com",
"timeout": 15000,
"concurrent_limit": 3
}
}
}# 测试报告模板
report_template:
language: "zh"
sections:
- summary
- module_results
- error_analysis
- performance_metrics
- recommendations
format: "markdown"
include_charts: trueconst errorRules = {
"Store ID is required": {
category: "business_logic",
severity: "high",
suggestion: "检查 StoreBaseEntity 继承问题,确保超级管理员权限正确处理",
fix_examples: [
"在 Repository 层添加超级管理员权限检查",
"修改 API 定义明确要求 storeId 参数"
]
},
"Cannot read properties of undefined": {
category: "parameter_validation",
severity: "medium",
suggestion: "添加请求体参数验证,确保必需参数存在",
fix_examples: [
"使用 class-validator 装饰器验证参数",
"添加 DTO 参数验证"
]
}
};- ✅ 基础 API 测试执行 - 支持 GET/POST/PUT/DELETE 请求
- ✅ Swagger 文档解析 - 自动识别 API 端点和参数
- ✅ 基础测试报告生成 - Markdown 格式输出
- ✅ JWT Token 认证支持 - 自动管理认证状态
- 🔄 智能错误分析 - 基于常见错误模式提供修复建议
- 🔄 测试数据自动生成 - 基于 JSON Schema 生成测试数据
- 🔄 并发测试优化 - 提升测试执行效率
- 🔄 多环境配置支持 - 支持开发/测试/生产环境
- ⏳ 性能监控和分析 - API 性能回归测试
- ⏳ CI/CD 集成 - 与主流 CI/CD 平台集成
- ⏳ 可视化报告 - 生成图表和可视化测试报告
- ⏳ API 契约测试 - 支持 API 版本兼容性测试
基于官方 MCP TypeScript SDK 的标准实现:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 创建 MCP 服务器
const server = new McpServer({
name: "cursor-api-testing-mcp",
version: "1.0.0"
});
// 注册核心测试工具
server.registerTool(
"parse_swagger_doc",
{
title: "解析 Swagger 文档",
description: "解析 Swagger/OpenAPI 文档并提取 API 端点信息",
inputSchema: {
swagger_url: z.string().url().describe("Swagger 文档的 URL"),
base_url: z.string().url().optional().describe("API 基础 URL")
}
},
async ({ swagger_url, base_url }) => {
try {
const response = await fetch(swagger_url);
const swaggerDoc = await response.json();
const endpoints = extractEndpoints(swaggerDoc, base_url);
return {
content: [{
type: "text",
text: `成功解析 Swagger 文档,发现 ${endpoints.length} 个 API 端点`
}, {
type: "resource_link",
uri: "swagger://parsed",
name: "解析结果",
mimeType: "application/json"
}]
};
} catch (error) {
return {
content: [{
type: "text",
text: `解析失败: ${error.message}`
}],
isError: true
};
}
}
);
server.registerTool(
"test_single_endpoint",
{
title: "测试单个 API 端点",
description: "对指定的 API 端点执行测试",
inputSchema: {
endpoint: z.string().describe("API 端点路径"),
method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).describe("HTTP 方法"),
auth_token: z.string().optional().describe("认证 Token"),
test_data: z.any().optional().describe("测试数据"),
timeout: z.number().default(5000).describe("超时时间(毫秒)")
}
},
async ({ endpoint, method, auth_token, test_data, timeout }) => {
const startTime = Date.now();
try {
const result = await executeAPITest({
endpoint,
method,
auth_token,
test_data,
timeout
});
const responseTime = Date.now() - startTime;
return {
content: [{
type: "text",
text: `✅ ${method} ${endpoint} 测试成功\n状态码: ${result.statusCode}\n响应时间: ${responseTime}ms`
}]
};
} catch (error) {
const responseTime = Date.now() - startTime;
return {
content: [{
type: "text",
text: `❌ ${method} ${endpoint} 测试失败\n错误: ${error.message}\n响应时间: ${responseTime}ms`
}],
isError: true
};
}
}
);
// 注册测试报告资源
server.registerResource(
"test_report",
"report://latest",
{
title: "最新测试报告",
description: "最近一次 API 测试的详细报告",
mimeType: "text/markdown"
},
async (uri) => {
const report = await generateLatestReport();
return {
contents: [{
uri: uri.href,
text: report,
mimeType: "text/markdown"
}]
};
}
);
// 启动服务器
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Cursor API Testing MCP Server started");
}
main().catch(console.error);为了在 Cursor 中使用这个 MCP 服务器,需要在 ~/.cursor/mcp.json 中添加配置:
{
"servers": {
"cursor-api-testing": {
"command": "node",
"args": ["path/to/cursor-api-testing-mcp/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}cursor-api-testing-mcp/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts # 主入口文件
│ ├── server.ts # MCP 服务器实现
│ ├── tools/ # 工具实现
│ │ ├── swagger-parser.ts # Swagger 解析器
│ │ ├── api-tester.ts # API 测试执行器
│ │ ├── report-generator.ts # 报告生成器
│ │ └── error-analyzer.ts # 错误分析器
│ ├── resources/ # 资源管理
│ │ ├── test-reports.ts # 测试报告资源
│ │ └── configurations.ts # 配置资源
│ ├── types/ # 类型定义
│ │ └── index.ts
│ └── utils/ # 工具函数
│ ├── http-client.ts # HTTP 客户端
│ └── data-generator.ts # 测试数据生成器
├── dist/ # 编译输出
└── README.md
# 创建项目
npm init -y
npm install @modelcontextprotocol/sdk zod axios
# 开发依赖
npm install -D typescript @types/node tsx
# 构建脚本 (package.json)
{
"scripts": {
"build": "tsc",
"dev": "tsx src/index.ts",
"start": "node dist/index.js"
}
}
# TypeScript 配置 (tsconfig.json)
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "node",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}根据我们测试 89 个 API 的经验,内置常见错误模式:
// 错误分析规则库
const ERROR_PATTERNS = {
"Store ID is required": {
category: "business_logic",
severity: "high",
description: "StoreBaseEntity 继承问题导致的系统性错误",
suggestions: [
"检查 Repository 层是否正确处理超级管理员权限",
"修改 API 定义明确要求 storeId 参数",
"在 BaseRepository 中添加权限检查逻辑"
],
affectedPattern: /Store ID is required for class \w+ extends base_entity_1\.StoreBaseEntity/,
documentationLinks: [
"https://typeorm.io/repository-api",
"https://docs.nestjs.com/techniques/database#repository-pattern"
]
},
"Cannot read properties of undefined": {
category: "validation",
severity: "medium",
description: "请求体参数验证缺失",
suggestions: [
"添加 DTO 参数验证装饰器",
"使用 class-validator 进行参数检查",
"在控制器方法中添加参数存在性检查"
],
affectedPattern: /Cannot read properties of undefined \(reading '(\w+)'\)/,
documentationLinks: [
"https://docs.nestjs.com/techniques/validation",
"https://github.com/typestack/class-validator"
]
},
"duplicate key value violates unique constraint": {
category: "business_logic",
severity: "medium",
description: "数据库唯一约束冲突",
suggestions: [
"在创建前检查记录是否已存在",
"返回 400 Bad Request 而非 500 Internal Server Error",
"提供更友好的错误消息"
],
affectedPattern: /duplicate key value violates unique constraint "(\w+)"/
},
"Validation failed": {
category: "validation",
severity: "low",
description: "参数类型或格式验证失败",
suggestions: [
"检查 Swagger UI 默认参数值",
"更新 DTO 验证规则",
"处理空字符串和类型转换"
],
affectedPattern: /Validation failed \((.+)\)/
}
};
// 智能错误分析工具实现
server.registerTool(
"analyze_error_pattern",
{
title: "智能错误分析",
description: "基于常见错误模式分析并提供修复建议",
inputSchema: {
error_message: z.string().describe("错误信息"),
status_code: z.number().describe("HTTP 状态码"),
endpoint: z.string().describe("出错的 API 端点"),
context: z.any().optional().describe("额外上下文信息")
}
},
async ({ error_message, status_code, endpoint, context }) => {
// 匹配错误模式
const matchedPattern = findMatchingPattern(error_message, ERROR_PATTERNS);
if (matchedPattern) {
const analysis = {
pattern: matchedPattern.name,
category: matchedPattern.category,
severity: matchedPattern.severity,
description: matchedPattern.description,
suggestions: matchedPattern.suggestions,
endpoint: endpoint,
statusCode: status_code
};
return {
content: [{
type: "text",
text: `🔍 **错误分析结果**
**错误模式**: ${analysis.pattern}
**分类**: ${analysis.category}
**严重程度**: ${analysis.severity}
**影响端点**: ${analysis.endpoint}
**问题描述**:
${analysis.description}
**修复建议**:
${analysis.suggestions.map((s, i) => `${i + 1}. ${s}`).join('\n')}
**相关文档**:
${matchedPattern.documentationLinks?.map(link => `- ${link}`).join('\n') || '无'}`
}]
};
} else {
return {
content: [{
type: "text",
text: `⚠️ 未识别的错误模式: ${error_message}\n\n建议手动分析或添加到错误模式库中。`
}]
};
}
}
);- ✅ 支持 90% 以上的常见 API 测试场景
- ✅ 自动生成专业的测试报告
- ✅ 提供准确的错误分析和修复建议
- ✅ 支持多种认证方式(JWT、OAuth、API Key)
- ⚡ 单个 API 测试响应时间 < 2s
- ⚡ 100 个 API 并发测试完成时间 < 30s
- ⚡ 测试报告生成时间 < 5s
- ⚡ 内存占用 < 100MB
- 📚 完整的使用文档和示例
- 🎨 友好的错误提示和修复建议
- 🔧 简单的配置和扩展机制
- 🚀 与 Cursor 环境无缝集成
这个 API 测试 MCP 服务器将极大提升 Cursor 环境下的 API 测试效率,基于我们在苗影速选项目中的实际测试经验,提供智能化的测试执行、错误分析和报告生成功能。
核心价值:
- 🚀 效率提升 - 自动化测试执行,节省 80% 手动测试时间
- 🎯 质量保证 - 智能错误分析,快速定位和修复问题
- 📊 可视化报告 - 专业的测试报告,便于团队协作
- 🔧 易于扩展 - 模块化设计,支持自定义测试规则
适用场景:
- 日常开发测试验证
- CI/CD 流水线集成
- API 质量监控
- 性能回归测试
- 团队协作和知识分享