该项目提供了一个基于 Model Context Protocol (MCP) 的服务器端实现,专门用于与 HAProxy 负载均衡器进行交互。它允许 MCP 客户端(例如集成了 MCP 的大型语言模型应用)通过标准化的 JSON-RPC 接口来调用 HAProxy 的管理和监控功能。

项目简介

该服务器作为 LLM 客户端和 HAProxy 之间的桥梁,将 LLM 的自然语言指令转化为 HAProxy 可识别的命令,并将 HAProxy 的响应数据结构化后返回给 LLM,从而实现通过聊天界面管理和查看 HAProxy 状态的能力。

主要功能点

  • HAProxy 管理: 支持启用/禁用后端服务器、调整服务器权重和最大连接数等动态配置变更。
  • 状态与统计查询: 获取 HAProxy 整体运行时信息、详细统计数据(如连接数、流量、错误率等)、后端列表、服务器列表及其详细状态。
  • 健康检查控制: 启用或禁用服务器的健康检查和 Agent 检查。
  • 配置重载: 触发 HAProxy 配置的运行时重载。
  • 多种连接方式: 支持通过 TCP 或 Unix Socket 连接到 HAProxy 的 Runtime API,以及通过 HTTP 获取 Stats 页面数据。
  • 多种传输协议: 支持使用 Stdio 或 HTTP (SSE) 协议与 MCP 客户端通信。

安装步骤

您可以选择以下方法安装此服务器:

  • 使用 Homebrew (macOS/Linux): 首先添加 Tap:'brew tap tuannvm/tap' 然后安装:'brew install haproxy-mcp-server'
  • 下载预编译二进制文件: 访问项目的 Releases 页面,下载适用于您操作系统的最新版本二进制文件。
  • 使用 Go 命令安装: 确保您已安装 Go 环境,然后执行:'go install github.com/tuannvm/haproxy-mcp-server/cmd/server@latest'
  • 使用 Docker: 拉取镜像:'docker pull ghcr.io/tuannvm/haproxy-mcp-server:latest' 运行容器(示例,需根据您的HAProxy配置调整环境变量):
    docker run -it --rm \
      -e HAPROXY_HOST=your-haproxy-host \
      -e HAPROXY_PORT=9999 \
      ghcr.io/tuannvm/haproxy-mcp-server:latest

服务器配置(用于MCP客户端)

MCP 客户端通常通过启动外部进程的方式连接到 MCP 服务器。您需要在 MCP 客户端的配置文件中指定如何启动 'haproxy-mcp-server' 程序,并通过环境变量传递 HAProxy 的连接信息。

典型的 MCP 客户端配置(通常是 JSON 格式)会包含如下结构:

{
  "mcpServers": {
    "your_server_name": {  // 您为该服务器定义的名称,例如 "haproxy"
      "command": "haproxy-mcp-server", // 服务器可执行文件的名称或路径
      "args": [],                    // 如果需要传递启动参数
      "env": {                       // 传递给服务器进程的环境变量
        "HAPROXY_HOST": "localhost",       // HAProxy Runtime API 的主机名 (TCP模式)
        "HAPROXY_PORT": "9999",            // HAProxy Runtime API 的端口 (TCP模式)
        "HAPROXY_RUNTIME_MODE": "tcp4",    // 连接模式: "tcp4" 或 "unix"
        "HAPROXY_RUNTIME_SOCKET": "/var/run/haproxy/admin.sock", // HAProxy Unix Socket 路径 (Unix模式)
        "HAPROXY_RUNTIME_TIMEOUT": "10",   // Runtime API 操作超时时间 (秒)
        "HAPROXY_STATS_ENABLED": "true",   // 是否启用 Stats API
        "HAPROXY_STATS_URL": "http://localhost:8404/stats", // HAProxy Stats 页面 URL
        "HAPROXY_STATS_TIMEOUT": "5",      // Stats API 操作超时时间 (秒)
        "MCP_TRANSPORT": "stdio",          // MCP 传输协议: "stdio" 或 "http"
        "MCP_PORT": "8080",                // HTTP 传输时监听的端口
        "LOG_LEVEL": "info"                // 日志级别: debug, info, warn, error
      }
    }
    // 可以配置其他 MCP 服务器
  }
}

请根据您的实际 HAProxy 配置和偏好的 MCP 传输协议,设置 'env' 中的环境变量。至少需要正确配置 Runtime API 连接信息 ('HAPROXY_HOST'/'HAPROXY_PORT'/'HAPROXY_RUNTIME_MODE'/'HAPROXY_RUNTIME_SOCKET') 或 Stats API 信息 ('HAPROXY_STATS_ENABLED'/'HAPROXY_STATS_URL') 中的一种或同时配置。

基本使用方法

配置完成后,在支持 MCP 的 LLM 客户端中,您就可以通过自然语言指令来与 HAProxy 交互。例如:

  • 询问 HAProxy 的当前版本或运行时信息。
  • 要求列出所有后端及其状态。
  • 查询特定后端或服务器的详细统计数据。
  • 请求禁用某个后端下的特定服务器。
  • 要求启用一个被禁用的服务器。
  • 让 LLM 分析统计数据,报告异常或瓶颈。

LLM 客户端会识别您的意图,并调用 'haproxy-mcp-server' 中对应的工具(如 'show_info', 'list_backends', 'show_stat', 'disable_server', 'enable_server' 等)来执行操作,并将返回的结果或状态反馈给您。

信息

分类

开发者工具