refactor: Modularize MCP server with command batching
- 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>
This commit is contained in:
36
haproxy_mcp/server.py
Normal file
36
haproxy_mcp/server.py
Normal file
@@ -0,0 +1,36 @@
|
||||
#!/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")
|
||||
Reference in New Issue
Block a user