返回市场
MCP服务器代理

MCP服务器代理

作者:leizongmin21 星标更新:2025-02-17

项目介绍

mcp-server-proxy

将MCP协议的SSE传输层转换为标准HTTP请求/响应的代理服务器,简化MCP服务器的开发和使用。

我们为什么需要这个工具

MCP(模型上下文协议)是一个开放协议,为AI应用程序提供标准化的数据源和工具集成解决方案。目前,MCP支持两种主要的传输协议:

  1. 标准输入输出(Stdio)传输协议:

    • 😫 用户需要在本地安装命令行工具,并且对运行环境有特定的要求
    • 😫 用户需要配置相应的环境
  2. 服务发送事件(SSE)传输协议:

    • 👍 基于HTTP长连接实现,用户配置相对简单,主要是设置服务地址
    • 😫 目前相关的开发工具和示例较少

此工具通过以下方法简化MCP服务器的开发和使用:

  1. 使用SSE传输协议与MCP客户端交互,用户只需配置服务地址即可使用
  2. 将MCP工具调用转换为标准HTTP请求/响应,开发者可以使用任何编程语言实现,无需担心SSE协议细节

特性

  • 支持将MCP协议的SSE传输层转换为标准HTTP请求/响应
  • 提供请求和响应检查功能,主要用于研究MCP客户端和服务器之间的交互过程
  • 当前支持的方法有:initializetools/listtools/call

安装

go install github.com/leizongmin/mcp-server-proxy@latest

使用说明

此工具提供了两个主要命令:

1. 检查命令

用于检查请求和响应的内容,主要用于研究MCP客户端和服务器之间的交互过程:

mcp-server-proxy inspect <local_url> <target_url>

例如:

mcp-server-proxy inspect http://localhost:8080 http://example.com

2. 服务命令

启动代理服务器并将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请求:

  1. 进入示例目录:
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;
  1. 安装依赖:
npm install
  1. 启动服务器:
node server.js
  1. 启动代理服务器:
# 代理服务器监听 http://localhost:3002
# 代理服务器将请求转发到 http://localhost:3001
mcp-server-proxy serve http://localhost:3002 http://localhost:3001
  1. 配置MCP客户端:
  • 类型:sse
  • 服务器URL:http://localhost:3002/sse
  1. 调用工具:

以光标为例,提交内容echo message "hello"之后,它会识别出需要调用echo。此时会出现“调用工具”按钮,点击一次确认并查看工具调用的结果。

光标调用回显工具

许可证

MIT

贡献

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