关于 Api Testing MCP
Api Testing MCP 是面向 API 测试的 MCP 服务,适用于测试本地、公共或第三方 API 的开发者。它整合请求执行、断言、流程、按模式生成模拟数据和负载测试,并将结果以 JSON 保存在本地。
主要功能
- 01支持认证和变量的 HTTP 请求
- 02结构化响应断言
- 03多步骤请求流程
- 04导入 OpenAPI 并生成模拟数据
- 05负载测试与响应对比
- 06可复用的集合和环境
适用场景
- 01检查端点状态、字段和耗时
- 02测试登录及 CRUD 请求序列
- 03根据 OpenAPI 模式生成请求
- 04比较不同环境的 API 响应
MCP 相关
向 MCP 客户端提供 API 测试工具,包括请求、断言、流程、OpenAPI 导入、负载测试和集合管理。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
42收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| method | enum | 是 | HTTP 方法GET | POST | PUT | PATCH | DELETE | HEAD | OPTIONS |
| url | string | 是 | 端点 URL。如果以 / 开头,则会在前面加上当前活动环境的 BASE_URL。支持 {{variables}}。 |
| headers | object | 否 | HTTP 标头,采用键值对形式 |
| body | any | 否 | 请求正文(JSON)。支持 {{variables}} |
| query | object | 否 | 查询参数,采用键值对形式 |
| timeout | number | 否 | 超时时间(毫秒,默认值:30000) |
| auth | object | 否 | 身份验证配置 |
| auth.type | enum | 是 | 身份验证类型bearer | api-key | basic |
| auth.token | string | 否 | Bearer 身份验证令牌 |
| auth.key | string | 否 | API 密钥值 |
| auth.header | string | 否 | API 密钥的请求头名称(默认:X-API-Key) |
| auth.username | string | 否 | Basic auth 的用户名 |
| auth.password | string | 否 | Basic auth 的密码 |
| verbosity | enum | 否 | 控制响应详情,以节省上下文令牌。默认值:'normal'。 - 'minimal':仅返回 status、method、url、elapsed_ms 和正文的前 200 个字符。 适用于:健康检查(/health、/ping)、状态轮询循环、即发即弃的 POST/DELETE 请求、 等待作业完成,或只关心调用是否成功的情况。 节省:相比 full 约 95% 的令牌。 - 'normal'(默认):筛选后的请求头(省略 Date、Server、CF-*、Set-Cookie 等)+ 正文截断至 max_body_bytes,并附带 'body_truncated' 标记。 适用于:大多数调试场景——CRUD 操作、检查错误消息、探索 API 合约。 节省:相比 full 约 75% 的令牌。 - 'full':完整返回未经修改的响应。 适用于:调试 CORS/缓存/身份验证请求头、必须完整检查的大型正文, 或用户要求查看全部内容时。不节省令牌。 如果响应被截断且需要更多内容,优先使用 inspect_last_response({call_id}), 而不是重新运行并使用 'full'。minimal | normal | full |
| only_fields | array | 否 | 当你明确知道需要从正文中获取哪些内容时,这是“full”的轻量替代方案。 仅返回这些点路径。支持数组索引和通配符。 示例:["data.id"]、["user.email", "user.role"]、["items[*].id", "meta.total"]。 通常可在保留所需字段的同时,相比 full 减少 95% 以上的数据量。 |
| max_body_bytes | integer | 否 | verbosity='normal' 时的最大正文大小(字节;默认值:2048)。minimal/full 时忽略。 |
详细介绍
@cocaxcode/api-testing-mcp
最全面的 API 测试 MCP 服务。就是这样。
42 个 MCP 工具 · 零配置 · 适用于任何 MCP 客户端
概览 · 直接对话即可 · 安装 · 功能 · 工具参考 · 存储 · 架构
快速概览
最全面的 API 测试 MCP 服务——42 个工具、零配置,没有其他产品能与之媲美。它不只是一个请求发送器,而是一套完整的测试工作台:支持断言的 HTTP 请求、多步骤流程与变量提取、导入 OpenAPI 并生成感知架构的模拟数据、提供百分位指标的负载测试、跨环境响应差异比较、批量测试运行器、可复用集合、支持目录范围限定和持久化默认值的环境组、Postman 导入/导出,以及 cURL 导出。所有操作都能通过自然对话完成。无需账户、无需云服务、无需生成文件。一切都以内联方式运行,并以纯 JSON 格式存储,由你掌控。
直接对话即可
你无需学习工具名称或参数。描述你的需求,AI 就会选择合适的工具。
"Create a group called my-project and add this directory as scope"
"Set up a dev environment with BASE_URL http://localhost:3000"
"Switch to prod for this session"
"Set dev as the default environment"
"Import my API spec from /api-docs-json"
"Show me all user endpoints"
"GET /users"
"Create a user with random data"
"Verify that DELETE /users/5 returns 204"
"Login as admin, extract the token, then fetch dashboard stats"
"How fast is /health with 50 concurrent requests?"
"Run all my saved smoke tests"
"Compare the users endpoint between dev and prod"
"Export the create-user request as curl"
"Export my collection to Postman"
如果你已导入 OpenAPI 规范,AI 就已了解每个端点、每个必填字段和每个有效枚举值。当你说“创建一篇博客文章”时,它会读取架构并正确构造请求,无需猜测。
安装
Claude Code
claude mcp add --scope user api-testing -- npx -y @cocaxcode/api-testing-mcp@latest
Claude Desktop
将以下内容添加到配置文件(macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json,Windows 上为 %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
Cursor / Windsurf
将以下内容添加到项目根目录下的 .cursor/mcp.json 或 .windsurf/mcp.json:
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
VS Code / Codex CLI / Gemini CLI
VS Code — 添加到 .vscode/mcp.json:
{
"servers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
Codex CLI(OpenAI):
codex mcp add api-testing -- npx -y @cocaxcode/api-testing-mcp@latest
或添加到 ~/.codex/config.toml:
[mcp_servers.api-testing]
command = "npx"
args = ["-y", "@cocaxcode/api-testing-mcp@latest"]
Gemini CLI — 添加到 ~/.gemini/settings.json:
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
快速开始
安装完成后,设置一个环境,以便自动解析相对路径:
"Create an environment called dev with BASE_URL http://localhost:3000"
如果你的 API 有 Swagger/OpenAPI 规范,请将其导入:
"Import my API spec from http://localhost:3000/api-docs-json"
通过以下指令验证:“列出我的环境”——你应该能看到刚刚创建的环境。
功能
HTTP 请求
发送任意 HTTP 方法的请求,并设置标头、查询参数、JSON 请求体、身份验证和 {{variable}} 插值。相对 URL 会自动根据 BASE_URL 解析。
"POST to /api/users with name Jane and email [email protected] using my bearer token"
支持:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS — Bearer / API Key / Basic 身份验证 — 自定义超时时间。
压缩模式(v0.13+)
AI Agent 会为进入其上下文窗口的每个字节付费。现在,默认情况下,request 会返回压缩后的响应,在不损失调试价值的前提下减少 70-95% 的令牌。三个可选参数可控制压缩:
| 参数 | 值 | 作用 |
|---|---|---|
verbosity | 'minimal' / 'normal'(默认)/ 'full' | 控制详细程度 |
only_fields | ['user.id', 'items[*].name'] | 仅返回这些正文路径(点号表示法 + 通配符) |
max_body_bytes | 数字(默认 2048) | 限制 'normal' 模式下的正文大小 |
模式:
minimal— 仅返回status、timing、size_bytes和正文的前 200 个字符。非常适合健康检查、轮询循环或即发即忘调用。可节省约 95% 的令牌。normal(默认) — 过滤后的标头(剔除Date、Server、CF-*、Set-Cookie等)+ 截断至max_body_bytes的正文。适用于约 80% 的调试场景。可节省约 75% 的令牌。full— 完整返回未经处理的响应。需要所有标头或完整正文时使用。
对于 5 KB JSON 响应的典型节省量(≈1,500 个令牌):
| 模式 | 消耗的令牌 | 节省量 |
|---|---|---|
full | ~1,500 | 0%(基准) |
normal | ~300-400 | ~75% |
minimal | ~50-80 | ~95% |
only_fields: ['data.id'] | ~30 | ~98% |
如需查看与
curl、WebFetch及其他原生替代方案的直接对比和实测数据,请参阅下文的原生替代方案。
恢复完整响应: 每个压缩后的响应都包含一个 call_id。如果之后需要完整正文,可调用 inspect_last_response({ call_id })——无需重新执行请求。此功能适用于 request、assert 和 flow_run 的每个步骤。响应会保存在一个含 20 个槽位的环形缓冲区中,并持久化至 .api-testing/last-responses/,有效期为 1 小时。
// Example: normal (default) response
{
"call_id": "k3m9a2xp",
"status": 200,
"statusText": "OK",
"method": "GET",
"url": "https://api.example.com/users/1",
"timing": { "total_ms": 142 },
"size_bytes": 5324,
"headers": { "content-type": "application/json" },
"body": { "id": 1, "email": "...", "...": "..." },
"body_truncated": true,
"hint": "Body truncated to 2048 bytes (full size: 5324B). Call inspect_last_response({ call_id: \"k3m9a2xp\" }) for the full body.",
"tokens_saved_estimate": 820
}
原生替代方案:实际令牌开销
对比此 MCP 与 api-testing 不可用时 Claude Code 可使用的原生选项(Bash + curl、WebFetch 等)。
简而言之: 与原始 curl 相比,request 可根据模式节省 65% 到 97% 的上下文令牌,同时不损失调试信息。以下数据来自对 GET /api/v1/blog 的真实调用,该请求返回了 8 篇文章(约 8.7 KB 的 JSON、19 个响应标头):
| Agent 调用方式 | 使用 MCP? | 消耗的令牌 | 与 curl 相比 |
|---|---|---|---|
Bash + curl(原始标准输出) | ❌ 原生 | ~2,170 | 基准 |
WebFetch(大模型摘要) | ❌ 原生 | ~400-800 | −65%,但不支持认证 / 环境变量 / 检查 |
request verbosity=full | ✅ MCP | ~2,170 | 0%(与 curl 相同,未压缩) |
request verbosity=normal (默认) | ✅ MCP | ~750 | −65% |
request verbosity=minimal | ✅ MCP | ~50 | −97% |
request with only_fields: ["data[*].id","data[*].title"] | ✅ MCP | ~190 | −91% |
此表中的数据与上文“压缩模式”部分略有不同,是因为这些数据来自一个真实响应,而上表展示的是针对合成的 5 KB 响应得出的典型节省量。两者的趋势和数量级相同。
说明:
- 默认模式(
normal)无需任何配置即可节省 65%:它会过滤掉嘈杂的标头(Date、Server、CF-*、Set-Cookie……),并将正文限制为 2048 字节。 only_fields支持包含数组索引和通配符的点号路径(items[*].name)——仅返回你指定的字段。- MCP 还提供了没有直接原生替代方案的功能:
{{variable}}插值、已存储的环境、认证架构、工作流、Postman 导入/导出,以及inspect_last_response,可在不重新请求服务的情况下恢复完整正文。 - 每个已注册的 MCP 在每个会话中都会增加约 300-600 个令牌的固定开销(其指令块 + 工具名称)。典型的收支平衡点:每个会话进行 1-2 次实际调用。
断言
使用结构化的通过/失败结果验证响应:
"Verify that GET /api/health returns 200, body.status is ok, and responds in under 500ms"
PASS — 3/3 assertions passed
status === 200
body.status === "ok"
timing.total_ms < 500
10 个运算符:eq、neq、gt、gte、lt、lte、contains、not_contains、exists、type
请求流
在各步骤之间提取变量,以链式方式发送请求。非常适合身份验证流程和 CRUD 序列。
"Login as [email protected], extract the access token, then use it to fetch all users"
工具的执行内容
flow_run({
steps: [
{
name: "login",
method: "POST",
url: "/auth/login",
body: { email: "[email protected]", password: "SecurePass#99" },
extract: { "TOKEN": "body.access_token" }
},
{
name: "get-users",
method: "GET",
url: "/api/users",
headers: { "Authorization": "Bearer {{TOKEN}}" }
}
]
})
OpenAPI 导入
从 URL 或本地文件(JSON 和 YAML)导入规范。导入后,AI 就能了解每个端点、参数和架构。
"Import my API spec from http://localhost:3000/api-docs-json"
"Import the spec from ./openapi.yaml"
"What parameters does POST /users expect?"
支持 OpenAPI 3.x,并可完整解析 $ref、allOf、oneOf、anyOf。部分支持 OpenAPI 2.0。
模拟数据生成
根据 OpenAPI 架构生成逼真的虚假数据。支持类型、格式(email、uuid、date-time)、枚举和必填字段。
"Generate mock data for creating a user"
{
"email": "[email protected]",
"name": "Test User 73",
"password": "TestPass123!",
"role": "admin"
}
负载测试
发送 N 个并发请求并获取性能指标:
"How fast is the health endpoint with 50 concurrent requests?"
LOAD TEST — GET /api/health
Requests: 50 concurrent
Successful: 50 | Failed: 0
Req/sec: 23.31
Min: 45ms | Avg: 187ms
p50: 156ms | p95: 412ms | p99: 523ms
Max: 567ms
响应差异比较
执行两个请求,并逐字段比较响应。检测回归问题或比较不同环境。
"Compare the users endpoint between dev and prod"
批量测试
运行集合中的所有已保存请求(或按标签筛选),并获取摘要:
"Run all my saved smoke tests"
BULK TEST — 8/8 passed | 1.2s total
health — GET /health → 200 (45ms)
list-users — GET /users → 200 (123ms)
create-post — POST /blog → 201 (89ms)
login — POST /auth/login → 200 (156ms)
集合
保存请求以便重复使用,并为其添加标签。构建回归测试套件。
"Save this request as create-user with tags auth, smoke"
"List all requests tagged smoke"
环境
环境用于保存变量(例如 BASE_URL、令牌和 API 密钥),并按上下文将它们分开。系统包含三个核心概念:
组。 组用于组织环境,并将它们关联到目录。一个组包含 N 个作用域(目录),这些目录共享该组的环境,并且恰好有一个默认环境。在组内创建环境时,该环境会归属于该组。当你 cd 进入组的某个作用域目录时,该组的环境会自动变为可用。
默认环境。 进入组的某个作用域时,默认环境会自动激活。它会在会话之间保留——重启编辑器、重新打开终端后,默认环境仍然可用。设置一次即可,无需再操心。
活动环境。 活动环境是当前用于解析变量的环境。进入作用域时,它默认设为默认环境,但你可以随时切换。活动环境的选择仅在当前会话内有效——重启后会重置为默认环境。
全局环境(未关联任何组)仍然可用。必须使用 env_switch 显式激活,并且不会在会话之间保留。
实际示例:
"Create a group called my-api"
"Add this directory as scope to my-api"
"Create a dev environment with BASE_URL http://localhost:3000" <- auto-joins group, auto-default
"Create a prod environment with BASE_URL https://api.example.com"
"List environments" <- shows dev (active, default) and prod
"Switch to prod" <- session only
"Set prod as default" <- persists
自动插值。 在 URL、标头、查询参数或请求正文中的任何 {{variable}},都会在发送请求前根据活动环境进行解析。只需设置一次 BASE_URL,所有相对路径就都能正常使用。
你的凭据绝不会离开你的计算机。 环境文件以纯 JSON 格式存储在 ~/.api-testing/ 中。不会同步到任何云端,不会嵌入导出内容,也不会纳入 git 跟踪。令牌和机密信息会留在它们应在的位置:你的磁盘上,由你掌控。
Postman 导入与导出
双向支持 Postman。可在 Postman 与你的 AI 工作流之间无缝迁移。
"Import my Postman collection from ./exported.postman_collection.json"
"Export my collection to Postman"
"Export the dev environment for Postman"
导入详情
**集合:**支持 Postman v2.1 格式。文件夹会转换为标签。从文件夹/集合级别继承身份验证。支持 raw JSON、x-www-form-urlencoded 和 form-data 正文。
**环境:**优先使用 currentValue 而非 value。跳过已禁用的变量。可选的 activate 标志。
导出详情
**集合:**按标签将请求分组到文件夹中。身份验证会映射到 Postman 的原生格式。{{variables}} 会原样保留。
**环境:**所有变量均以 Postman 兼容格式导出为 enabled: true。
原生导出与导入
将集合和环境导出到可移植的 .atm/ 文件夹。与团队共享,或在项目之间复制。
"Export my collection and dev environment"
your-project/
└── .atm/
├── collection.json
└── dev.env.json
**注意:**首次导出时,
.atm/会自动添加到.gitignore。
cURL 导出
将任意已保存的请求转换为可直接粘贴的 cURL 命令,并解析变量。
"Export the create-user request as curl"
curl -X POST \
'https://api.example.com/users' \
-H 'Authorization: Bearer eyJhbGci...' \
-H 'Content-Type: application/json' \
-d '{"name":"Jane","email":"[email protected]"}'
工具参考
10 个类别中的 42 个工具:
| 类别 | 工具 | 数量 |
|---|---|---|
| 请求 | request | 1 |
| 检查 | inspect_last_response | 1 |
| 测试 | assert | 1 |
| 流程 | flow_run | 1 |
| 集合 | collection_save、collection_list、collection_get、collection_delete | 4 |
| 环境 | env_create、env_list、env_set、env_get、env_switch、env_rename、env_delete、env_spec、env_project_clear、env_project_list | 10 |
| 组 | env_group_create、env_group_list、env_group_delete、env_group_add_scope、env_group_remove_scope、env_set_default、env_set_group | 7 |
| API 规范 | api_import、api_spec_list、api_endpoints、api_endpoint_detail | 4 |
| 模拟 | mock | 1 |
| 实用工具 | load_test、export_curl、diff_responses、bulk_test、export_collection、import_collection、export_environment、import_environment、export_postman_collection、import_postman_collection、export_postman_environment、import_postman_environment | 12 |
**提示:**你无需直接调用工具。描述你的需求,AI 会选择合适的工具。
存储
所有数据都保存在本地。没有数据库、云同步或遥测功能。所有数据都以纯 JSON 文件的形式存储在 ~/.api-testing/ 中,你可以随时读取、备份或删除。
~/.api-testing/
├── groups/ # Environment groups with scopes and defaults
├── environments/ # Environment variables — tokens, keys, passwords
├── collections/ # Saved requests (shareable, no secrets)
├── specs/ # Imported OpenAPI specs
└── project-envs.json # Session-only active environments (cleared on restart)
全局存储与项目导出。 ~/.api-testing/ 目录是你的私有全局存储,凭据保存在这里,绝不会离开此目录。导出集合或环境时,文件会保存到项目根目录下的 .atm/。首次导出时,该目录会自动添加到 .gitignore;即使你选择将其提交,凭据仍保存在 ~/.api-testing/ 中,不会复制到 .atm/。你可以放心与团队共享 .atm/ 导出文件,不必担心泄露密钥。
覆盖默认存储路径:
{
"env": { "API_TESTING_DIR": "/path/to/custom/.api-testing" }
}
**警告:**如果将
API_TESTING_DIR覆盖为 Git 仓库内的路径,请将.api-testing/添加到.gitignore,以免推送凭据。
架构
src/
├── index.ts # Entry point (shebang + StdioServerTransport)
├── server.ts # createServer() factory
├── tools/ # 42 tool handlers (one file per category)
│ ├── request.ts # HTTP request (1)
│ ├── inspect.ts # inspect_last_response (1)
│ ├── assert.ts # Assertions (1)
│ ├── flow.ts # Request chaining (1)
│ ├── collection.ts # Collection CRUD (4)
│ ├── environment.ts # Environments + groups (17)
│ ├── api-spec.ts # OpenAPI import/browse (4)
│ ├── mock.ts # Mock data generation (1)
│ ├── load-test.ts # Load testing (1)
│ └── utilities.ts # curl, diff, bulk, import/export (11)
├── lib/ # Business logic (no MCP dependency)
│ ├── http-client.ts # fetch wrapper with timing
│ ├── storage.ts # JSON file storage engine (atomic writes)
│ ├── compress.ts # Response compression + verbosity modes
│ ├── response-cache.ts # Ring buffer + disk cache for inspect
│ ├── schemas.ts # Shared Zod schemas (HttpMethodSchema, AuthSchema)
│ ├── url.ts # BASE_URL resolution
│ ├── path.ts # Dot-notation accessor (body.data.0.id)
│ ├── interpolation.ts # {{variable}} resolver
│ └── openapi-parser.ts # $ref + allOf/oneOf/anyOf resolution
└── __tests__/ # 10+ test suites, 171 tests
**技术栈:**TypeScript(严格模式)· MCP SDK · Zod · Vitest · tsup
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。