# 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.*