Skip to main content
Glama
ANALYSIS.md11.5 kB
# F5 Cloud Status - Website Analysis & MCP Server Design ## Executive Summary This document analyzes the F5 Cloud Status website (https://www.f5cloudstatus.com) and proposes an MCP (Model Context Protocol) server design for programmatic access to service status information. ## Website Structure Analysis ### 1. Overall Status - **Location**: Top-level heading - **Data**: "All Systems Operational" or degraded status - **Format**: Plain text status indicator - **Purpose**: Quick glance at overall system health ### 2. Component Hierarchy The website organizes services into a hierarchical structure with **148 total components**: #### Top-Level Service Categories 1. **Services** (22ynq9vg49qm) - Core F5 Distributed Cloud services - Includes: Portal, Dashboard, App Stack, Secure Mesh, Bot Defense, Client Side Defense, DNS, CDN, Account Protection, NGINX One, etc. 2. **Customer Support, Docs and WebSite** (fr9kjt2hgjkn) - Website - Customer Support - Software Distribution - Product Documentation 3. **FedRAMP** (wmm4t37ybgr7) - FedRAMP-DNS 4. **Regional PoPs (Points of Presence)** - North America PoPs - South America PoPs - Europe PoPs - Asia PoPs - Oceania PoPs - Middle East PoPs 5. **Legacy Services** - Silverline - Legacy - Bot and Risk Mgt - Legacy 6. **Internal Testing** ([F5 Internal Under Testing]) ### 3. Component Data Structure Each component contains: ```json { "id": "unique-component-id", "name": "Human-readable service name", "status": "Operational | Degraded | Down", "uptime": "99.97 % uptime" // Optional, only for some components } ``` **Key Findings**: - 148 total tracked components - Each has a unique `data-component-id` attribute - Status values observed: "Operational" - Uptime percentages available for major service groups - Geographic organization (North America, Europe, Asia, South America, Oceania, Middle East) ### 4. Scheduled Maintenance **Structure**: ```json { "title": "Maintenance description with date/time", "link": "URL to detailed incident page", "startTime": "ISO 8601 timestamp", "endTime": "ISO 8601 timestamp", "referenceId": "Internal tracking ID", "impact": "Description of expected impact" } ``` **Current Example**: - F5 Planned Maintenance for CDN Services Global Controller - Oct 17, 2025 05:30-10:30 UTC - Reference ID: SDCCAB-1650 ### 5. Past Incidents **Structure**: - Organized by date (descending) - Each day shows either "No incidents" or list of incidents - Incidents include: - Title - Link to detailed incident page - Timeline of updates with status progression: - Investigating → Identified → Update → Monitoring → Resolved **Incident Status Progression**: 1. **Investigating**: Initial problem detection 2. **Identified**: Root cause found 3. **Update**: Ongoing progress updates 4. **Monitoring**: Fix applied, watching for stability 5. **Resolved**: Issue fully resolved ### 6. Uptime Visualization - **Format**: SVG graph with tabs representing days - **Time Range**: 60 days - **Data Points**: Each tab represents 1 day - **Visual Indicator**: Color-coded status bars - **Percentage**: Overall uptime percentage displayed ## Data Extraction Strategy ### HTML/DOM Selectors ```javascript // Overall Status document.querySelector('h2').textContent // Components document.querySelectorAll('[data-component-id]') // Each component: // - comp.getAttribute('data-component-id') // - comp.querySelector('.name').textContent // - comp.querySelector('.component-status').textContent // - comp.querySelector('.uptime-percent')?.textContent // Scheduled Maintenance document.querySelector('.scheduled-maintenance') // - .querySelectorAll('.incident-title') // Past Incidents document.querySelectorAll('.incident-day') // - day.querySelector('.date').textContent // - day.querySelectorAll('.incident-title') ``` ### API/Backend Discovery **Platform**: Atlassian Statuspage - Footer indicates "Powered by Atlassian Statuspage" - Likely has public API endpoints - Standard Statuspage API pattern: `https://www.f5cloudstatus.com/api/v2/` **Potential API Endpoints**: ``` GET /api/v2/status.json # Overall status GET /api/v2/components.json # All components GET /api/v2/incidents.json # Recent incidents GET /api/v2/scheduled-maintenances.json # Scheduled maintenance GET /api/v2/summary.json # Summary data ``` ## MCP Server Design ### Tool Specification #### 1. `f5-status-get-overall` **Purpose**: Get overall system status **Parameters**: None **Returns**: ```typescript { status: "operational" | "degraded" | "partial_outage" | "major_outage", indicator: "none" | "minor" | "major" | "critical", description: string, updated_at: string } ``` #### 2. `f5-status-list-components` **Purpose**: List all service components with current status **Parameters**: ```typescript { category?: string, // Filter by category (optional) status?: string, // Filter by status (optional) includeUptime?: boolean // Include uptime percentage } ``` **Returns**: ```typescript { components: Array<{ id: string, name: string, status: string, group: string, uptime?: string }> } ``` #### 3. `f5-status-get-component` **Purpose**: Get detailed status for a specific component **Parameters**: ```typescript { componentId: string // Component ID or name } ``` **Returns**: ```typescript { id: string, name: string, status: string, group: string, uptime: string, description: string, updated_at: string } ``` #### 4. `f5-status-list-incidents` **Purpose**: List recent incidents **Parameters**: ```typescript { limit?: number, // Number of incidents to return status?: string, // Filter by status daysBack?: number // How many days to look back } ``` **Returns**: ```typescript { incidents: Array<{ id: string, name: string, status: string, impact: string, created_at: string, updated_at: string, shortlink: string, updates: Array<{ status: string, body: string, created_at: string }> }> } ``` #### 5. `f5-status-get-scheduled-maintenance` **Purpose**: Get upcoming scheduled maintenance windows **Parameters**: ```typescript { upcoming?: boolean // Only future maintenance } ``` **Returns**: ```typescript { maintenance: Array<{ id: string, name: string, scheduled_for: string, scheduled_until: string, status: string, impact: string, components: string[], updates: Array<{ status: string, body: string, created_at: string }> }> } ``` #### 6. `f5-status-get-uptime` **Purpose**: Get uptime statistics **Parameters**: ```typescript { componentId?: string, // Specific component (optional) range?: number // Days to include (default: 60) } ``` **Returns**: ```typescript { uptime: { percentage: number, startDate: string, endDate: string, dailyStats: Array<{ date: string, uptime: number, incidents: number }> } } ``` ### Implementation Strategy #### Phase 1: Web Scraping Approach ```typescript // Use Playwright for reliable data extraction import { chromium } from 'playwright'; async function extractStatusData(url: string) { const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto(url); // Extract data using the selectors identified above const data = await page.evaluate(() => { // DOM extraction logic }); await browser.close(); return data; } ``` #### Phase 2: API Integration (Preferred) ```typescript // Use Statuspage API if available const API_BASE = 'https://www.f5cloudstatus.com/api/v2'; async function fetchStatus() { const response = await fetch(`${API_BASE}/status.json`); return await response.json(); } ``` #### Phase 3: MCP Server Implementation ```typescript import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; const server = new Server({ name: "f5-cloud-status", version: "1.0.0" }, { capabilities: { tools: {} } }); // Register tools server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ { name: "f5-status-get-overall", description: "Get overall F5 Cloud service status", inputSchema: { type: "object", properties: {} } }, // ... other tools ] })); server.setRequestHandler(CallToolRequestSchema, async (request) => { // Tool implementation }); ``` ### Data Refresh Strategy **Caching**: - Overall status: Cache for 30 seconds - Component list: Cache for 60 seconds - Incidents: Cache for 120 seconds - Scheduled maintenance: Cache for 300 seconds **Update Mechanism**: ```typescript class StatusCache { private cache = new Map<string, { data: any, expiry: number }>(); async get(key: string, ttl: number, fetcher: () => Promise<any>) { const cached = this.cache.get(key); if (cached && cached.expiry > Date.now()) { return cached.data; } const data = await fetcher(); this.cache.set(key, { data, expiry: Date.now() + ttl }); return data; } } ``` ## Key Observations ### Component Organization 1. **Hierarchical Structure**: Services are organized in parent-child relationships 2. **Geographic Distribution**: PoPs (Points of Presence) organized by continent 3. **Service Categories**: Clear separation between production, legacy, and internal testing 4. **148 Components Total**: Comprehensive coverage of all F5 cloud services ### Status Information Quality 1. **Real-time Status**: Current operational state 2. **Historical Uptime**: 60-day uptime percentages 3. **Incident Timeline**: Detailed progression of issue resolution 4. **Maintenance Windows**: Advance notice with impact assessment ### User Experience Patterns 1. **Collapsible Sections**: Reduces visual clutter 2. **Color Coding**: Quick visual status identification 3. **Uptime Graphs**: Visual representation of service reliability 4. **Detailed Incident Reports**: Transparency in issue communication ## Recommended MCP Tool Priority ### High Priority (MVP) 1. `f5-status-get-overall` - Essential for quick health check 2. `f5-status-list-components` - Core functionality 3. `f5-status-list-incidents` - Critical for awareness ### Medium Priority 4. `f5-status-get-scheduled-maintenance` - Important for planning 5. `f5-status-get-component` - Detailed investigation ### Low Priority (Nice to Have) 6. `f5-status-get-uptime` - Historical analysis ## Next Steps 1. **Verify API Availability**: Test Statuspage API endpoints 2. **Implement Core Tools**: Build MVP with 3 high-priority tools 3. **Add Caching Layer**: Implement efficient data refresh 4. **Error Handling**: Handle network failures, rate limiting 5. **Testing**: Comprehensive test suite with different status scenarios 6. **Documentation**: User guide and API reference ## Technical Considerations ### Rate Limiting - Implement exponential backoff - Respect HTTP 429 responses - Cache aggressively to minimize requests ### Error Scenarios - Network failures - API unavailable - Malformed data - Component not found ### Security - No authentication required (public data) - HTTPS only - Validate all external data - Sanitize strings before display ### Performance - Parallel requests for multiple components - Batch operations where possible - Stream large data sets - Efficient JSON parsing

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/robinmordasiewicz/f5cloudstatus-mcp'

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