mcp-name-cheap/CLAUDE.md
Claude Code f5e63c888d Initial commit: MCP Name Cheap server implementation
- 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>
2025-07-20 03:43:11 -06:00

251 lines
8.1 KiB
Markdown

# 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 management
- `dns.py`: DNS record management and nameserver configuration
- `ssl.py`: SSL certificate listing and information
- `account.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:
```python
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:
```python
# 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
```bash
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
1. **Black**: Code formatting (88 char line length)
2. **isort**: Import sorting (black profile)
3. **flake8**: Linting with E203, E501, W503 ignored
4. **mypy**: Type checking with strict settings
5. **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:
```python
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 resources
- `get_*`: Get specific resource information
- `set_*`: Modify resources
- `check_*`: 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
1. **Bulk Operations**: Support for bulk domain operations
2. **Webhook Support**: Event notifications for domain/certificate changes
3. **Advanced DNS**: Support for advanced DNS record types
4. **Certificate Management**: SSL certificate ordering and management
5. **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
1. **Authentication Errors**: Verify API key, username, and IP whitelisting
2. **Domain Not Found**: Ensure domain exists in the account
3. **Rate Limiting**: Implement exponential backoff for retries
4. **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.*