MCP代理服务器

一个轻量级的代理服务器,通过多种传输协议暴露底层MCP服务器,使其可被更广泛的客户端访问。

  • by sokunmin
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 sokunmin/mcp-proxy

使用说明

FastMCP代理服务器

构建的轻量级代理服务器 FastMCP 其通过各种传输协议公开一个或多个底层MCP(模型上下文协议)服务器,使其可供更广泛的客户端访问。

项目状态

⚠️ 此项目不再维护。

它构建于2025年中期,是一个基于FastMCP的轻量级代理,旨在减少多个本地AI客户端(如Claude Desktop、VS Code、Cursor)之间的MCP服务器配置重复。MCP生态系统此后发展迅速,此回购仅作为参考/原型保存在这里。

特性

  • 多个传输:暴露MCP服务器 stdio, sse (服务器发送的事件),或 http.
  • 灵活配置:通过编辑来轻松配置要代理的MCP服务器 servers.json 文件。
  • 轻量级:基于高效的FastMCP库构建,并在小型Alpine Linux容器中运行。
  • MCP服务器支持:同时支持Node.js(npx)Python(uvx)基于MCP服务器。

需求

  • Docker和Docker Compose

如何跑步

此项目可以使用Docker Compose或直接使用Docker命令运行:

先决条件

  1. 克隆存储库:
    git clone https://github.com/sokunmin/mcp-proxy.git
    cd mcp-proxy
    

方法一:使用Docker Compose(推荐)

使用预定义配置运行代理的最简单方法:

# Run with default settings (SSE transport, port 8000)
docker-compose up --build

# Run in background
docker-compose up -d --build

# Stop the service
docker-compose down

覆盖环境变量

您可以在不编辑文件的情况下覆盖默认传输:

# Run with HTTP transport
TRANSPORT=http PORT=8001 docker-compose up

# Run with custom port
PORT=9000 docker-compose up

# Run with multiple overrides
TRANSPORT=http PORT=8080 docker-compose up

方法2:使用Docker运行

要对容器配置进行更多控制:

第一步:塑造形象

docker build -t mcp-proxy .

步骤2:运行容器

选项A:直接使用环境变量

# SSE Transport (Default)
docker run -d --name mcp-proxy \
  -p 8000:8000 \
  -e TRANSPORT=sse \
  -e HOST=0.0.0.0 \
  -e PORT=8000 \
  -e TZ=Etc/UTC \
  mcp-proxy

# HTTP Transport
docker run -d --name mcp-proxy-http \
  -p 8001:8001 \
  -e TRANSPORT=http \
  -e HOST=0.0.0.0 \
  -e PORT=8001 \
  -e TZ=Etc/UTC \
  mcp-proxy

选项B:使用具有一致PORT变量的.env文件

# Load environment variables from .env file
source .env

# Run with loaded variables
docker run -d --name mcp-proxy \
  -p ${PORT}:${PORT} \
  -e TRANSPORT=${TRANSPORT} \
  -e HOST=${HOST} \
  -e PORT=${PORT} \
  -e TZ=${TZ} \
  mcp-proxy

# For HTTP transport, override specific variables
TRANSPORT=http PORT=8001 docker run -d --name mcp-proxy-http \
  -p ${PORT}:${PORT} \
  -e TRANSPORT=${TRANSPORT} \
  -e HOST=${HOST} \
  -e PORT=${PORT} \
  -e TZ=${TZ} \
  mcp-proxy

选项C:使用--env文件

# Use .env file directly
docker run -d --name mcp-proxy \
  --env-file .env \
  -p 8000:8000 \
  mcp-proxy

# Override specific variables
docker run -d --name mcp-proxy-http \
  --env-file .env \
  -e TRANSPORT=http \
  -e PORT=8001 \
  -p 8001:8001 \
  mcp-proxy

容器管理

# View logs
docker logs mcp-proxy

# Stop the container
docker stop mcp-proxy

# Remove the container
docker rm mcp-proxy

# View running containers
docker ps

环境变量

可以在中配置以下环境变量 .env 文件或直接传递:

  • TRANSPORT:传输协议(sse, http, stdio)-默认值: sse
  • HOST:要绑定的主机-默认值: 0.0.0.0
  • PORT:服务的端口号-默认值: 8000
  • TZ:时区-默认值: Etc/UTC

快速入门示例

# Default SSE on port 8000
docker-compose up

# HTTP on port 8001
TRANSPORT=http PORT=8001 docker-compose up

# Custom port
PORT=9000 docker-compose up

# Run in background
docker-compose up -d

配置

要配置代理,请编辑 servers.json 文件。您可以添加、删除或修改要公开的MCP服务器。

{
  "mcpServers": {
    "context7": {
      "transport": "stdio",
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    },
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    },
    "time": {
      "transport": "stdio",
      "command": "uvx",
      "args": ["mcp-server-time", "--local-timezone", "Etc/UTC"]
    }
  }
}

这 servers.json 文件作为卷装载,因此更改在容器重新启动时生效。


如何测试

您可以使用任何符合MCP的客户端或类似工具测试正在运行的代理 curl.

测试SSE传输(端口8000)

# Test the SSE endpoint
curl http://localhost:8000/sse/

# Check server health
curl http://localhost:8000/

测试HTTP传输(端口8001)

# Test the HTTP endpoint
curl http://localhost:8001/

# Check server health
curl http://localhost:8001/

使用不同服务进行测试

# Test SSE service
docker-compose up mcp-proxy-sse
curl http://localhost:8000/sse/

# Test HTTP service
docker-compose up mcp-proxy-http
curl http://localhost:8001/

测试MCP服务器

代理目前支持以下MCP服务器:

  • 上下文7:文档搜索和上下文检索(Node.js通过 npx)
  • 获取:Web内容获取(Python通过 uvx)
  • 时间:时间和时区操作(Python通过 uvx)

需要时,代理会自动启动所有服务器。


故障排除

常见问题

  1. 端口冲突:确保端口8000/8001未被其他应用程序使用
  2. 容器构建问题:使用 docker-compose down 和 docker-compose up --build 强制进行彻底的重建
  3. 配置错误:检查 servers.json 语法,并确保所有必填字段都存在

监控

检查服务运行状况:

# View logs
docker-compose logs -f mcp-proxy-sse

# Check container status
docker-compose ps

# Access container shell (if needed)
docker-compose exec mcp-proxy-sse sh