HAProxy MCP服务器

一个基于Go实现的HAProxy模型上下文协议(MCP)服务器,通过自然语言接口提供HAProxy运行时API管理、服务器状态监控和流量分析功能。

  • by tuannvm
  • Go
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 tuannvm/haproxy-mcp-server

使用说明

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:latest

MCP集成

要将此服务器与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=<your-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=<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

测试单个MCP工具

您可以使用JSON-RPC调用测试特定的MCP工具:

# Test show_info tool
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

# Test show_stat tool
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服务器包括几项旨在提高可靠性和鲁棒性的技术改进:

  • 上下文感知操作:所有API调用都支持基于上下文的超时和取消,允许优雅地终止长时间运行的操作。
  • 回退机制:如果直接连接失败,则自动回退到socat,确保不同HAProxy部署之间的兼容性。
  • 统一套接字处理:TCP和Unix套接字连接的通用代码,减少重复并提高可维护性。
  • 弹性连接管理:动态缓冲区管理,用于大型响应和适当的资源清理,并具有截止日期处理功能。
  • 全面的错误处理:结构化错误处理和日志记录,便于故障排除。

贡献

欢迎投稿!请随时提交拉取请求。

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。