使用说明
api mcp服务器
一个小型的模型上下文协议(MCP)服务器,通过stdio公开一组集中的HTTP/API测试工具。此仓库以TypeScript实现服务器,旨在嵌入支持MCP的编辑器和客户端中。
这个项目提供了什么
- MCP服务器二进制包装器:
wrapper.cjs/wrapper.js(stdio传输)。 - 从导出的一组类型化的API测试工具
src/tools/index.ts(见“可用工具”)。 - 轻量级
ApiClient公用事业(src/api-client/index.ts)支持JSON请求、多部分上传、重试、超时和并发请求。 - 基于TypeScript的代码,带有构建+类型检查脚本。
快速启动
前提条件:Node.js 18+(推荐),pnpm(或npm/yarn)。
- 安装依赖项
pnpm install
- 类型检查
npx tsc --noEmit
- 构建
pnpm build
- 运行MCP服务器(stdio传输)
node ./wrapper.cjs
在开发过程中,您可以直接使用以下命令运行TypeScript tsx:
npx tsx src/index.ts
可用工具(摘要)
所有工具定义见 src/tools/index.ts简短描述和示例输入:
-
http_request--通用HTTP请求程序。- 输入(JSON):{“方法”:“POST”,“url”:https://example.com/api“,”headers“:{”Content-Type“:”application/json“},”body“:{“x”:1},”timeout“:5000}
-
get--方便获取包装。- 输入:{“url”:“https://example.com/data“,”headers“:{”Accept“:”application/json“}}
-
post,put,delete--用于POST/PUT/DELETE的便利包装。- 输入
post:{“url”:“https://...“,”body“:{…},”headers“:}
- 输入
-
upload_multipart--使用multipart/form数据上传文件。支持本地文件路径或base64编码内容。- 输入示例: { “url”:“https://api.example.com/upload", “文件”:[ {“fieldName”:“file”,“filePath”:“./tests/fixtures/image.png”,“filename”:“image.png“} ], “字段”:{“用户ID”:“123”} }
- 注意:在Node<18上,服务器将尝试动态导入
form-data包裹;节点18+全局FormData可用。该项目包括form-data在……里面optionalDependencies--如果需要Node回退,请安装它。
-
validate_json_schema--使用AJV根据JSON模式验证JSON。- 输入:{“数据”:{…},“架构”:{..}
- 注意:AJV是一个可选的运行时依赖项。如果未安装AJV,该工具将抛出一个错误,指示如何添加它。
-
concurrent_requests--跑很多http_request与可配置的工作者计数同时调用。- 输入示例: {“请求”:〔{“方法”:“GET”,“url”:https://...“},{“方法”:“POST”,“url”:“…”,“opts”:{“body”:{}}],“并发性”:5}
-
assert_status--断言响应状态与预期值匹配。- 输入:{“响应”:{“状态”:200,…},“预期”:[200201]}
看 src/tools/index.ts 用于返回给MCP客户端的完整JSON模式定义。
从MCP客户端使用服务器
服务器公开了一个基于stdio的传输。启动包装器的编辑器MCP客户端的示例任务配置:
Windows示例(调整路径):
{
"servers": {
"api-mcp": {
"command": "node",
"args": ["C:\\path\\to\\api-mcp-server\\wrapper.cjs"]
}
}
}
macOS/Linux示例:
{
"servers": {
"api-mcp": {
"command": "node",
"args": ["/path/to/api-mcp-server/wrapper.cjs"]
}
}
}
通过以下方式控制暴露的工具 MCP_TOOLS 环境变量。已接受的示例:
- 未设置或
*--暴露所有工具 - JSON数组字符串:
MCP_TOOLS='["get","post"]' - 逗号分隔字符串:
MCP_TOOLS='get,post'
您可以在客户端启动配置中设置env,也可以在启动包装器之前将其导出到shell中。
实现注意事项
-
入口点:
src/index.ts--启动MCP服务器。src/server/optimized-server.ts--MCP服务器布线和stdio传输。src/server/get-allowed-tools.ts--解析MCP_TOOLS以及过滤工具。src/server/execute-tool-method.ts--将工具调用路由到中的实现src/tools.
-
HTTP帮助程序:
src/api-client/index.ts实现了一个小型、无依赖性的HTTP助手程序,该程序使用fetch,支持超时、指数回退重试、JSON正文处理、多部分上传和并发工作者。 -
多部分上传:代码使用
globalThis.FormData如果可用(节点18+),则回退到动态导入form-data必要时。form-data作为可选依赖项包含在内;如果您的环境需要,请显式安装它:
pnpm add form-data
- JSON模式验证:验证工具动态导入AJV。如果要进行服务器端架构检查,请安装它:
pnpm add ajv
开发技巧和故障排除
- 如果
tsc报告缺少节点类型,确保@types/node作为开发依赖项安装(此项目包括它)。 - 如果您以前遇到过以下问题
@types/form-data(TS2688),该包是一个已弃用的存根——此仓库依赖于真实的form-data运行时包。删除存根并使用运行时包可以解决类型查找问题。 - 要在本地调试单个工具,请运行服务器并从MCP客户端调用该工具,或者编写一个通过stdio调用MCP的小型Node脚本。
例子
- 通过简单GET
http_request:
向工具请求有效载荷:
{ "method": "GET", "url": "https://jsonplaceholder.typicode.com/todos/1" }
返回的典型成功响应形状 ApiClient 包装材料:
{
"status": 200,
"ok": true,
"headers": { "content-type": "application/json; charset=utf-8" },
"body": { ...parsed json... },
"rawBody": "...",
"timeMs": 123
}
- 多部分上传(本地文件):请参阅
upload_multipart上面的输入示例。
许可证
麻省理工学院
