Skip to main content
Glama
REFACTORING_SUMMARY.md8.43 kB
# Transport-Agnostic Refactoring Summary ## What Changed We refactored the CloudNativePG MCP server to support multiple transport modes while keeping stdio as the default for simplicity. ### Key Changes #### 1. **Separated Transport Layer from Business Logic** **Before:** ```python async def main(): from mcp.server.stdio import stdio_server async with stdio_server() as (read_stream, write_stream): await mcp.run(read_stream, write_stream, ...) ``` **After:** ```python # Transport-specific functions async def run_stdio_transport(): """stdio transport implementation""" async def run_http_transport(): """HTTP/SSE transport (future)""" async def main(): """Routes to appropriate transport""" if args.transport == "stdio": await run_stdio_transport() elif args.transport == "http": await run_http_transport() ``` #### 2. **Added Command-Line Interface** ```bash # New capabilities python cnpg_mcp_server.py --help python cnpg_mcp_server.py --transport stdio python cnpg_mcp_server.py --transport http --port 3000 ``` #### 3. **Improved Initialization** - Kubernetes clients initialized in dedicated function - Better error messages during initialization - Logging to stderr for debugging #### 4. **Added HTTP Transport Skeleton** - Placeholder function with clear TODOs - Implementation notes and examples - Dependencies pre-listed (commented out) #### 5. **Updated Documentation** - Transport modes explained in README - Architecture section clarifies separation - New HTTP_TRANSPORT_GUIDE.md for future implementation ## Why These Changes Matter ### ✅ **Keep It Simple Now** - Default behavior unchanged (stdio) - No extra dependencies required - Easy to test locally - Works great with Claude Desktop ### ✅ **Easy to Extend Later** - All tool code is transport-agnostic - HTTP transport requires only one new function - No refactoring of business logic needed - Clear path forward documented ### ✅ **Production Ready Path** - Can scale horizontally with HTTP - Support multiple concurrent clients - Deploy as shared team service - Remote access capability ### ✅ **Best of Both Worlds** ``` Development → Production stdio → HTTP Simple → Scalable Local → Remote Single → Multi-client Immediate → When needed ``` ## File Changes ### Modified Files 1. **cnpg_mcp_server.py** - Added `parse_args()` function - Split `main()` into transport-specific functions - Added `run_stdio_transport()` and `run_http_transport()` - Improved initialization and error handling 2. **requirements.txt** - Added HTTP dependencies (commented out) - Clear section for future use 3. **README.md** - New "Transport Modes" section - Updated "Running the Server" with CLI options - Enhanced "Architecture" section ### New Files 4. **HTTP_TRANSPORT_GUIDE.md** - Complete implementation guide - Security checklist - Deployment examples - Troubleshooting tips ## Usage Examples ### Current Usage (stdio - unchanged) ```bash # Simple - just works python cnpg_mcp_server.py # With Claude Desktop { "mcpServers": { "cloudnative-pg": { "command": "python", "args": ["/path/to/cnpg_mcp_server.py"] } } } ``` ### Future Usage (HTTP - when needed) ```bash # Install HTTP dependencies pip install 'mcp[sse]' starlette uvicorn # Implement run_http_transport() (see guide) # Run HTTP server python cnpg_mcp_server.py --transport http --port 3000 # Connect remotely { "mcpServers": { "cloudnative-pg": { "url": "https://mcp.example.com:3000", "headers": {"Authorization": "Bearer token"} } } } ``` ## Testing Strategy ### Phase 1: Current (stdio) 1. Test basic connectivity ✓ 2. Verify tool implementations ✓ 3. Use with Claude Desktop ✓ 4. Iterate on tools ✓ ### Phase 2: When HTTP Needed 1. Uncomment HTTP dependencies 2. Implement `run_http_transport()` 3. Test locally on different port 4. Add authentication 5. Deploy to staging 6. Migrate clients gradually ## Architecture Diagram ``` ┌─────────────────────────────────────────────────────┐ │ MCP Tools │ │ @mcp.tool() decorated functions │ │ - list_postgres_clusters() │ │ - get_cluster_status() │ │ - create_postgres_cluster() │ │ - scale_postgres_cluster() │ │ - [future tools...] │ │ │ │ ↓ All tools work with any transport │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ Transport Layer │ │ ┌─────────────────────┐ ┌────────────────────┐ │ │ │ stdio │ │ HTTP/SSE │ │ │ │ ───── │ │ ──────── │ │ │ │ • stdin/stdout │ │ • REST API │ │ │ │ • Local process │ │ • Event stream │ │ │ │ • Simple │ │ • Multi-client │ │ │ │ • Current ✓ │ │ • Future ⏰ │ │ │ └─────────────────────┘ └────────────────────┘ │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ Kubernetes API │ │ CloudNativePG operator resources │ └─────────────────────────────────────────────────────┘ ``` ## Benefits Summary | Aspect | Before | After | |--------|--------|-------| | **Transport** | stdio only | Extensible to HTTP | | **CLI Args** | None | --transport, --port, --host | | **Documentation** | Basic | Comprehensive + guides | | **Testing** | stdio only | Can test both modes | | **Production** | Not ready | Clear path to production | | **Complexity** | Same | Same (no added overhead) | | **Flexibility** | Limited | High | ## Migration Cost **To add HTTP transport later:** - Install 3 packages: `mcp[sse]`, `starlette`, `uvicorn` - Implement 1 function: `run_http_transport()` (~50 lines) - Add authentication middleware (~30 lines) - No changes to existing tool code - Estimated time: 2-4 hours ## Decision Points ### Use stdio when: - ✓ Personal development - ✓ Claude Desktop integration - ✓ Single user - ✓ Local testing - ✓ Getting started ### Switch to HTTP when: - ✓ Multiple team members need access - ✓ Remote access required - ✓ Production deployment - ✓ Shared service model - ✓ Kubernetes-native deployment ## What Stays the Same - All tool implementations unchanged - All business logic unchanged - Default behavior unchanged (stdio) - No new dependencies required now - Testing approach unchanged - Claude Desktop setup unchanged ## What's Better - Clear separation of concerns - Easy to extend without refactoring - Better documentation - Production-ready architecture - Multiple deployment options - Future-proofed design ## Conclusion We've kept the server **simple for now** (stdio works great!) while making it **easy to scale later** (HTTP when needed). The refactoring adds **zero complexity** to current usage but provides a **clear path** to production deployment. **Start simple. Scale when ready. No regrets.** 🚀

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/helxplatform/cnpg-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server