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:
22
CLAUDE.md
22
CLAUDE.md
@@ -319,6 +319,12 @@ api.example.com → pool_6
|
||||
- **Input validation**: Domain format, IP (v4/v6), port range, slot limits
|
||||
- **Bulk limits**: Max 10 servers per bulk add, 10KB JSON size limit
|
||||
|
||||
### Performance Optimization
|
||||
- **Command batching**: Multiple HAProxy commands sent in single TCP connection
|
||||
- Server config (addr + state): 1 connection instead of 2
|
||||
- Startup restore: All servers restored in 1 connection (was 2×N for N servers)
|
||||
- Example: 7 servers restored = 1 connection (was 14 connections)
|
||||
|
||||
## HAProxy Runtime API
|
||||
|
||||
```bash
|
||||
@@ -345,8 +351,20 @@ echo "set server pool_1/pool_1_1 state ready" | nc localhost 9999
|
||||
|
||||
```
|
||||
/opt/haproxy/
|
||||
├── mcp/ # MCP server (streamable-http)
|
||||
│ └── server.py # Main MCP server (~1700 lines, 22 tools)
|
||||
├── haproxy_mcp/ # MCP server package (streamable-http)
|
||||
│ ├── server.py # Main entry point
|
||||
│ ├── config.py # Configuration and constants
|
||||
│ ├── exceptions.py # Exception classes
|
||||
│ ├── validation.py # Input validation
|
||||
│ ├── haproxy_client.py # HAProxy Runtime API client
|
||||
│ ├── file_ops.py # File I/O operations
|
||||
│ ├── utils.py # Parsing utilities
|
||||
│ └── tools/ # MCP tools (22 total)
|
||||
│ ├── 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)
|
||||
├── conf/
|
||||
│ ├── haproxy.cfg # Main HAProxy config (100 pool backends)
|
||||
│ ├── domains.map # Domain → Pool mapping
|
||||
|
||||
Reference in New Issue
Block a user