详细介绍
MCP Proxy 是一个灵活的代理工具,支持在 Server-Sent Events (SSE) 和标准输入输出 (stdio) 两种通信协议之间进行转换。它允许本地客户端与远程服务器之间建立连接,或在本地开发环境中模拟远程服务行为,从而提升模型交互效率和开发调试的便捷性。
核心功能
MCP Proxy 的核心功能在于其协议转换能力,具体包括:
- stdio 到 SSE 模式:将标准输入输出流转换为 SSE 协议,使客户端能够通过 SSE 连接到远程服务器。
- SSE 到 stdio 模式:将 SSE 协议转换为标准输入输出流,便于本地开发和调试。
- 可扩展性:支持通过 Docker 容器扩展功能,如添加自定义工具和依赖。
此外,MCP Proxy 还支持负载均衡、故障转移、环境变量传递等高级功能,适用于多种部署场景。
安装方法
MCP Proxy 可通过多种方式安装,包括使用 pip、GitHub 或 Docker。以下是几种常见的安装方式:
python -m pip install --user mcpy安装完成后,将 `mcpy` 脚本添加到 PATH 环境变量中,以便在终端中直接使用。
您也可以通过 Docker 构建镜像进行部署,以下是 Dockerfile 示例:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["mcp-proxy"]使用方法
MCP Proxy 提供了丰富的命令行选项和配置方式,支持通过命令行参数或环境变量进行配置。
SSE 模式
启动一个本地服务器并运行代理:
mcp-proxy --mode sse --port 8096 uvx mcp-server-fetch > server.log &在另一个终端中启动代理以连接到 SSE 服务器:
mcp-proxy http://localhost:8096/sseStdio 模式
启动一个本地服务器并运行代理:
mcp-proxy --mode stdio --port 8096 uvx mcp-server-fetch > server.log &在另一个终端中启动代理以连接到 Stdio 服务器:
mcp-proxy http://localhost:8096/stdio负载均衡
使用负载均衡模式启动多个代理实例:
mcp-proxy --mode sse --port 8096 --balance round-robin uvx1 mcp-server-fetch
mcp-proxy --mode sse --port 8097 --balance least-connections uvx2 mcp-server-fetch环境变量传递
启用环境变量传递功能:
MCP_PASS_ENVIR mcp-proxy --mode sse --port 8096 uvx mcp-server-fetch使用场景
MCP Proxy 适用于多种场景,包括但不限于:
- 本地开发与调试:通过 stdio 模式模拟远程服务行为,便于本地开发。
- 远程服务连接:通过 SSE 模式连接到远程服务器,实现数据双向流动。
- API 网关实现:结合 Flask 等框架,构建 API 网关,实现请求转发和响应处理。
- 高可用部署:通过负载均衡和故障转移配置,提升服务的可用性和稳定性。
配置说明
MCP Proxy 支持通过命令行参数、环境变量和 JSON 配置文件进行配置。
JSON 配置文件示例
{
"proxy": {
"command": "mcp-proxy",
"args": [
"--mode",
"sse",
"--port",
"8096"
],
"passEnvironment": true
},
"fetch": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
}
}环境变量配置
以下是 MCP Proxy 支持的环境变量及其说明:
- MCP_PROXY_MODE:设置代理模式,可选值为 `sse` 或 `stdio`。
- MCP_PROXY_PORT:设置代理服务器的监听端口。
- MCP_PROXY_HOST:设置代理服务器的绑定地址。
- MCP_PROXY_ARGS:传递给代理命令的额外参数。
- MCP_PASS_ENV:是否传递所有环境变量到子进程。
错误处理
以下是 MCP Proxy 中常见的错误及其解决方法:
无法绑定到指定端口
问题描述:提示信息显示代理服务器无法绑定到指定的端口。
可能原因:
- 端口已被其他进程占用。
- 没有权限绑定到高 privileged 端口(<1024)。
解决方法:
- 检查并释放被占用的端口。
- 使用具有足够权限的用户运行代理。
无法连接到目标服务器
问题描述:提示信息显示代理无法连接到目标服务器。
可能原因:
- 目标服务器未运行。
- 网络连接不可用。
- 配置错误。
解决方法:
- 检查目标服务器是否正常运行。
- 确保网络连接正常。
- 核对配置文件是否正确。
使用示例
以下是 MCP Proxy 的几个典型使用示例:
案例1:stdio 到 SSE 模式
将本地客户端与远程 SSE 服务器连接。
mcp-proxy http://example.io/sse预期结果:成功建立连接,数据双向流动。
案例2:SSE 到 stdio 模式
将远程请求转发到本地服务器。
mcp-proxy --sse-port=8080 uvx mcp-server-fetch预期结果:远程客户端能够访问本地服务器功能。
高级功能
MCP Proxy 提供了多种高级功能,包括:
- 代理链配置:支持嵌套代理链,实现多层代理。
- 高可用性配置:通过负载均衡和故障转移提升服务可用性。
- 环境变量传递:支持通过 `--pass-environment` 参数传递环境变量。
例如,使用负载均衡模式启动多个代理实例:
mcp-proxy --mode sse --port 8096 --balance round-robin uvx1 mcp-server-fetch
mcp-proxy --mode sse --port 8097 --balance least-connections uvx2 mcp-server-fetch使用故障转移模式:
mcp-proxy --mode sse --port 8096 --failover active-passive uvx1 mcp-server-fetch总结
MCP Proxy 是一款功能强大且灵活的代理工具,支持在 SSE 和 stdio 两种协议之间进行转换,适用于本地开发、远程调试和跨协议通信等多种场景。通过丰富的配置选项和高级功能,用户可以轻松实现高可用、可扩展的代理服务。