此仓库是一个概念验证的MCP服务器,它通过websocket暴露另一个标准I/O MCP服务器。
使用MCP服务器很困难。
MCP服务器的主要传输机制是标准I/O,即在你的MCP客户端程序中,你需要为想要使用的MCP服务器启动一个新的进程。 这有以下缺点:
npx ...或uvx ...,这些工具都伴随着它们的启动延迟(2-3秒的启动时间是正常的)。如果MCP服务器实际上是……服务器呢?也就是说,与它们的通信是通过网络而不是标准I/O进行的。 这样,你可以更轻松地编程使用它们。
此仓库包含一个包装程序,它可以接受现有的MCP服务器(这里列出了官方的一些,但它们现在到处都是)并通过websocket将其暴露出来:
bun run mcp-server-wrapper -p 3001 -- npx -y @modelcontextprotocol/server-puppeteer@latest
为了更快的启动时间,可以安装它并直接使用node调用它:
pnpm install -g @modelcontextprotocol/server-puppeteer@latest
bun run mcp-server-wrapper -p 3001 -- node ~/Library/pnpm/global/5/node_modules/@modelcontextprotocol/server-puppeteer/dist/index.js
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { WebSocketClientTransport } from "@modelcontextprotocol/sdk/client/websocket.js";
const transport = new WebSocketClientTransport(new URL("ws://localhost:3001"));
const client = new Client(
{
name: "example-client",
version: "1.0.0",
},
{
capabilities: {},
}
);
await client.connect(transport);
const tools = await client.listTools();
console.log(
"工具:",
tools.tools.map((t) => t.name)
);
await client.close();
bun run mcp-server-wrapper-client
$ bun run src/mcp-server-wrapper/example-client/example-client.ts
工具: [ "puppeteer_navigate", "puppeteer_screenshot", "puppeteer_click", "puppeteer_fill",
"puppeteer_evaluate"
]
对于给定的MCP服务器配置,例如:
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
我们希望将其构建为一个暴露websocket的Docker镜像,可以在任何地方运行。 此仓库包含一个脚本,该脚本将为给定的MCP服务器配置输出一个Dockerfile: