mcp客户端概述
一个用于Node.js的通用、流友好的MCP(模型上下文协议)客户端。
](https://npmjs.com/package/mcp-client-general)
- 生成一个与MCP兼容的服务器作为子进程
- 通过标准输入/标准输出讲JSON-RPC 2.0
- 忽视脆弱
Content-Lengthheaders,并使用强大的JSON对象扫描程序 - 支持每个进程的多个请求(逐行管道)
- CLI+编程类型脚本API
该软件包旨在成为一个通用的开源MCP客户端。\ 它适用于任何符合MCP的服务器实现,包括\ mcp服务器概述 –生产就绪、插件驱动的MCP服务器:\ https://github.com/daporun/mcp-server-general
______________________________________________________________________
特性
- 零配置文件 –运行内置MCP堆栈,无需手动接线
- 子进程编排 –监视stderr、exit、error
- 握手检测 –第一个有效的JSON对象=握手
- 框架不可知解析 –安全忽略
Content-Length - JSON-RPC 2.0支持 –基于id的挂起映射,超时
- CLI和库 –可从终端或TypeScript使用
______________________________________________________________________
安装
npm install -g mcp-client-general
# or
npm install mcp-client-general --save-dev______________________________________________________________________
CLI使用情况
运行MCP服务器
mcp run "node dist/server.js"发送单个JSON-RPC请求
echo '{"jsonrpc":"2.0","id":1,"method":"providers.list"}' \
| mcp run "node ../mcp-server-general/dist/server.js"输出示例
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"providers": [
{
"provider": "openai",
"model": "gpt-4o-mini"
}
]
}
}______________________________________________________________________
一次运行中有多个请求
printf '%s\n%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"providers.list"}' \
'{"jsonrpc":"2.0","id":2,"method":"steps.list"}' \
| mcp run "node ../mcp-server-general/dist/server.js"输出示例
{
"jsonrpc": "2.0",
"id": 1,
"result": { "providers": [ /* ... */ ] }
}
{
"jsonrpc": "2.0",
"id": 2,
"result": { "steps": [ /* ... */ ] }
}______________________________________________________________________
错误处理(JSON-RPC原生)
echo '{"jsonrpc":"2.0","id":3,"method":"scoring.schema"}' \
| mcp run "node ../mcp-server-general/dist/server.js"{
"jsonrpc": "2.0",
"id": 3,
"error": {
"code": -32601,
"message": "Method not found: scoring.schema"
}
}______________________________________________________________________
程序化使用(TypeScript)
此示例显示了如何以编程方式启动MCP服务器并与之交互。
import { MCPProcess } from "mcp-client-general";
import type { JSONRPCRequest } from "mcp-client-general/jsonrpc";
async function main() {
const proc = new MCPProcess({
command: "node",
args: ["../mcp-server-general/dist/server.js"],
startupTimeoutMs: 4000,
shutdownTimeoutMs: 3000
});
proc.on("stderr", (msg) => process.stderr.write(String(msg)));
await proc.start();
const req: JSONRPCRequest = {
jsonrpc: "2.0",
id: 1,
method: "providers.list",
params: {}
};
const response = await proc.send(req);
console.log(JSON.stringify(response, null, 2));
await proc.close();
}
main().catch((err) => {
console.error(err);
process.exit(1);
});______________________________________________________________________
通用MCP服务器入门
要使用生产就绪的MCP服务器快速尝试此客户端,请参阅:
- mcp服务器概述\
通用插件驱动的MCP服务器\ https://github.com/daporun/mcp-server-general
设计说明
握手检测
从stdout接收到的第一个有效JSON对象被视为握手。\ 如果服务器延迟或首先打印日志,客户端仍然可以安全地继续。
框架策略
许多服务器发出:
Content-Length: 2888\r\n\r\n{ ... JSON ... }但是 Content-Length 经常出错或与原木混合。
此客户端改为:
- 忽略内容长度
- 使用a 流式JSON扫描器:
- 发现 { - 轨迹嵌套 { / } - 处理JSON字符串和转义 - 提取完整的JSON帧
即使在不完美/实验性的MCP服务器上也能工作。
待处理的RPC请求
- 请求存储在
Map - 响应解决Promise
- 超时自动拒绝
______________________________________________________________________
环境变量
启用详细调试:
MCP_DEBUG=1 mcp run "node dist/server.js"显示:
- 握手检测
- 扫描事件
- JSON解析错误
- 子进程退出
- 转发stderr
______________________________________________________________________
局限性
- 服务器必须输出有效的JSON帧
- 第一个JSON对象始终被视为握手
- 握手前打印的类似JSON的日志可能会被误解
______________________________________________________________________
许可证
麻省理工学院——见许可证。
