
- Production-ready MCP server for Name Cheap API integration - Domain management (registration, renewal, availability checking) - DNS management (records, nameserver configuration) - SSL certificate management and monitoring - Account information and balance checking - Smart identifier resolution for improved UX - Comprehensive error handling with specific exception types - 80%+ test coverage with unit, integration, and MCP tests - CLI and MCP server interfaces - FastMCP 2.10.5+ implementation with full MCP spec compliance 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
8.1 KiB
MCP Name Cheap - Development Documentation
This document contains development notes, architecture decisions, and implementation details for the MCP Name Cheap server.
Architecture Overview
The MCP Name Cheap server follows a layered architecture pattern with clear separation of concerns:
Layer 1: Core API Client (server.py
)
- Purpose: Low-level HTTP client for Name Cheap API
- Responsibilities:
- XML request/response handling
- Comprehensive error classification and handling
- Rate limiting and timeout management
- Environment-based configuration loading
Layer 2: High-Level Client (client.py
)
- Purpose: Business logic and smart identifier resolution
- Responsibilities:
- Smart identifier resolution (domain names, SSL hostnames)
- Input validation using domain format checking
- Cache management for performance
- Enhanced data formatting
Layer 3: FastMCP Tools (Resource Modules)
- Purpose: MCP protocol implementation with modular organization
- Modules:
domains.py
: Domain registration, renewal, and managementdns.py
: DNS record management and nameserver configurationssl.py
: SSL certificate listing and informationaccount.py
: Account information and balance checking
Layer 4: Server Assembly (fastmcp_server.py
)
- Purpose: FastMCP server configuration and module mounting
- Responsibilities:
- Module registration and organization
- Server lifecycle management
Smart Identifier Resolution
The server implements smart identifier resolution to improve user experience:
Domain Identifiers
- Primary: Domain name (e.g., "example.com")
- Resolution: Exact match against account domains (case-insensitive)
- Validation: RFC-compliant domain format checking
SSL Certificate Identifiers
- Primary: Certificate ID (numeric)
- Secondary: Hostname matching
- Tertiary: SSL type matching
- Resolution: Exact match with fallback to hostname/type lookup
Error Handling Strategy
Comprehensive error handling with specific exception types:
NameCheapAPIError # Base exception
├── NameCheapAuthError # Authentication/authorization
├── NameCheapNotFoundError # Resource not found
├── NameCheapRateLimitError # Rate limit exceeded
└── NameCheapValidationError # Input validation
Error Classification Logic
- Authentication: Keywords "authentication", "authorization", HTTP 401
- Not Found: Keywords "not found", specific error codes
- Validation: Keywords "validation", "invalid"
- Rate Limiting: HTTP 429
- Generic: All other API errors
Configuration Management
Environment-based configuration with validation:
# Required variables
NAMECHEAP_API_KEY # API key from Name Cheap panel
NAMECHEAP_USERNAME # Account username
NAMECHEAP_CLIENT_IP # Whitelisted IP address
# Optional variables
NAMECHEAP_SANDBOX=true # Sandbox mode (default: false)
Testing Strategy
Multi-layered testing approach:
Unit Tests (test_server.py
, test_client.py
)
- Individual component testing with mocks
- Error handling verification
- Configuration testing
- Input validation testing
Integration Tests
- Component interaction testing
- Cache behavior verification
- Workflow testing (register → renew → list)
MCP Tests (test_mcp_server.py
)
- FastMCP in-memory testing patterns
- Tool functionality verification
- Resource content validation
- Error response testing
Performance Considerations
Caching Strategy
- Domain Cache: Cached after first
list_domains()
call - SSL Cache: Cached after first
list_ssl_certificates()
call - Cache Invalidation: Cleared after mutating operations (register, renew)
HTTP Configuration
- Total Timeout: 30 seconds
- Connect Timeout: 10 seconds
- Follow Redirects: Enabled
- Connection Reuse: Single httpx.Client instance
API Response Handling
XML Processing
- Uses
xmltodict
for XML-to-dict conversion - Handles both single items and arrays consistently
- Preserves XML attributes with
@
prefix
Response Normalization
- Single items converted to lists where appropriate
- Enhanced data with computed fields (e.g.,
_display_name
,_is_expired
) - Consistent error response format across all tools
Resource URI Patterns
Standardized resource URI scheme:
namecheap://domains # List all domains
namecheap://domain/{domain_name} # Specific domain info
namecheap://dns/{domain_name} # DNS records
namecheap://nameservers/{domain_name} # Nameserver info
namecheap://ssl # List SSL certificates
namecheap://ssl/{certificate_id} # Specific certificate
namecheap://account # Account information
namecheap://balance # Account balance
CLI Implementation
Command-line interface for direct operations:
Command Structure
mcp-namecheap <category> <action> [arguments] [--json]
Categories
domains
: Domain management (list, check, info)dns
: DNS management (get)ssl
: SSL management (list)account
: Account management (info, balance)
Development Workflow
Code Quality Pipeline
- Black: Code formatting (88 char line length)
- isort: Import sorting (black profile)
- flake8: Linting with E203, E501, W503 ignored
- mypy: Type checking with strict settings
- pytest: Test execution with coverage
Pre-commit Hooks
- Trailing whitespace removal
- End-of-file fixing
- YAML validation
- Large file checking
- Merge conflict detection
FastMCP Integration
Server Mounting
Each resource module creates its own FastMCP instance:
domains_mcp = FastMCP("domains")
dns_mcp = FastMCP("dns")
ssl_mcp = FastMCP("ssl")
account_mcp = FastMCP("account")
Tool Organization
Tools are organized by functionality with consistent naming:
list_*
: List resourcesget_*
: Get specific resource informationset_*
: Modify resourcescheck_*
: Validation operations
Resource Implementation
Resources provide human-readable content formatted for display:
- Tabular data with headers
- Status indicators and flags
- Error handling with graceful degradation
Known Limitations
Name Cheap API Constraints
- XML-only response format (no JSON)
- Rate limiting (specific limits not documented)
- Sandbox environment has limited functionality
- Some operations require domain ownership verification
Implementation Limitations
- No async support in underlying httpx client (by design for FastMCP compatibility)
- Cache invalidation is conservative (clears all caches on any mutation)
- SSL smart identifiers limited to hostname and type matching
Future Enhancements
Potential Improvements
- Bulk Operations: Support for bulk domain operations
- Webhook Support: Event notifications for domain/certificate changes
- Advanced DNS: Support for advanced DNS record types
- Certificate Management: SSL certificate ordering and management
- Domain Transfer: Support for domain transfer operations
Architecture Considerations
- Consider event-driven cache invalidation
- Evaluate async support for improved performance
- Investigate GraphQL-style querying for complex operations
Debugging and Troubleshooting
Common Issues
- Authentication Errors: Verify API key, username, and IP whitelisting
- Domain Not Found: Ensure domain exists in the account
- Rate Limiting: Implement exponential backoff for retries
- Timeout Errors: Check network connectivity and Name Cheap API status
Debug Logging
The server includes comprehensive error messages with context:
- HTTP status codes and response bodies
- Name Cheap API error codes and descriptions
- Input validation failures with specific field information
Testing in Sandbox
- Use
NAMECHEAP_SANDBOX=true
for safe testing - Sandbox has limited domain TLDs available
- Some operations may not work identically in sandbox vs production
This documentation is maintained alongside code changes and should be updated when architecture or implementation details change.