将MCP协议的SSE传输层转换为标准HTTP请求/响应的代理服务器,简化MCP服务器的开发和使用。
MCP(模型上下文协议)是一个开放协议,为AI应用程序提供标准化的数据源和工具集成解决方案。目前,MCP支持两种主要的传输协议:
标准输入输出(Stdio)传输协议:
服务发送事件(SSE)传输协议:
此工具通过以下方法简化MCP服务器的开发和使用:
initialize、tools/list、tools/callgo install github.com/leizongmin/mcp-server-proxy@latest
此工具提供了两个主要命令:
用于检查请求和响应的内容,主要用于研究MCP客户端和服务器之间的交互过程:
mcp-server-proxy inspect <local_url> <target_url>
例如:
mcp-server-proxy inspect http://localhost:8080 http://example.com
启动代理服务器并将MCP客户端调用转换为标准HTTP请求/响应:
mcp-server-proxy serve <local_url> <target_url>
例如:
mcp-server-proxy serve http://localhost:8080 http://example.com
该项目包括一个JavaScript示例(位于example/js-echo目录),该目录实现了简单的回显功能,不依赖于MCP相关的SDK,仅需处理几个简单的HTTP请求:
cd example/js-echo
此示例使用Hono框架实现,核心代码如下:
import { Hono } from "hono";
import { logger } from "hono/logger";
const app = new Hono();
app.use("*", logger());
app.post("/initialize", async (c) => {
const sessionId = c.req.query("sessionId");
const params = await c.req.json();
console.log("initialize: sessionId=%s, params=%j", sessionId, params);
return c.json({
protocolVersion: "2024-11-05",
capabilities: {
tools: {},
},
serverInfo: { name: "example-mcp-server", version: 1.0.0 },
});
});
app.post("/tools/list", async (c) => {
const sessionId = c.req.query("sessionId");
const params = await c.req.json();
console.log("tools/list: sessionId=%s, params=%j", sessionId, params);
return c.json({
tools: [
{
name: "echo",
description: "回显输入内容",
inputSchema: {
type: "object",
properties: {
message: { type: "string", description: "要回显的消息" },
},
required: ["message"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
],
});
});
app.post("/tools/call/:name", async (c) => {
const sessionId = c.req.query("sessionId");
const name = c.req.param("name");
const params = await c.req.json();
console.log(
"tools/call: sessionId=%s, name=%s, params=%j",
sessionId,
name,
params
);
return c.json({
content: [
{ type: "text", text: `SESSION ID: ${sessionId}` },
{ type: "text", text: `ECHO: ${params.arguments?.message}` },
],
});
});
export default app;
npm install
node server.js
# 代理服务器监听 http://localhost:3002
# 代理服务器将请求转发到 http://localhost:3001
mcp-server-proxy serve http://localhost:3002 http://localhost:3001
ssehttp://localhost:3002/sse以光标为例,提交内容echo message "hello"之后,它会识别出需要调用echo。此时会出现“调用工具”按钮,点击一次确认并查看工具调用的结果。

MIT
欢迎提交问题和拉取请求!