Skip to main content
Glama
ARCHITECTURE.md•17.8 kB
# OPNSense MCP Server - Architecture Documentation ## šŸ—ļø System Overview The OPNSense MCP Server is a Model Context Protocol (MCP) implementation that provides programmatic access to OPNsense firewall management. It bridges the gap between AI assistants and network infrastructure management through a standardized protocol. ### Core Capabilities - **Firewall Management**: Rules, aliases, NAT configuration - **Network Configuration**: VLANs, interfaces, routing - **Service Management**: DHCP, DNS, HAProxy load balancing - **Infrastructure as Code**: Declarative resource management - **Backup & Recovery**: Configuration snapshots and restoration - **Macro Recording**: Capture and replay operation sequences ## šŸ“ Architecture Layers ``` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ MCP Client Layer │ │ (Claude, VS Code, Custom Clients) │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ MCP Protocol │ │ (JSON-RPC) │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Transport Layer │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ STDIO │ │ SSE │ │ │ │ Transport │ │ Transport │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Server Core │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ Request Router │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ Tool Handler │ │ Resource Handler │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Business Logic │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ Resources │ │ IaC │ │ Macros │ │ │ │ (CRUD) │ │ Engine │ │ Recorder │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Service Layer │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ Cache │ │ State │ │ Backup │ │ │ │ Manager │ │ Store │ │ Manager │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ API Layer │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ OPNSense API Client │ │ │ │ (Authentication, Request/Response) │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ OPNsense │ │ Firewall │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ``` ## šŸ”§ Component Architecture ### 1. Transport Layer Handles communication between MCP clients and the server. ```typescript TransportManager ā”œā”€ā”€ StdioServerTransport // CLI-based communication └── SSETransportServer // HTTP/SSE for web clients └── Express Server // HTTP endpoint management ``` **Key Features:** - Multi-transport support (STDIO, SSE) - Automatic transport selection based on environment - Connection lifecycle management - Error recovery and reconnection ### 2. Server Core Central request processing and routing. ```typescript OPNSenseMCPServer ā”œā”€ā”€ Request Router │ ā”œā”€ā”€ Tool Requests → Tool Handlers │ ā”œā”€ā”€ Resource Requests → Resource Handlers │ └── System Requests → System Handlers ā”œā”€ā”€ Tool Registry │ ā”œā”€ā”€ VLAN Tools │ ā”œā”€ā”€ Firewall Tools │ ā”œā”€ā”€ Service Tools │ └── IaC Tools └── Resource Registry ā”œā”€ā”€ Static Resources └── Dynamic Resources ``` ### 3. Resource Management CRUD operations for OPNsense entities. ```typescript Resources/ ā”œā”€ā”€ Network/ │ ā”œā”€ā”€ VlanResource // VLAN management │ ā”œā”€ā”€ ArpTableResource // ARP table operations │ └── InterfaceResource // Network interfaces ā”œā”€ā”€ Firewall/ │ ā”œā”€ā”€ FirewallRuleResource // Rule management │ └── AliasResource // Alias management ā”œā”€ā”€ Services/ │ ā”œā”€ā”€ DhcpLeaseResource // DHCP leases │ ā”œā”€ā”€ DnsBlocklistResource // DNS filtering │ └── HAProxyResource // Load balancer config └── Base Classes/ ā”œā”€ā”€ IaCResource // IaC base functionality └── BaseResource // Common resource patterns ``` ### 4. Infrastructure as Code (IaC) Declarative resource management system. ```typescript IaC System/ ā”œā”€ā”€ ResourceRegistry // Type registration ā”œā”€ā”€ DeploymentPlanner // Dependency resolution ā”œā”€ā”€ ExecutionEngine // Apply/destroy operations └── ResourceStateStore // State persistence ā”œā”€ā”€ Current State ā”œā”€ā”€ Desired State └── State Diff ``` **Workflow:** 1. Parse resource definitions 2. Build dependency graph 3. Plan execution order 4. Execute changes 5. Update state 6. Verify convergence ### 5. Caching System Performance optimization through intelligent caching. ```typescript CacheManager/ ā”œā”€ā”€ EnhancedCacheManager // Advanced features │ ā”œā”€ā”€ TTL Management │ ā”œā”€ā”€ Size Limits │ ā”œā”€ā”€ Compression (TODO) │ └── Statistics └── MCPCacheManager // Basic caching ā”œā”€ā”€ In-memory Store └── Invalidation Rules ``` **Cache Strategies:** - API response caching (5-minute TTL) - Resource state caching - Macro execution caching - Lazy invalidation on writes ### 6. State Management Persistent state for IaC and system configuration. ```typescript StateStore/ ā”œā”€ā”€ File-based Persistence ā”œā”€ā”€ Encryption (TODO) ā”œā”€ā”€ Versioning └── Migration Support ``` ### 7. API Client OPNsense API communication layer. ```typescript OPNSenseAPIClient/ ā”œā”€ā”€ Authentication │ ā”œā”€ā”€ API Key/Secret │ └── Session Management ā”œā”€ā”€ Request Builder │ ā”œā”€ā”€ URL Construction │ ā”œā”€ā”€ Parameter Encoding │ └── Header Management └── Response Handler ā”œā”€ā”€ Error Detection ā”œā”€ā”€ Data Transformation └── Retry Logic ``` ## šŸ”„ Data Flow ### Tool Execution Flow ```mermaid sequenceDiagram Client->>MCP Server: Tool Request MCP Server->>Tool Handler: Route Request Tool Handler->>Validator: Validate Args Validator-->>Tool Handler: Valid/Invalid Tool Handler->>API Client: API Call API Client->>OPNsense: HTTP Request OPNsense-->>API Client: Response API Client-->>Tool Handler: Parsed Data Tool Handler->>Cache: Store Result Tool Handler-->>MCP Server: Tool Response MCP Server-->>Client: Result ``` ### IaC Deployment Flow ```mermaid sequenceDiagram Client->>IaC Engine: Deploy Resources IaC Engine->>Planner: Create Plan Planner->>State Store: Get Current State State Store-->>Planner: Current State Planner-->>IaC Engine: Execution Plan loop For Each Resource IaC Engine->>Resource: Apply Changes Resource->>API Client: API Calls API Client->>OPNsense: Configure OPNsense-->>API Client: Success Resource-->>IaC Engine: Applied IaC Engine->>State Store: Update State end IaC Engine-->>Client: Deployment Complete ``` ## šŸ—‚ļø Directory Structure ``` src/ ā”œā”€ā”€ api/ # API client implementation │ ā”œā”€ā”€ client.ts # Main API client │ └── auth.ts # Authentication logic ā”œā”€ā”€ cache/ # Caching implementations │ ā”œā”€ā”€ manager.ts # Basic cache │ └── enhanced-manager.ts # Advanced features ā”œā”€ā”€ db/ # Database operations │ └── network-query/ # Network data queries ā”œā”€ā”€ deployment/ # IaC deployment │ └── planner.ts # Deployment planning ā”œā”€ā”€ execution/ # IaC execution │ └── engine.ts # Execution engine ā”œā”€ā”€ macro/ # Macro system │ ā”œā”€ā”€ recorder.ts # Operation recording │ ā”œā”€ā”€ generator.ts # Code generation │ └── analyzer.ts # Macro analysis ā”œā”€ā”€ resources/ # Resource implementations │ ā”œā”€ā”€ base.ts # Base classes │ ā”œā”€ā”€ network/ # Network resources │ ā”œā”€ā”€ firewall/ # Firewall resources │ ā”œā”€ā”€ services/ # Service resources │ └── registry.ts # Resource registry ā”œā”€ā”€ state/ # State management │ └── store.ts # State persistence ā”œā”€ā”€ tools/ # MCP tool definitions │ ā”œā”€ā”€ vlan.ts # VLAN tools │ ā”œā”€ā”€ firewall.ts # Firewall tools │ └── iac.ts # IaC tools ā”œā”€ā”€ transports/ # Transport implementations │ ā”œā”€ā”€ SSETransportServer.ts │ └── TransportManager.ts ā”œā”€ā”€ utils/ # Utilities │ ā”œā”€ā”€ logger.ts # Logging │ └── validation.ts # Input validation └── index.ts # Main entry point ``` ## šŸ” Security Architecture ### Authentication Flow ``` Client → MCP Server → API Client → OPNsense (MCP Auth) (API Keys) (HTTPS) ``` ### Security Layers 1. **Transport Security**: TLS/SSL for API communication 2. **Authentication**: API key/secret pairs 3. **Authorization**: Role-based permissions in OPNsense 4. **Input Validation**: Zod schemas for all inputs 5. **State Protection**: Encryption for sensitive data (planned) 6. **Audit Logging**: All operations logged with context ## šŸš€ Deployment Architecture ### Standalone Deployment ``` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Client │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ STDIO ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā” │ MCP Server │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ HTTPS ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā” │ OPNsense │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ``` ### Container Deployment ``` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Client │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ HTTP/SSE ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Docker │ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ │ MCP │ │ │ │ Server │ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ HTTPS ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā” │ OPNsense │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ``` ### High Availability Setup ``` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Load │ │ Balancer │ ā””ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ │ ā”Œā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā” │ MCP │ │ MCP │ │ Node1 │ │ Node2 │ ā””ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”˜ │ │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā” │ OPNsense │ │ Cluster │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ``` ## šŸŽÆ Design Patterns ### 1. Repository Pattern Resources act as repositories for domain entities. ```typescript class VlanResource { async list(): Promise<Vlan[]> async get(id: string): Promise<Vlan> async create(data: VlanInput): Promise<Vlan> async update(id: string, data: Partial<Vlan>): Promise<Vlan> async delete(id: string): Promise<void> } ``` ### 2. Strategy Pattern Different caching strategies for different data types. ```typescript interface CacheStrategy { shouldCache(key: string): boolean getTTL(key: string): number invalidate(pattern: string): void } ``` ### 3. Command Pattern Macro recording captures operations as commands. ```typescript interface Command { execute(): Promise<Result> undo(): Promise<void> serialize(): object } ``` ### 4. Factory Pattern Resource registry creates resources dynamically. ```typescript class ResourceRegistry { register(type: string, factory: ResourceFactory): void create(type: string, props: any): Resource } ``` ## šŸ“Š Performance Considerations ### Optimization Strategies 1. **Connection Pooling**: Reuse API connections 2. **Request Batching**: Combine multiple API calls 3. **Caching**: Multi-level cache hierarchy 4. **Lazy Loading**: Load resources on demand 5. **Compression**: Compress large payloads (planned) ### Bottlenecks & Solutions | Bottleneck | Current Solution | Future Improvement | |------------|-----------------|-------------------| | API Rate Limits | Request throttling | Request batching | | Large State Files | File-based storage | Database backend | | Memory Usage | TTL-based eviction | LRU cache | | Network Latency | Response caching | Edge deployment | ## šŸ”„ Extension Points ### Adding New Resources 1. Create resource class extending `IaCResource` 2. Define Zod schema for validation 3. Implement `toAPIPayload()` and `fromAPIResponse()` 4. Register in resource registry 5. Add corresponding MCP tools ### Adding New Transports 1. Implement Transport interface 2. Handle connection lifecycle 3. Register in TransportManager 4. Configure in environment variables ### Adding New Cache Strategies 1. Implement CacheStrategy interface 2. Define TTL and invalidation rules 3. Register in CacheManager 4. Configure via settings ## 🚦 Future Architecture Enhancements ### Planned Improvements 1. **Event-Driven Architecture**: WebSocket subscriptions for real-time updates 2. **Plugin System**: Dynamic loading of custom resources 3. **Distributed State**: Redis/etcd for shared state 4. **GraphQL API**: Alternative query interface 5. **Observability**: OpenTelemetry integration 6. **Multi-tenancy**: Isolated resource namespaces --- *This architecture document provides a comprehensive overview of the OPNSense MCP Server's design, components, and patterns.*

Latest Blog Posts

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/vespo92/OPNSenseMCP'

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