HAProxy MCP服务器
  
在Go中实现的用于HAProxy的模型上下文协议(MCP)服务器,利用HAProxy运行时API和MCP-Go。
概述
HAProxy MCP服务器为LLM通过模型上下文协议(MCP)与HAProxy的运行时API交互提供了一种标准化的方式。这使LLM能够通过自然语言界面执行HAProxy管理任务、监视服务器状态、管理后端服务器和分析流量模式。
特性
- 完整的HAProxy运行时API支持:全面覆盖HAProxy的运行时API命令
- 上下文感知操作:所有操作都支持适当的超时和取消处理
- 统计页面集成:支持HAProxy基于web的统计页面,以增强指标和可视化
- 安全认证:支持与HAProxy运行时API的安全连接
- 多种运输方式:支持stdio和HTTP传输,在不同环境中具有灵活性
- 企业就绪:专为企业环境中的生产使用而设计
- Docker支持:预构建Docker镜像,便于部署
安装
家酿
# Add the tap
brew tap tuannvm/tap
# Install the package
brew install haproxy-mcp-server来自Binary
从以下网址下载适用于您平台的最新二进制文件 发布页面.
使用Go
go install github.com/tuannvm/haproxy-mcp-server/cmd/server@latest使用Docker
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:latestMCP集成
要将此服务器与MCP兼容的LLM一起使用,请使用以下连接详细信息配置助手:
TCP4上的HAProxy运行时API:
{
"mcpServers": {
"haproxy": {
"command": "haproxy-mcp-server",
"env": {
"HAPROXY_HOST": "localhost",
"HAPROXY_PORT": "9999",
"HAPROXY_RUNTIME_MODE": "tcp4",
"HAPROXY_RUNTIME_TIMEOUT": "10",
"MCP_TRANSPORT": "stdio"
}
}
}
}Unix套接字上的HAProxy运行时API:
{
"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"
}
}
}
}支持统计页面的HAProxy:
{
"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配置指南.
可用的MCP工具
HAProxy MCP服务器公开了直接映射到HAProxy的运行时API命令的工具,这些命令分为以下类别:
- 统计和流程信息:检索统计信息、服务器信息和管理计数器
- 拓扑发现:列出前端、后端、服务器状态和配置详细信息
- 动态池管理:添加、删除、启用/禁用服务器并调整其属性
- 会话控制:查看和管理活动会话
- 地图和ACL:管理HAProxy映射和ACL文件
- 健康检查和代理:控制健康检查和基于代理的监测
- 杂项:查看错误、运行回声测试并获取帮助信息
有关所有支持的工具及其输入、输出和相应的HAProxy Runtime 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 | 将URL直接指向运行时API(可选,替代其他运行时设置) | |
| 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 |
| LOGLEVEL | 日志记录级别(调试/信息/警告/错误) | 信息 |
注: 您可以同时使用Runtime API(TCP4或Unix套接字模式)、Stats API或两者。必须至少正确配置一个,服务器才能正常运行。
安全考虑
- 认证:使用安全方法连接到HAProxy的运行时API
- 网络安全:使用TCP4模式时,限制与运行时API端口的连接
- Unix套接字权限:使用Unix套接字模式时,确保正确的套接字文件权限
- 输入验证:所有输入都经过验证,以防止注射攻击
有关全面的安全最佳实践和配置示例,请参阅 HAProxy配置指南.
发展
测试
# Run all tests
go test ./...
# Run tests excluding integration tests
go test -short ./...
# Run integration tests with specific HAProxy instance
export HAPROXY_HOST="your-haproxy-host"
export HAPROXY_PORT="9999"
go test ./internal/haproxy -v -run Test您可以通过多种方式在本地测试HAProxy MCP服务器:
直接CLI测试
直接使用环境变量构建和运行服务器:
# Build the server
go build -o bin/haproxy-mcp-server cmd/server/main.go
# Option 1: Test with TCP connection mode
HAPROXY_HOST= HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 HAPROXY_RUNTIME_TIMEOUT=10 LOG_LEVEL=debug MCP_TRANSPORT=stdio ./bin/haproxy-mcp-server
# Option 2: Test with Unix socket mode
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
# Option 3: Test with Stats page integration
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
# Option 4: Test with both Runtime API and Stats page
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测试单个MCP工具
您可以使用JSON-RPC调用测试特定的MCP工具:
# Test show_info tool
echo '{"jsonrpc":"2.0","id":1,"method":"callTool","params":{"name":"show_info","arguments":{}}}' | HAPROXY_HOST= HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 LOG_LEVEL=debug ./bin/haproxy-mcp-server
# Test show_stat tool
echo '{"jsonrpc":"2.0","id":2,"method":"callTool","params":{"name":"show_stat","arguments":{"filter":""}}}' | HAPROXY_HOST= HAPROXY_PORT=9999 HAPROXY_RUNTIME_MODE=tcp4 LOG_LEVEL=debug ./bin/haproxy-mcp-server技术实现
HAProxy MCP服务器包括几项旨在提高可靠性和鲁棒性的技术改进:
- 上下文感知操作:所有API调用都支持基于上下文的超时和取消,允许优雅地终止长时间运行的操作。
- 回退机制:如果直接连接失败,则自动回退到socat,确保不同HAProxy部署之间的兼容性。
- 统一套接字处理:TCP和Unix套接字连接的通用代码,减少重复并提高可维护性。
- 弹性连接管理:动态缓冲区管理,用于大型响应和适当的资源清理,并具有截止日期处理功能。
- 全面的错误处理:结构化错误处理和日志记录,便于故障排除。
贡献
欢迎投稿!请随时提交拉取请求。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
