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