Skip to main content
Glama

mcp-plots

architecture.md15 kB
# MCP Plots Server - Architecture Documentation ## Overview The MCP Plots Server is a sophisticated data visualization system built on a clean, layered architecture following Domain-Driven Design (DDD) principles. This document provides comprehensive technical documentation for developers working with or extending the system. ## System Architecture ``` ┌─────────────────────────────────────────────────────────────────┐ │ Presentation Layer │ ├─────────────────┬─────────────────────┬─────────────────────────┤ │ MCP Tools │ HTTP Endpoints │ CLI Interface │ │ (Cursor, etc.) │ (Future) │ (Development) │ └─────────────────┴─────────────────────┴─────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ Application Layer │ ├─────────────────────────┬───────────────────────────────────────┤ │ Chart Rendering │ Configuration │ │ Service │ Service │ │ │ │ │ • Request orchestration │ • User preferences │ │ • Business logic │ • Thread-safe caching │ │ • Response formatting │ • Atomic file operations │ └─────────────────────────┴───────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ Domain Layer │ ├─────────────────────────┬───────────────────────────────────────┤ │ Domain Models │ Exceptions │ │ │ │ │ • ChartRequest │ • Custom error hierarchy │ │ • ChartResponse │ • Specific error types │ │ • UserPreferences │ • Error handling strategies │ │ • ChartData │ │ │ • ChartConfig │ │ └─────────────────────────┴───────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ Infrastructure Layer │ ├─────────────────┬─────────────────────┬─────────────────────────┤ │ Chart │ Visualization │ External │ │ Generation │ Engines │ Dependencies │ │ │ │ │ │ • Factory │ • MermaidGenerator │ • matplotlib │ │ • Providers │ • ChartGenerator │ • pandas │ │ • Registry │ • Field validation │ • seaborn │ └─────────────────┴─────────────────────┴─────────────────────────┘ ``` ## Module Structure ### `/src/app/` - Server Foundation - **`server.py`**: FastMCP server wrapper and lifecycle management - **`__main__.py`**: Entry point, configuration, and command-line interface ### `/src/capabilities/` - MCP Protocol Interface - **`tools.py`**: MCP tool implementations (render_chart, configure_preferences) - **`prompts.py`**: MCP prompts for enhanced AI interaction ### `/src/domain/` - Core Business Logic - **`models.py`**: Domain entities and value objects - **`exceptions.py`**: Custom exception hierarchy with error handling ### `/src/services/` - Application Services - **`chart_service.py`**: Chart rendering orchestration service - **`configuration_service.py`**: Thread-safe configuration management - **`chart_generator_factory.py`**: Factory for chart generation engines ### `/src/visualization/` - Chart Generation Engine - **`generator.py`**: Matplotlib-based high-fidelity chart generation - **`mermaid_generator.py`**: Text-based diagram generation (Mermaid syntax) - **`chart_config.py`**: Configuration classes and enums - **`field_validator.py`**: Data validation and field mapping - **`constants.py`**: System constants and configuration defaults ## Key Design Patterns ### 1. **Service Layer Pattern** Encapsulates business logic in dedicated service classes: - `ChartRenderingService`: Orchestrates chart generation workflow - `ConfigurationService`: Manages user preferences and settings ### 2. **Factory Pattern** `ChartGeneratorFactory` provides flexible chart engine creation: ```python factory = get_chart_factory() generator = factory.create_generator(chart_type, output_format) result = generator.generate(data, config) ``` ### 3. **Strategy Pattern** Different chart types use specialized generation strategies: - `MermaidGenerator`: Text-based diagrams for universal compatibility - `ChartGenerator`: High-fidelity matplotlib-based image generation ### 4. **Domain-Driven Design** - Clear separation between domain logic and infrastructure concerns - Rich domain models with behavior and validation - Ubiquitous language throughout the codebase ### 5. **Dependency Injection** Services receive dependencies through constructor injection: ```python chart_service = ChartRenderingService( config_service=config_service, chart_factory=chart_factory ) ``` ## Data Flow Architecture ### Request Processing Pipeline ``` ┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ MCP Client │ -> │ MCP Tools │ -> │ Chart Service │ │ (Cursor) │ │ render_chart() │ │ render_chart() │ └─────────────┘ └─────────────────┘ └─────────────────┘ │ │ v v ┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ MCP Client │ <- │ MCP Response │ <- │ Chart Generator │ │ (Display) │ │ Content Format │ │ Factory/Engine │ └─────────────┘ └─────────────────┘ └─────────────────┘ ``` ### Configuration Management Flow ``` ┌──────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │ User Input │ -> │ Configuration │ -> │ File System │ │ (Preferences)│ │ Service │ │ ~/.plots_mcp_... │ └──────────────┘ └─────────────────────┘ └─────────────────────┘ │ │ v v ┌──────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │ Chart Config │ <- │ Memory Cache │ <- │ Atomic File Ops │ │ (Applied) │ │ (Thread-Safe) │ │ (Data Integrity) │ └──────────────┘ └─────────────────────┘ └─────────────────────┘ ``` ## Error Handling Strategy ### Custom Exception Hierarchy ``` MCPPlotsError (Base) ├── ConfigurationError │ ├── InvalidConfigurationError │ └── ConfigurationFileError ├── DataValidationError │ ├── EmptyDataError │ ├── InvalidDataFormatError │ ├── MissingFieldError │ └── FieldNotFoundError ├── ChartGenerationError │ ├── UnsupportedChartTypeError │ ├── ChartRenderingError │ └── InvalidChartConfigurationError └── ServiceError ├── ServiceInitializationError └── ServiceOperationError ``` ### Error Recovery Strategies 1. **Graceful Degradation**: Fallback to simpler chart types when complex ones fail 2. **Default Values**: Use sensible defaults when configuration is invalid 3. **Error Propagation**: Structured error information for debugging 4. **Logging**: Comprehensive logging at appropriate levels ## Thread Safety & Concurrency ### Thread-Safe Components - **ConfigurationService**: Uses `threading.Lock()` for cache synchronization - **ChartGenerator**: Stateless static methods, inherently thread-safe - **MermaidGenerator**: Pure functions with no shared state ### Concurrency Design - **Stateless Services**: Most operations are stateless for scalability - **Immutable Data**: Domain objects are designed to be immutable where possible - **Atomic Operations**: File operations use atomic write patterns ## Performance Optimization ### Memory Management - **Context Managers**: Automatic resource cleanup for buffers and files - **Streaming Processing**: Process data without loading entire datasets in memory - **Resource Pooling**: Efficient reuse of expensive resources (matplotlib figures) ### Caching Strategy - **User Preferences**: In-memory caching with file-based persistence - **Chart Templates**: Potential future caching of chart configurations - **Generated Content**: Optional caching of generated charts (future enhancement) ### Scalability Considerations - **Horizontal Scaling**: Stateless design enables easy horizontal scaling - **Resource Limits**: Configurable limits on data size and processing time - **Async Support**: Architecture ready for async/await enhancement ## Extension Points ### Adding New Chart Types 1. **Define ChartType Enum**: Add new type to `chart_config.py` 2. **Implement Generator**: Add methods to both generators 3. **Update Factory**: Register new type in factory 4. **Add Validation**: Update field requirements ### Custom Output Formats 1. **Define OutputFormat**: Add to enum in `chart_config.py` 2. **Implement Generator**: Add format handling in generators 3. **Update Service**: Add format-specific processing ### New MCP Tools 1. **Define Tool**: Add function to `tools.py` 2. **Add Validation**: Implement input validation 3. **Register Tool**: Use `@mcp_server.tool()` decorator ## Testing Strategy ### Test Categories (Planned) 1. **Unit Tests**: Individual component testing 2. **Integration Tests**: Service interaction testing 3. **End-to-End Tests**: Full request/response cycle testing 4. **Performance Tests**: Memory usage and execution time validation ### Test Infrastructure Requirements - **pytest**: Primary testing framework - **pytest-cov**: Coverage reporting - **pytest-benchmark**: Performance benchmarking - **Factory Pattern**: Test data generation ## Monitoring & Observability ### Logging Strategy - **Structured Logging**: JSON format for machine parsing - **Log Levels**: DEBUG, INFO, WARN, ERROR with appropriate usage - **Context**: Request IDs and user context in logs - **Performance**: Timing information for operations ### Metrics (Future) - **Chart Generation Counts**: Track usage patterns - **Error Rates**: Monitor system health - **Performance Metrics**: Response times and resource usage - **User Analytics**: Popular chart types and configurations ## Deployment Architecture ### Development - **Local Development**: Direct Python execution with file-based config - **Testing**: In-memory configuration with mock external dependencies ### Production - **Docker Container**: Isolated environment with resource limits - **Configuration**: Environment variables and mounted config files - **Monitoring**: Log aggregation and metrics collection - **Scaling**: Load balancer with multiple container instances ## Future Enhancements ### Short-term (Next Release) 1. **Comprehensive Test Suite**: Unit and integration tests 2. **Performance Monitoring**: Request timing and resource usage 3. **Enhanced Error Messages**: More detailed user-facing errors ### Medium-term 1. **Caching Layer**: Chart result caching for performance 2. **Async Support**: Non-blocking chart generation 3. **Plugin System**: Third-party chart type extensions ### Long-term 1. **Interactive Charts**: Advanced interactive visualization support 2. **Real-time Updates**: WebSocket support for live data 3. **Advanced Analytics**: Built-in statistical analysis tools --- ## Additional Resources - **[API Documentation](api.md)**: Complete tool specifications - **[Integration Guide](integration.md)**: MCP client setup - **[Configuration Reference](configuration.md)**: All configuration options - **[Contributing Guide](../CONTRIBUTING.md)**: Development workflow and standards This architecture document is maintained alongside the codebase and updated with each significant architectural change.

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/MR901/mcp-plots'

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