转到MCP SSE代理
⚠️ 存档项目 由于持续存在的稳定性和可靠性问题,该项目已被存档,不再进行维护,因此不适合生产使用。代理在负载下表现出不可预测的行为,导致资源耗尽和服务中断,无法得到充分解决。 我建议使用我的 TypeScript MCP SSE代理 作为该项目的替代方案。
一种高性能的服务器发送事件(SSE)代理服务器,专为Go内置的模型上下文协议(MCP)而设计。该代理实现了MCP客户端和服务器之间的高效实时通信,同时提供速率限制、安全功能和流程管理。
特性
- 🚀 用于MCP通信的高性能SSE代理
- 🔒 内置安全头和身份验证中间件
- ⚡ 具有可配置阈值的速率限制
- 🔄 处理MCP服务器实例的流程管理
- 📝 可配置的日志记录级别
- 🛡️ 优雅的停机处理
- 🐳 Docker支持多阶段构建
- 🚀 Fly.io部署配置
先决条件
- 达到1.24.2或更高
- Docker(用于容器化部署)
- Node.js和npm(用于超级网关依赖)
安装
地方发展
- 克隆存储库:
git clone https://github.com/danpiths/go-mcp-sse-proxy.git
cd go-mcp-sse-proxy- 安装依赖项:
go mod download- 构建项目:
go build -o out ./cmd/proxyDocker部署
构建Docker镜像:
docker build -t go-mcp-sse-proxy .运行容器:
docker run -p 8000:8000 go-mcp-sse-proxy配置
环境变量
LOG_LEVEL:设置日志记录级别(调试、信息、警告、错误)MAXIM_SECRET:身份验证所需的密钥- 可以配置其他环境变量进行身份验证和速率限制
速率限制
默认速率限制设置为:
- 每分钟100个请求
- 突发限制为10个请求
您可以在中修改这些值 cmd/proxy/main.go:
rateLimiter := ratelimit.NewRateLimiter(rate.Limit(100.0/60.0), 10)流程管理
流程管理器使用中的可配置设置处理MCP服务器实例 internal/config/config.go.
命令执行安全
为了防止远程代码执行,代理实现了严格的命令白名单:
- 只有预先批准的命令
internal/config/config.go可以执行 - 环境变量受黑名单保护,以防止覆盖敏感数据
- 每个命令都必须在
AllowedCommands地图
添加新命令
要添加对新命令的支持,请执行以下操作:
- 打开
internal/config/config.go - 将您的命令添加到
AllowedCommands地图:
var AllowedCommands = map[string]string{
"your-command-string": "your-command-string",
// ... existing commands ...
}注意:命令字符串必须精确,键和值应相同。
API终点
此代理实现了标准的MCP SSE协议,并进行了额外的授权标头检查以确保安全性。这 /health 端点可用于监视服务状态。
连接到MCP服务器
部署代理服务器后,如何连接到代理服务器:
- 设置环境变量(如果需要):
- 使用添加任何必需的环境变量 ENV_ 请求标头中的前缀 - 示例:对于GitHub MCP服务器,设置 ENV_GITHUB_PERSONAL_ACCESS_TOKEN 头球
- 进行SSE连接:
- URL格式: https:////sse - 所需标题:
Authorization: Bearer 示例:Context7 MCP服务器
使用官方的MCP TypeScript SDK:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
const client = new Client({
name: "example-client",
version: "1.0.0",
});
const transport = new SSEClientTransport(new URL("https:///npx%20-y%20%40upstash%2Fcontext7-mcp%40latest/sse"), {
requestInit: {
headers: {
Authorization: `Bearer ${process.env.MAXIM_SECRET}`,
},
},
eventSourceInit: {
fetch: (url, init) => {
return fetch(url, {
...init,
headers: init?.headers
? {
...(init?.headers ?? {}),
...{
Authorization: `Bearer ${process.env.MAXIM_SECRET}`,
},
}
: {
Authorization: `Bearer ${process.env.MAXIM_SECRET}`,
},
});
},
},
});
await client.connect(transport);注意:Context7 MCP服务器不需要任何额外的环境变量。
部署
Fly.io部署
该项目包括Fly.io配置。要部署,请执行以下操作:
- 仅限首次设置:
fly launch # Important: Select 'Y' when asked to copy the configuration (fly.toml) to the new app- 对于所有部署:
./deploy.sh发展
项目结构
.
├── cmd/
│ └── proxy/ # Main application entry point
├── internal/
│ ├── config/ # Configuration management
│ ├── handlers/ # HTTP handlers and middleware
│ ├── process/ # Process management
│ └── ratelimit/ # Rate limiting implementation
├── pkg/
│ └── logger/ # Logging utilities
├── Dockerfile # Multi-stage Docker build
├── fly.toml # Fly.io deployment configuration
└── go.mod # Go module definition贡献
- 分叉存储库
- 创建功能分支
- 提交您的更改
- 推到分支
- 创建新的Pull请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
