- Split monolithic mcp/server.py (1874 lines) into haproxy_mcp/ package:
- config.py: Configuration constants and environment variables
- exceptions.py: Custom exception classes
- validation.py: Input validation functions
- haproxy_client.py: HAProxy Runtime API client with batch support
- file_ops.py: Atomic file operations with locking
- utils.py: CSV parsing utilities
- tools/: MCP tools organized by function
- domains.py: Domain management (3 tools)
- servers.py: Server management (7 tools)
- health.py: Health checks (3 tools)
- monitoring.py: Monitoring (4 tools)
- configuration.py: Config management (4 tools)
- Add haproxy_cmd_batch() for sending multiple commands in single TCP connection
- Optimize server operations: 1 connection instead of 2 per server
- Optimize startup restore: All servers in 1 connection (was 2×N)
- Update type hints to Python 3.9+ style (built-in generics)
- Remove unused imports and functions
- Update CLAUDE.md with new structure and performance notes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
"""HAProxy MCP Server - Direct Runtime API Integration
|
|
|
|
This module provides an MCP (Model Context Protocol) server for managing HAProxy
|
|
configuration and runtime state. It supports dynamic domain/server management
|
|
with HTTP backends (SSL termination at HAProxy frontend).
|
|
|
|
Environment Variables:
|
|
MCP_HOST: Host to bind MCP server (default: 0.0.0.0)
|
|
MCP_PORT: Port for MCP server (default: 8000)
|
|
HAPROXY_HOST: HAProxy Runtime API host (default: localhost)
|
|
HAPROXY_PORT: HAProxy Runtime API port (default: 9999)
|
|
HAPROXY_STATE_FILE: Path to server state file
|
|
HAPROXY_MAP_FILE: Path to domains.map file
|
|
HAPROXY_MAP_FILE_CONTAINER: Container path for domains.map
|
|
HAPROXY_SERVERS_FILE: Path to servers.json file
|
|
HAPROXY_POOL_COUNT: Number of pool backends (default: 100)
|
|
HAPROXY_MAX_SLOTS: Max servers per pool (default: 10)
|
|
"""
|
|
|
|
from mcp.server.fastmcp import FastMCP
|
|
|
|
from .config import MCP_HOST, MCP_PORT
|
|
from .tools import register_all_tools
|
|
from .tools.configuration import startup_restore
|
|
|
|
# Initialize MCP Server
|
|
mcp = FastMCP("haproxy", host=MCP_HOST, port=MCP_PORT)
|
|
|
|
# Register all tools
|
|
register_all_tools(mcp)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
startup_restore()
|
|
mcp.run(transport="streamable-http")
|