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上面的输入示例。
许可证
麻省理工学院
