G

mcp-server-proxy

...
Created 2/15/2025byleizongmin

Language:

Go

Stars:

3

Forks:

0

mcp-server-proxy

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

为什么需要这个工具

MCP(Model Context Protocol)是一个开放协议,为 AI 应用提供了标准化的数据源和工具集成方案。目前 MCP 支持两种主要的传输协议:

  1. Stdio 传输协议:

    • 😫 需要在用户本地安装命令行工具,对运行环境有特定要求
    • 😫 用户需要进行相应的环境配置
  2. SSE(Server-Sent Events)传输协议:

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

本工具通过以下方式简化 MCP Server 的开发和使用:

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

功能特点

  • 支持将 MCP 协议的 SSE 传输层转换为标准 HTTP 请求/响应
  • 提供请求和响应的检查功能,主要用于研究 MCP Client 和 Server 的交互过程
  • 目前已支持 initializetools/listtools/call 三个方法

安装

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

使用方法

该工具提供两个主要命令:

1. inspect 命令

用于检查请求和响应的内容,主要用于研究 MCP Client 和 Server 的交互过程:

mcp-server-proxy inspect  

例如:

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

2. serve 命令

启动代理服务器,将 MCP Client 的调用转换为标准 HTTP 请求/响应:

mcp-server-proxy serve  

例如:

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

示例

项目包含一个 JavaScript 示例(位于 example/js-echo 目录),实现了简单的 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: "Echoes back the input",
        inputSchema: {
          type: "object",
          properties: {
            message: { type: "string", description: "Message to echo" },
          },
          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 Client:
  • Type: sse
  • Server URL: http://localhost:3002/sse
  1. 调用工具:

以 Cursor 为例,提交内容echo message "hello"后,它会识别出来需要调用 echo 工具,此时会出现【Call Tool】按钮,点击次按钮确认后即可看到工具调用结果。

cursor-call-echo-tool

许可证

MIT

贡献

欢迎提交问题和 Pull Request!

Last updated: 3/4/2025

Publisher info

leizongmin's avatar

LEI Zongmin

Software Engineer

leizm.com
Canton, China
2,125
followers
165
following
216
repos

More MCP servers built with Go

mcp-server

learn to make some mcp servers

By yiGmMk1
linear-mcp-go

linear MCP server based on mcp-go

By geropl1
gomcptest

A proof-of-concept demonstrating a custom-built host implementing an OpenAI-compatible API with Google Gemini, function calling, and interaction with a dummy MCP server.

By owulveryck2