Automate F5 Distributed Cloud web console operations through browser automation using mcp__claude-in-chrome MCP tools. Handles multi-provider authentication (Azure SSO, Google, Okta, SAML, native username/password), detecting session expiry and navigating login flows. Warns when VPN is required. Use when creating HTTP/TCP load balancers, origin pools, WAF policies, deploying cloud sites (AWS/Azure/GCP), managing DNS zones, configuring service policies, or executing any F5 XC GUI-based tasks. Triggers on: F5 XC console, GUI automation, browser automation, login, SSO, authenticate, tenant management, visual configuration, Web App and API Protection, WAAP.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
CRAWL_INSTRUCTIONS.mdPHASE-3-STATUS.mdPHASE_1_STATUS.mdauthentication-flows.mdconsole-navigation-metadata.jsoncrawl-workflow.mddocumentation-index.mdorchestration-engine.mdscripts/crawl-console.jsworkflow-coordinator.mdworkflow-patterns.mdworkflows/admin-create-users.mdworkflows/admin-manage-api-tokens.mdworkflows/admin-manage-credentials.mdworkflows/admin-manage-quotas.mdworkflows/dns-loadbalancer-create-failover.mdworkflows/dns-loadbalancer-create-geolocation.mdworkflows/dns-zone-create.mdworkflows/http-loadbalancer-add-api-protection.mdworkflows/http-loadbalancer-add-bot-defense.mdExpert in automating F5 Distributed Cloud web console operations through browser automation using the mcp__claude-in-chrome MCP tools.
This skill uses the mcp__claude-in-chrome__* MCP tools which integrate with the Claude in Chrome browser extension. These tools provide:
| Tool | Purpose |
|---|---|
mcp__claude-in-chrome__tabs_context_mcp | Get browser tab context |
mcp__claude-in-chrome__navigate | Navigate to URLs |
mcp__claude-in-chrome__read_page | Read page elements and structure |
mcp__claude-in-chrome__computer | Click, type, screenshot, scroll |
mcp__claude-in-chrome__find | Find elements by description |
mcp__claude-in-chrome__form_input | Fill form fields |
mcp__claude-in-chrome__get_page_text | Extract page text content |
Before using this skill, ensure you have:
Install from Chrome Web Store and verify connection:
# Visit Chrome Web Store and install "Claude in Chrome" extension
# Pin the extension to your toolbar for easy access
# Then verify the connection works:
claude --chrome
# In the Claude Code prompt, run:
/chrome
# You should see the connection status and options to enable by default
Set these environment variables for CLI-based verification:
export F5XC_API_URL="https://nferreira.staging.volterra.us"
export F5XC_API_TOKEN='2SiwIzdXcUTV9Kk/wURCJO+NPV8='
You should already be logged into the F5 XC tenant in your Chrome browser. The skill leverages your existing session and handles authentication automatically if session expires.
This skill automatically detects and handles multiple authentication methods:
| Auth Type | URL Pattern | Claude Can Automate? |
|---|---|---|
| Native U/P | login*.volterra.us | ❌ User enters creds |
| Azure SSO | login.microsoftonline.com | ⚠️ Only if cached |
| Google SSO | accounts.google.com | ⚠️ Only if cached |
| Okta SSO | *.okta.com | ⚠️ Only if cached |
| Generic SAML | /saml/, /sso/ | ⚠️ Only if cached |
| Already Logged In | /web/workspaces/ | ✅ Yes |
| Connection Failed | timeout/error | ❌ Warn about VPN |
The skill detects login requirements when:
login*.volterra.us, login.microsoftonline.com, accounts.google.com, *.okta.com)1. Navigate to F5 XC tenant URL
2. Wait for page load (detect connection failures → warn about VPN)
3. Check URL and page content using mcp__claude-in-chrome__read_page
4. Identify authentication type:
a. Native login → Inform user to enter credentials, wait
b. SSO redirect → Find SSO button, click, wait for provider
c. Already logged in → Skip to step 6
5. Handle SSO provider:
- If cached session → auto-redirect back
- If credentials needed → inform user, wait for confirmation
6. Verify F5 XC console loaded (look for workspace cards)
7. Continue with original navigation task
/xc:console login https://nferreira.staging.volterra.us/ and navigate to WAAP
# Claude will:
# 1. Get browser context with tabs_context_mcp
# 2. Navigate to tenant URL
# 3. Detect auth type (native, SSO, or already logged in)
# 4. Handle accordingly (inform user or auto-complete)
# 5. Navigate to Web App and API Protection workspace
# 6. Take screenshot to confirm
See ./authentication-flows.md for detailed workflow steps.
# Launch Claude Code with Chrome integration
claude --chrome
# Then provide natural language instructions:
"Navigate to https://nferreira.staging.volterra.us and tell me what you see on the home page"
# Claude will:
# 1. Navigate to the URL
# 2. Wait for page to load
# 3. Take a screenshot
# 4. Describe what it sees
claude --chrome
"Navigate to the HTTP Load Balancers page at https://nferreira.staging.volterra.us.
Then click the 'Add HTTP Load Balancer' button.
Fill in the form with:
- Name: my-test-lb
- Namespace: production
- Domains: test.example.com
But stop before submitting - I want to review first."
claude --chrome
"Navigate to the HTTP Load Balancers list page.
Extract all load balancer names, their namespaces, and domains.
Save the results as a JSON array."
claude --chrome
"I want to create an HTTP load balancer in F5 XC.
Please:
1. Navigate to https://nferreira.staging.volterra.us
2. Find and click the 'HTTP Load Balancers' page
3. Click 'Add HTTP Load Balancer' button
4. Fill in:
- Name: demo-lb
- Namespace: production
- Domains: demo.example.com
- Protocol: HTTPS with Automatic Certificate
5. Look for an 'Origin Pool' field and let me know what options are available
Don't submit yet - just show me the form filled in."
claude --chrome
"Help me inventory the F5 Distributed Cloud console.
Navigate to https://nferreira.staging.volterra.us and:
1. Look at the main left sidebar menu
2. For each top-level menu item, tell me:
- The menu item name
- Any submenus
- What page appears when clicked
Take screenshots of key pages so I can see the structure.
Organize the results as a hierarchical list."
# First, use the console to create something
claude --chrome
"Navigate to HTTP Load Balancers page and create a new LB named 'cli-test' in 'default' namespace.
Don't submit yet - just tell me the form is ready."
# Then verify with CLI
f5xcctl configuration list http_loadbalancer -n default
# You should see the newly created resource in the list
claude --chrome
"Navigate to the HTTP Load Balancers creation form and take a screenshot.
Save it so I can see the exact form layout and field names."
When Claude encounters a login page, CAPTCHA, or other security challenge:
claude --chrome
"Try to navigate to https://nferreira.staging.volterra.us"
# If you get: "I see a login page. Azure SSO button is visible."
# You manually click the SSO button or provide credentials in your browser
# Then tell Claude: "I've logged in, continue with the task"
claude --chrome
"Navigate to the HTTP Load Balancers list page.
For each load balancer shown, extract:
- Name
- Namespace
- Status
- Created date (if visible)
Format as a JSON array and save to lb-list.json"
| File | Purpose |
|---|---|
SKILL.md | This file - skill overview and instructions |
authentication-flows.md | Multi-provider authentication handling (Azure, Google, Okta, SAML, native, VPN) |
console-navigation-metadata.json | v2.2 metadata with stable selectors (data-testid, aria-label, text_match, css) |
url-sitemap.json | Static/dynamic route mapping with workspace aliases and shortcuts |
crawl-workflow.md | v2.2 crawl phases including selector and URL extraction |
scripts/crawl-console.js | Crawler spec with extraction scripts and templates |
task-workflows.md | Master index of task automation patterns |
documentation-index.md | Indexed docs.cloud.f5.com knowledge base |
workflows/*.md | Specific task workflows (HTTP LB, origin pools, WAF, etc.) |
This skill is designed to work alongside official F5 XC documentation:
documentation-index.md for links to docs.cloud.f5.comconsole-navigation-metadata.json for detailed form field informationworkflows/ directory for step-by-step task guidesThis skill works seamlessly with:
Use f5xcctl to validate console actions:
# After creating something in the console:
f5xcctl configuration get http_loadbalancer demo-lb -n production
# Compare what the console shows vs what the API returns
Use Terraform to deploy the same resources as code:
# The console skill helps you:
# 1. Understand the UI workflow
# 2. See all available options
# 3. Learn the resource structure
# Then use f5xc-terraform to automate it
# Instead of asking Claude to do everything in one go:
# ❌ "Create a complete load balancer with origin pool, health checks, and WAF policy"
# ✅ Do this in phases:
claude --chrome
# Phase 1: "Create origin pool named backend-pool"
# Phase 2: "Create HTTP LB named my-app pointing to backend-pool"
# Phase 3: "Add WAF policy to my-app LB"
claude --chrome
"Take screenshots of these pages and save them:
1. HTTP Load Balancers list page
2. HTTP Load Balancer creation form
3. Origin Pool creation form
I want to see the exact layout and field names."
# After using console:
f5xcctl configuration list http_loadbalancer --all-namespaces --output-format json
# Compare with what console showed to ensure consistency
# ❌ Too vague:
# "Create a load balancer"
# ✅ Specific:
# "Create HTTP load balancer named demo-lb in namespace 'production'
# with domain example.com pointing to origin pool backend-pool.
# Use HTTPS with automatic certificate."
# 1. Verify extension is installed:
echo "Check Chrome Web Store for 'Claude in Chrome'"
# 2. Verify connection:
claude --chrome
/chrome
# 3. If not connected, reload the extension:
# - Go to chrome://extensions
# - Find "Claude in Chrome"
# - Click the reload icon
When Claude detects session expiry:
# Claude will identify the authentication type:
# - Native login (username/password): You'll be asked to enter credentials
# - SSO (Azure, Google, Okta): Claude attempts auto-login if cached
# - Connection timeout: Claude warns about VPN requirement
# After authenticating, tell Claude to continue
# Claude will describe what it sees
# Ask Claude to:
# 1. Take a screenshot
# 2. Describe all visible input fields
# 3. Look for the field by label text or placeholder
"Take a screenshot of the form.
Then find and fill the field labeled 'Domain' with 'example.com'."
The console UI may change. If Claude can't find expected buttons:
# Claude will explore and find the new location
"The button location seems to have changed.
Explore the page and find the 'Create' or 'Add' button, then click it."
This skill operates within your existing Chrome browser session, so:
For sensitive operations:
claude --chrome
"I notice you took a wrong turn. Let me help.
Take a screenshot and describe what page you're on.
Then tell me what button or link you see that matches 'HTTP Load Balancers'."
claude --chrome
"Navigate to the form page and analyze its structure.
For each form field, tell me:
- The label text
- The input type (text, select, checkbox, etc.)
- Whether it's required
- Any visible validation hints"
claude --chrome
"Walk me through the steps to create an HTTP load balancer from scratch.
Assume I have:
- A namespace named 'production'
- An origin pool named 'backend-pool'
Show me each page I'd need to visit and what I'd fill in."
This skill uses pre-crawled metadata for deterministic browser automation. The plugin ships with pre-crawled metadata that works out of the box. Crawling is optional - use it to refresh stale data or update after F5 XC console UI changes.
The v2.2 metadata includes stable selectors that work across browser sessions, not just session-specific refs:
| Priority | Selector Type | Reliability | Example |
|---|---|---|---|
| 1 | data_testid | Highest | [data-testid="add-lb-btn"] |
| 2 | aria_label | High | [aria-label="Add Load Balancer"] |
| 3 | text_match | Medium | Button containing "Add HTTP Load Balancer" |
| 4 | css | Medium | .workspace-card:has-text('Web App') |
| 5 | ref | Session-only | ref_27 (requires fresh crawl) |
Before v2.2 (Session-Specific Refs):
Claude: Uses ref_27 from metadata
Risk: Refs change between browser sessions
Result: ~70% success rate
After v2.2 (Stable Selectors):
Claude: Uses data_testid > aria_label > text_match fallback
Uses: mcp__claude-in-chrome__find with stable selector
Result: ~95% success rate across sessions
Each element now includes both refs and stable selectors:
{
"add_button": {
"ref": "ref_27",
"text": "Add HTTP Load Balancer",
"selectors": {
"data_testid": null,
"aria_label": "Add HTTP Load Balancer",
"text_match": "Add HTTP Load Balancer",
"css": "button:has-text('Add HTTP Load Balancer')"
}
}
}
The url-sitemap.json file provides complete route mapping:
/web/home, /web/workspaces/.../namespaces/{namespace}/...waap → /web/workspaces/web-app-and-api-protection)http-lb → full path with namespace variable)When navigating, Claude uses this priority:
data_testid selector (most stable)aria_label selectortext_match with find()css selectorref (may be stale)To refresh the metadata (optional):
/xc:console crawl https://nferreira.staging.volterra.us/
See crawl-workflow.md for the detailed crawl process.
Metadata v2.2.0:
crawl-workflow.md v2.2)url-sitemap.json)Run Initial Crawl
/xc:console crawl https://your-tenant.volterra.us/
Populate selectors for all elements across workspaces.
Validate Cross-Session Navigation Test deterministic navigation without refs (selectors only).
Validate with CLI
f5xcctl configuration list http_loadbalancer --all-namespaces
For detailed API-driven management: See the f5xc-cli and f5xc-terraform skills.
For console documentation mapping: See documentation-index.md (coming soon).
For specific task workflows: See workflows/ directory (coming soon).