这是一个用 Go 实现的 HAProxy Model Context Protocol (MCP) 服务器,利用了 HAProxy 运行时 API 和 mcp-go。
HAProxy MCP 服务器提供了一种标准化的方式,使大型语言模型(LLMs)能够通过 Model Context Protocol (MCP) 与 HAProxy 的运行时 API 进行交互。这使得 LLMs 能够执行 HAProxy 管理任务,监控服务器状态,管理后端服务器,并分析流量模式,所有这些都可以通过自然语言界面完成。
# 添加 tap
brew tap tuannvm/tap
# 安装包
brew install haproxy-mcp-server
从 发布页面 下载适用于您平台的最新二进制文件。
go install github.com/tuannvm/haproxy-mcp-server/cmd/server@latest
docker pull ghcr.io/tuannvm/haproxy-mcp-server:latest
docker run -it --rm \
-e HAPROXY_HOST=your-haproxy-host \
-e HAPROXY_PORT=9999 \
ghcr.io/tuannvm/haproxy-mcp-server:latest
要将此服务器与兼容 MCP 的 LLMs 结合使用,请使用以下连接详情配置助手:
{
"mcpServers": {
"haproxy": {
"command": "haproxy-mcp-server",
"env": {
"HAPROXY_HOST": "localhost",
"HAPROXY_PORT": "9999",
"HAPROXY_RUNTIME_MODE": "tcp4",
"HAPROXY_RUNTIME_TIMEOUT": "10",
"MCP_TRANSPORT": "stdio"
}
}
}
}
{
"mcpServers": {
"haproxy": {
"command": "haproxy-mcp-server",
"env": {
"HAPROXY_RUNTIME_MODE": "unix",
"HAPROXY_RUNTIME_SOCKET": "/var/run/haproxy/admin.sock",
"HAPROXY_RUNTIME_TIMEOUT": "10",
"MCP_TRANSPORT": "stdio"
}
}
}
}
{
"mcpServers": {
"haproxy": {
"command": "haproxy-mcp-server",
"env": {
"HAPROXY_STATS_ENABLED": "true",
"HAPROXY_STATS_URL": "http://localhost:8404/stats",
"HAPROXY_STATS_TIMEOUT": "5",
"MCP_TRANSPORT": "stdio"
}
}
}
}
仅使用统计页面功能时,无需定义运行时 API 参数如主机和端口。您可以同时使用运行时 API 和统计页面以获得互补能力,或者根据您的环境限制选择其中一个。
注意:有关如何配置 HAProxy 以暴露运行时 API 和统计页面的详细说明,请参阅 HAProxy 配置指南。
HAProxy MCP 服务器提供了直接映射到 HAProxy 运行时 API 命令的工具,这些工具被组织成以下类别:
有关所有支持工具及其输入、输出和对应的 HAProxy 运行时 API 命令的完整列表,请参阅 tools.md 文档。
服务器可以通过以下环境变量进行配置:
| 变量 | 描述 | 默认值 |
|---|---|---|
| HAPROXY_HOST | HAProxy 实例的主机(仅限 TCP4 模式) | 127.0.0.1 |
| HAPROXY_PORT | HAProxy 运行时 API 的端口(仅限 TCP4 模式) | 9999 |
| HAPROXY_RUNTIME_MODE | 连接模式:"tcp4" 或 "unix" | tcp4 |
| HAPROXY_RUNTIME_SOCKET | 套接字路径(仅限 Unix 模式) | /var/run/haproxy/admin.sock |
| HAPROXY_RUNTIME_URL | 运行时 API 的直接 URL(可选,覆盖其他运行时设置) | |
| HAPROXY_RUNTIME_TIMEOUT | 运行时 API 操作的超时时间(秒) | 10 |
| HAPROXY_STATS_ENABLED | 启用 HAProxy 统计页面支持 | true |
| HAPROXY_STATS_URL | HAProxy 统计页面的 URL(例如,http://localhost:8404/stats) | http://127.0.0.1:8404/stats |
| HAPROXY_STATS_TIMEOUT | 统计页面操作的超时时间(秒) | 5 |
| MCP_TRANSPORT | MCP 传输方法(stdio/http) | stdio |
| MCP_PORT | HTTP 传输的端口(当使用 http 时) | 8080 |
| LOG_LEVEL | 日志级别(debug/info/warn/error) | info |
注意:您可以使用运行时 API(TCP4 或 Unix 套接字模式)、统计 API 或两者同时使用。至少需要正确配置一个以使服务器正常工作。
有关全面的安全最佳实践和配置示例,请参阅 HAProxy 配置指南。
# 运行所有测试
go test ./...
# 运行排除集成测试的测试
go test -short ./...
# 使用特定 HAProxy 实例运行集成测试
export HAPROXY_HOST="your-haproxy-host"
export HAPROXY_PORT="9999"
go test ./internal/haproxy -v -run Test
您可以在本地以几种方式测试 HAProxy MCP 服务器:
使用环境变量直接构建并运行服务器:
# 构建服务器
go build -o bin/haproxy-mcp-server cmd/server/main.go
# 方案 1:使用 TCP 连接模式测试
HAPROXY_HOST=<your-haproxy-host> HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 HAPROXY_RUNTIME_TIMEOUT=10 LOG_LEVEL=debug MCP_TRANSPORT=stdio ./bin/haproxy-mcp-server
# 方案 2:使用 Unix 套接字模式测试
HAPROXY_RUNTIME_MODE=unix HAPROXY_RUNTIME_SOCKET=/path/to/haproxy.sock HAPROXY_RUNTIME_TIMEOUT=10 LOG_LEVEL=debug MCP_TRANSPORT=stdio ./bin/haproxy-mcp-server
# 方案 3:使用统计页面集成测试
HAPROXY_STATS_ENABLED=true HAPROXY_STATS_URL="http://localhost:8404/stats" HAPROXY_STATS_TIMEOUT=5 LOG_LEVEL=debug MCP_TRANSPORT=stdio ./bin/haproxy-mcp-server
# 方案 4:使用运行时 API 和统计页面同时测试
HAPROXY_HOST=<your-haproxy-host> HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 HAPROXY_RUNTIME_TIMEOUT=10 HAPROXY_STATS_ENABLED=true HAPROXY_STATS_URL="http://localhost:8404/stats" HAPROXY_STATS_TIMEOUT=5 LOG_LEVEL=debug MCP_TRANSPORT=stdio ./bin/haproxy-mcp-server
您可以使用 JSON-RPC 调用来测试特定的 MCP 工具:
# 测试 show_info 工具
echo '{"jsonrpc":"2.0","id":1,"method":"callTool","params":{"name":"show_info","arguments":{}}}' | HAPROXY_HOST=<your-haproxy-host> HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 LOG_LEVEL=debug ./bin/haproxy-mcp-server
# 测试 show_stat 工具
echo '{"jsonrpc":"2.0","id":2,"method":"callTool","params":{"name":"show_stat","arguments":{"filter":""}}}' | HAPROXY_HOST=<your-haproxy-host> HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 LOG_LEVEL=debug ./bin/haproxy-mcp-server
HAProxy MCP 服务器包括了几项旨在提高可靠性和健壮性的技术改进:
欢迎贡献!请随时提交 Pull Request。
本项目采用 MIT 许可证 - 详情见 LICENSE 文件。