vmware-avi
Manage VMware AVI/NSX Advanced Load Balancer and AKO Kubernetes operations with 28 tools: read-only inspection plus guarded writes that preview blast radius before applying.
Virtual Services: list VSes, inspect one VS’s VIP/pool/health/connections/throughput, enable or disable it with confirmation.
Pools and members: discover pools, list pool members, enable a member, or gracefully drain/disable one with confirmation.
SSL certificates: list certificates and check which expire within N days.
Analytics and logs: view last-hour L4/L7 VS metrics and recent request error logs.
Service Engines: list SEs with management IP/status/SE group, and check SE health plus hosted VS counts.
AKO pods: check AKO status, fetch logs, show version, and restart AKO with confirmation.
AKO Helm config: show current values, diff pending chart changes, and upgrade with dry-run/blast-radius preview.
Ingress diagnostics: list Ingresses, validate a namespace’s Ingress annotations/TLS/class, and diagnose why an Ingress has no VS.
Sync diagnostics: compare K8s Ingress and Controller VS counts, list suspected drift, and force AKO resync with confirmation.
Multi-cluster: list kube contexts and whether AKO is deployed, and check AMKO GSLB status.
Enables AKO (Avi Kubernetes Operator) operations on Kubernetes clusters, including pod status, logs, restart, Helm config, ingress diagnostics, sync diagnostics, and multi-cluster management.
Allows management of VMware AVI (NSX Advanced Load Balancer) controllers, including virtual services, pool members, SSL certificates, analytics, service engines, and AKO (Avi Kubernetes Operator) operations.
VMware AVI
English | 中文
Maintainer: Wei Zhou · zhouwei008@gmail.com
Community-maintained open-source project; not an official VMware or Broadcom product.
Overview · Quick Start · MCP Configuration · Capabilities and Workflows · Safety and Audit · Troubleshooting · Companion Skills · Reference · License
Overview
Runs locally over stdio by default; configure required targets and credentials on your own machine.
MCP 2.5 migration: replace the removed confirmed / dry_run tool arguments with confirm=true for execution; omitting confirm previews. Old arguments are rejected without a write. CLI dry-run options are unchanged.
AVI (NSX Advanced Load Balancer) management and AKO Kubernetes operations tool — 28 tools across 10 categories.
Dual mode: Traditional AVI Controller management + AKO K8s operations in one skill.
Companion skills handle everything else:
Skill
Scope
Install
VM lifecycle, deployment, guest ops, cluster
uv tool install vmware-aiopsRead-only: inventory, health, alarms, events
uv tool install vmware-monitorDatastores, iSCSI, vSAN management
uv tool install vmware-storageTanzu Namespaces, TKC cluster lifecycle
uv tool install vmware-vksNSX networking: segments, gateways, NAT
uv tool install vmware-nsx-mgmtDFW firewall rules, security groups
uv tool install vmware-nsx-securityAria Ops: metrics, alerts, capacity
uv tool install vmware-aria
Container examples build a local version-tagged image and run it with --pull=never, avoiding registry fallback. A local version tag is not an immutable image digest.
Keep TLS verification enabled and trust private CAs with SSL_CERT_FILE. Disabling certificate/hostname checks is an isolated-lab exception and permits endpoint impersonation and credential interception.
Full agent instructions: skills/vmware-avi/SKILL.md.
Related MCP server: vSphere-MCP-Pro
Quick Start
Requires Python >=3.10 and uv.
uv tool install vmware-avi==2.5.1
vmware-avi --helpTarget, credential and local data setup: setup guide.
Quick Install
# Via uv (recommended)
uv tool install vmware-avi==2.5.1
# Or via pip
pip install vmware-avi==2.5.1
# China mainland mirror
pip install vmware-avi==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
# Verify installation
vmware-avi doctorOffline / Air-Gapped Install (from source)
This project uses the modern PEP 517 build system (hatchling), so there is no
setup.py by design — that is expected, not a missing file. If you cloned the
source and hit ERROR: File "setup.py" or "setup.cfg" not found ... editable mode currently requires a setuptools-based build, your pip is older than 21.3 and
cannot do an editable (-e) install with a non-setuptools backend. Editable
mode is a developer convenience, not needed to run the tool — do one of:
# From the source tree — a normal (non-editable) install builds a wheel:
pip install . # NOT pip install -e .
# ...or upgrade pip first, and editable works too:
pip install --upgrade pip && pip install -e .For a truly air-gapped host, build the wheels on a connected machine and copy them over — the target then needs no network:
# On a connected machine, collect this package + its dependencies as wheels:
pip wheel . -w dist # → dist/*.whl (or: uv build, for just this package)
# Copy dist/ to the air-gapped host, then install offline:
pip install --no-index --find-links dist vmware-aviConfiguration
Step 1: Create Config Directory
mkdir -p ~/.vmware-avi
vmware-avi init # generates config.yaml and .env templates
chmod 600 ~/.vmware-avi/.envStep 2: Edit config.yaml
controllers:
- name: prod-avi
host: avi-controller.example.com
username: admin
api_version: "22.1.4"
tenant: admin
port: 443
verify_ssl: true
default_controller: prod-avi
ako:
kubeconfig: ~/.kube/config
default_context: ""
namespace: avi-systemStep 3: Set Passwords
Create ~/.vmware-avi/.env:
# AVI Controller passwords
# Format: {CONTROLLER_NAME_UPPER}_PASSWORD
PROD_AVI_PASSWORD=your-password-herePassword environment variable naming convention:
{CONTROLLER_NAME_UPPER}_PASSWORD
# Replace hyphens with underscores, UPPERCASE
# Example: controller "prod-avi" -> PROD_AVI_PASSWORD
# Example: controller "staging-alb" -> STAGING_ALB_PASSWORDStep 4: Verify
vmware-avi doctor # checks Controller connectivity + kubeconfig + avisdkMCP Configuration
Copy this configuration into your MCP client's local stdio settings. The client must be able to find uvx; the initial package installation requires access to a package index.
{
"mcpServers": {
"vmware-avi": {
"command": "uvx",
"args": ["--from", "vmware-avi==2.5.1", "vmware-avi-mcp"],
"env": {
"VMWARE_AVI_CONFIG": "~/.vmware-avi/config.yaml"
}
}
}
}The following sections retain preinstalled CLI alternatives and product-specific MCP options.
MCP Server
The MCP server exposes all 28 tools via the Model Context Protocol. Works with any MCP-compatible client.
After uv tool install vmware-avi==2.5.1, start the MCP server with one command (v1.5.15+):
# Recommended — single command, no network re-resolve
vmware-avi mcp
# With custom config path
VMWARE_AVI_CONFIG=/path/to/config.yaml vmware-avi mcpClaude Desktop Config
Add to claude_desktop_config.json:
{
"mcpServers": {
"vmware-avi": {
"command": "vmware-avi",
"args": ["mcp"],
"env": {
"VMWARE_AVI_CONFIG": "~/.vmware-avi/config.yaml"
}
}
}
}# Run without installing (requires PyPI access each launch)
uvx --from vmware-avi==2.5.1 vmware-avi mcp
# Legacy entry point (still works, kept for backward compatibility)
vmware-avi-mcpBehind a corporate TLS proxy? uvx may fail with
invalid peer certificate: UnknownIssuer. Use the recommendedvmware-avi mcpform above (no network needed), or setUV_NATIVE_TLS=true.
MCP Tools (28)
Category | Tools |
Virtual Service (3) |
|
Pool Member (4) |
|
SSL Certificate (2) |
|
Analytics (2) |
|
Service Engine (2) |
|
AKO Pod (4) |
|
AKO Config (3) |
|
Ingress Diagnostics (3) |
|
Sync Diagnostics (3) |
|
Multi-cluster (2) |
|
Capabilities and Workflows
Capabilities Overview
What This Skill Does
Category | Tools | Count |
Virtual Service | list, status, enable/disable | 3 |
Pool Member | pool discovery, member list, enable/disable member (drain/restore traffic) | 4 |
SSL Certificate | list, expiry check | 2 |
Analytics | VS metrics overview, request error logs | 2 |
Service Engine | list, health check | 2 |
AKO Pod Ops | status, logs, restart, version info | 4 |
AKO Config | values.yaml view, Helm diff, Helm upgrade | 3 |
Ingress Diagnostics | annotation validation, VS mapping, error diagnosis, fix recommendation | 4 |
Sync Diagnostics | K8s-Controller comparison, inconsistency list, force resync | 3 |
Multi-cluster | cluster list, cross-cluster AKO overview, AMKO status | 3 |
CLI vs MCP: Which Mode to Use
Scenario | Recommended | Why |
Local/small models (Ollama, Qwen) | CLI | ~2K tokens vs ~8K for MCP |
Cloud models (Claude, GPT-4o) | Either | MCP gives structured JSON I/O |
Automated pipelines | MCP | Type-safe parameters, structured output |
AKO troubleshooting | CLI | Interactive log tailing, Helm diff output |
Rule of thumb: Use CLI for cost efficiency and small models. Use MCP for structured automation with large models.
Architecture
User (Natural Language)
|
AI CLI Tool (Claude Code / Gemini / Codex / Cursor / Trae)
| reads SKILL.md
|
vmware-avi CLI
|--- avisdk (AVI REST API) ---> AVI Controller ---> Virtual Services / Pools / SEs
|--- kubectl / kubernetes ---> K8s Cluster ---> AKO Pods / Ingress / ServicesCLI Usage
Virtual Service Management
# List all virtual services
vmware-avi vs list [--controller prod-avi]
# Check status of a specific VS
vmware-avi vs status my-webapp-vs
# Enable / disable a VS (disable requires double confirmation)
vmware-avi vs enable my-webapp-vs
vmware-avi vs disable my-webapp-vsPool Member Drain / Restore
# List pool members and health status
vmware-avi pool members my-pool
# Graceful drain (disable) — double confirmation required
vmware-avi pool disable my-pool 10.1.1.5
# Restore traffic (enable)
vmware-avi pool enable my-pool 10.1.1.5SSL Certificate Expiry Check
# List all certificates
vmware-avi ssl list
# Check certificates expiring within 30 days
vmware-avi ssl expiry --days 30Analytics and Error Logs
# VS analytics: throughput, latency, error rates
vmware-avi analytics my-webapp-vs
# Request error logs
vmware-avi logs my-webapp-vs --since 1hService Engine Health
# Name, mgmt IP, operational status, SE group — status sourced from the
# serviceengine-inventory endpoint (config + runtime merged)
vmware-avi se list
# Per-SE operational status + connected-VS counts
vmware-avi se healthAKO Troubleshooting
# Check AKO pod status
vmware-avi ako status [--context my-k8s-context]
# View AKO logs
vmware-avi ako logs [--tail 100] [--since 30m]
# Restart AKO pod (double confirmation)
vmware-avi ako restart
# Show AKO version
vmware-avi ako versionAKO Helm Config Management
The AKO Helm release is discovered automatically (official installs use
helm install --generate-name, so the release is not named ako). Upgrades pull
the official Broadcom OCI chart
oci://projects.packages.broadcom.com/ako/helm-charts/ako with --reuse-values.
# View current AKO Helm values (release auto-discovered)
vmware-avi ako config show
# Show pending changes (diff against the official OCI chart)
vmware-avi ako config diff
# Helm upgrade (double confirmation + --dry-run default)
vmware-avi ako config upgradeIngress Diagnostics
# Validate Ingress annotations
vmware-avi ako ingress check <namespace>
# Show Ingress-to-VS mapping
vmware-avi ako ingress map
# Diagnose why an Ingress has no VS
vmware-avi ako ingress diagnose <ingress-name>Sync Diagnostics
# Check K8s-Controller sync status
vmware-avi ako sync status
# Show inconsistencies between K8s and Controller
vmware-avi ako sync diff
# Force AKO resync (double confirmation)
vmware-avi ako sync forceMulti-cluster AKO
# List every kube-context and whether AKO runs there
vmware-avi ako clusters
# Cross-cluster AKO status overview
vmware-avi ako cluster-overview
# AMKO GSLB status
vmware-avi ako amko statusCommon Workflows
1. Maintenance Window -- Drain a Pool Member
When taking a backend server offline for patching:
List pool members and health status
vmware-avi pool members my-poolDisable the target server (graceful drain)
vmware-avi pool disable my-pool 10.1.1.5Monitor analytics to confirm active connections are draining
vmware-avi analytics my-vsPerform maintenance on the server
Re-enable the server
vmware-avi pool enable my-pool 10.1.1.5Verify health status is green
vmware-avi pool members my-pool
2. AKO Ingress Not Creating VS
When a developer reports their Ingress is not producing a Virtual Service:
Verify AKO is running
vmware-avi ako statusValidate Ingress annotations
vmware-avi ako ingress check <namespace>Check sync status between K8s and Controller
vmware-avi ako sync statusIf annotations are wrong, diagnose the specific Ingress
vmware-avi ako ingress diagnose <ingress-name>If sync drift is detected, review the diff and force resync if needed
vmware-avi ako sync diff vmware-avi ako sync force
3. SSL Certificate Expiry Audit
Expired certificates cause outages. Run periodic checks:
Check all certificates expiring within 30 days
vmware-avi ssl expiry --days 30Review which VS uses each expiring certificate (output includes VS mapping)
Plan renewal with the certificate team
After renewal, verify the new certificate is in place
vmware-avi ssl list
Safety and Audit
Safety Features
Feature | Details |
Double Confirmation | Destructive ops (VS disable, pool member disable, AKO restart, Helm upgrade, force resync) require 2 sequential confirmations |
Dry-Run Default |
|
MCP Blast Radius |
|
Audit Trail | All operations logged to |
Password Protection |
|
SSL Support |
|
Prompt Injection Protection | All API-sourced text truncated (500 chars max) and C0/C1 control characters stripped |
Input Validation | Pool names, VS names, IP addresses, and namespace names validated before API calls |
Security Details
Source Code: github.com/vmware-skills/VMware-AVI
Config File Contents:
config.yamlstores controller addresses, usernames, and AKO settings. No passwords or tokens. All secrets stored exclusively in.envWebhook Data Scope: Disabled by default. No third-party data transmission
TLS Verification: Enabled by default. Disable only for self-signed certificate environments
Prompt Injection Protection:
_sanitize()truncation + control character cleanup on all AVI API responsesLeast Privilege: Use a dedicated AVI service account with minimal permissions. AKO operations require only namespace-scoped kubeconfig access
Remote access (HTTPS) and limiting tools
By default vmware-avi mcp speaks stdio to one local client and offers every tool. Two options change that
(vmware-policy ≥ 1.21.0).
Serve over HTTPS so clients on other machines can connect. Every caller needs a bearer token:
vmware-audit token create alice # prints the token once; give it to alice
vmware-audit token list # names only
vmware-audit token revoke alice # refused from its next request, no restart
vmware-avi mcp --transport https --host 0.0.0.0 --port 8443 \
--cert /etc/vmware-mcp/server.pem --key /etc/vmware-mcp/server-key.pem \
--public-name mcp.example.comConnect a client (Claude Code shown; any MCP client that supports streamable HTTP and custom headers works):
claude mcp add --transport http vmware-avi https://mcp.example.com:8443/mcp \
--header "Authorization: Bearer $VMWARE_MCP_TOKEN"{
"mcpServers": {
"vmware-avi": {
"type": "http",
"url": "https://mcp.example.com:8443/mcp",
"headers": { "Authorization": "Bearer ${VMWARE_MCP_TOKEN}" }
}
}
}The server will not start without a token, refuses Host/Origin values outside
--public-name, and checks before it binds that unauthenticated requests get 401. Use a certificate your clients trust for those names.Behind a TLS-terminating reverse proxy on the same machine use
--transport http --host 127.0.0.1 --public-name mcp.example.comand pass theAuthorizationheader through.Behind a load balancer or gateway on another machine, keep
--transport https(a self-signed certificate is fine), list in--public-namethe host name the balancer sends asHost, and have it forwardAuthorization. Its health probe can useGET /healthz, which needs no token and returns only{"status": "ok"}(vmware-policy ≥ 1.23.0).Send
traceparentorX-Request-IDwith each request to have it stored on the audit row;vmware-audit log --correlation-id IDthen finds the calls behind one platform request.The audit log records each caller as
token:<name>. Calls run side by side: each holds its own session to a Controller (or Kubernetes context), up toVMWARE_MCP_POOL_SIZE(default 2) sessions per target. Each Controller session is a login on the Controller; a call waits at most 300 s for a free one.Everyone who can reach the endpoint acts with this server's account. Tokens identify callers; they grant nothing on the platform. Run one endpoint per privilege level.
Several people or roles on one endpoint: run
vmware-audit roles enableonce, then give each token a role (vmware-audit token create NAME --role reader, or a role inroles.yamlnaming tools and targets; vmware-policy ≥ 1.24.0). A role limits what the token may call on this endpoint; it cannot grant more than the account has. See vmware-policy's README, "Roles for network callers".
Offer only read tools, plus the writes you choose:
vmware-avi mcp --expose read --allow-write disable_lb_pool_member
# or: VMWARE_AVI_MCP_EXPOSE=read VMWARE_AVI_MCP_ALLOW_WRITE=disable_lb_pool_member vmware-avi mcpTools not offered do not appear in the client's tool list. A bad value or an unknown write tool stops the server (exit 2). This limits what clients are offered; it is not authorization, so the account itself should be least-privilege.
Details: skills/vmware-avi/references/setup-guide.md ("Serving MCP over HTTPS", "Limiting which tools are offered").
Troubleshooting
Troubleshooting
"Controller unreachable" error
Run
vmware-avi doctorto verify connectivityCheck if the controller address and port are correct in
~/.vmware-avi/config.yamlFor self-signed certs: set
verify_ssl: falsein config.yaml (lab environments only)
AKO Pod in CrashLoopBackOff
Check logs:
vmware-avi ako logs --tail 50Common causes: wrong controller IP in values.yaml, network policy blocking AKO to Controller, expired credentials
Fix config:
vmware-avi ako config showto inspect, thenvmware-avi ako config upgradewith corrected values (release auto-discovered; pulls the official Broadcom OCI chart)
Ingress created but no VS on Controller
Validate annotations:
vmware-avi ako ingress check <namespace>Check AKO logs for rejection reason:
vmware-avi ako logs --since 5mRun sync diff:
vmware-avi ako sync diffto see if the object is stuck
Pool member shows "down" after enable
Health monitor may still be failing. The member is enabled but unhealthy. Check the actual health status on the Controller side. Fix the backend service first, then the health status will auto-recover.
SSL expiry check shows 0 certificates
Verify the controller connection has tenant-level access. Certificates are tenant-scoped in AVI. The configured user may only see certs in their tenant.
AKO sync force has no effect
Force resync triggers AKO to re-reconcile all K8s objects. If the drift persists, the issue is likely in the K8s resource definition itself (bad annotation, missing secret). Use vmware-avi ako ingress diagnose to pinpoint the root cause.
Troubleshooting & Contributing
If you encounter any errors or issues, please send the error message, logs, or screenshots to zhouwei008@gmail.com. Contributions are welcome -- feel free to join us in maintaining and improving this project!
Companion Skills
The VMware Skills family contains 14 MCP servers and the shared Policy library. Choose tools by responsibility: vmware-skills.
Companion Skills
Skill | Scope | Tools | Install |
AVI load balancer, AKO K8s operations | 28 |
| |
VM lifecycle, deployment, guest ops, cluster | 49 |
| |
Read-only monitoring, alarms, events | 27 |
| |
Datastores, iSCSI, vSAN | 11 |
| |
Tanzu Namespaces, TKC cluster lifecycle | 20 |
| |
NSX segments, gateways, NAT, routing | 33 |
| |
DFW firewall, security groups, IDS/IPS | 21 |
| |
Aria Ops: metrics, alerts, capacity | 28 |
| |
Compliance baselines, drift detection | 6 |
|
Reference
Release history: RELEASE_NOTES.md.
Read-only self-test with your own model and agent host: model-fit self-test.
Upgrading to 2.0
2.0 renames all 28 MCP tools so every name starts with a verb (e.g. ako_amko_status → get_ako_amko_status, ako_clusters → list_ako_clusters, ako_config_diff → diff_ako_config). The full old → new table is in
RELEASE_NOTES.md. Nothing else changes: same tools, parameters,
safety gates and CLI commands. If an agent prompt, script or ~/.vmware/rules.yaml names a tool, update it — though deny
rules written with the old names keep working with vmware-policy ≥ 1.18 (vmware-audit policy lists any rule the
renames widened), and vmware-pilot ≥ 1.13 translates old names in saved workflows.
If an install older than 2.0 shares that rules.yaml, give it vmware-policy ≥ 1.18.2 too: it matches each rule
against both the old and the new name, so one file serves both.
Version Compatibility
AVI Controller / Environment | Support | Notes |
AVI 30.x in VCF 9.1 | ✅ Full | avisdk 30.x line covers VCF 9.1 bundle |
AVI 30.x in VCF 9.0 | ✅ Full | Standard AVI / NSX ALB integration |
AVI 22.x — 31.x standalone | ✅ Full | Pin |
AKO 1.10+ | ✅ Full | Kubernetes integration via AKO ConfigMap / GatewayClass |
Official Broadcom References
SDKs: https://developer.broadcom.com/sdks — VCF Python SDK
REST APIs: https://developer.broadcom.com/xapis — AVI Controller REST API
CLI Tools: https://developer.broadcom.com/tools — VCF PowerCLI 9.1
License
MIT
Available Tools
28 toolscheck_ako_ingressARead-onlyIdempotent
[READ] Validate every Ingress in one namespace: IngressClass and TLS secret references that would stop AKO creating a Virtual Service.
Returns name, IngressClass, issues and OK/ISSUES per Ingress. Run list_ako_ingresses first for namespace names; use diagnose_ako_ingress instead for one named Ingress. Covers one namespace only, and TLS checks are skipped when its secrets cannot be listed.
Inputs: namespace (required), context. Returns: result
check_ssl_cert_expiryARead-onlyIdempotent
[READ] Check which SSL certificates expire within N days (default 30).
Returns name, expiry date and days remaining, soonest first. Use this instead of list_ssl_certs when you only want certificates near expiry. Expired certs are included, with negative days remaining. Certificates whose expiry could not be read are counted and named separately — they are unknown, not "not expiring".
Inputs: days. Returns: result
diagnose_ako_ingressARead-onlyIdempotent
[READ] Diagnose why one Ingress has no corresponding AVI Virtual Service.
Validates IngressClass ('avi'/'avi-lb'), TLS secrets and backend Services. Returns annotations, a numbered issue list and kubectl fixes. "Not found"/"missing" is reported only for a 404; any other error reading the Ingress, a TLS secret or a backend Service says it could not be read (with the HTTP status). Use list_ako_ingresses first to find Ingresses lacking a VS. Checks configuration only; when it is clean, try get_ako_logs and get_ako_sync_status.
Inputs: name (required), context, namespace. Returns: result
diff_ako_configARead-onlyIdempotent
[READ] Pending Helm value changes that have not been applied yet.
Returns helm's diff output; empty means nothing would change. Credential
values in it read <redacted> — that is this skill blanking them, not the
configured value.
Use this before upgrade_ako_config — it runs the same command, so the
preview is real. Note: with chart_version empty the registry's moving latest
is resolved, so two runs can differ with no local change; read get_ako_version
and pass it to both.
Inputs: chart_version. Returns: result
diff_ako_syncARead-onlyIdempotent
[READ] List Ingresses with no matching Virtual Service or pool on the Controller.
Returns Type, namespace/name and Status per suspect Ingress. Use when get_ako_sync_status reports a mismatch; force_ako_sync reconciles. Shard-mode Ingresses are matched heuristically against AKO pool names, so confirm a 'Missing' result with list_lb_pools before acting.
Inputs: context. Returns: result
disable_lb_pool_memberADestructive
[WRITE] Disable a pool member with graceful drain — existing connections complete, no new traffic.
Without confirm=True this only previews: it returns blast_radius (pool name and uuid, the member's IP/port/state, and how many members are enabled before and after) and changes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen what it changes yet. An already disabled member returns action "noop".
Refused with confirm=True: the pool's only enabled member (the pool would serve nothing — enable another first, or use set_virtual_service_enabled on purpose), an IP that matches more than one member, and a pool whose members cannot be read. Use for maintenance or rolling deployments; run list_lb_pool_members first for the server IP, enable_lb_pool_member to reverse it.
Inputs: pool (required), server (required), confirm, confirmed.
enable_lb_pool_memberA
[WRITE] Enable a pool member so it receives traffic again.
Returns a one-line confirmation. Use list_lb_pool_members first to verify the server IP. The server must already belong to the pool — this adds nothing.
Inputs: pool (required), server (required). Returns: result
force_ako_syncADestructive
[WRITE] Force AKO to resync all K8s resources with the AVI Controller.
The resync restarts the AKO pod so it rebuilds every Virtual Service, pool and VS-VIP from the cluster's current resources. Without confirm=True this only previews: it returns blast_radius (context, namespace, the pod's name, uid and phase, and the Ingresses it re-programs) and changes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen what it changes yet.
Refused with confirm=True: a pod already terminating, and a pod or Ingress list that cannot be read. Use when drift is detected; may cause brief traffic disruption. Run diff_ako_sync first to see what is out of sync, then get_ako_sync_status.
Inputs: confirm, context, confirmed.
get_ako_amko_statusARead-onlyIdempotent
[READ] AMKO (AVI Multi-Cluster Kubernetes Operator) GSLB status.
Returns raw kubectl output: the AMKO pods in avi-system, then the GSLBConfig YAML if one exists. 'AMKO not deployed' means kubectl answered and found no AMKO pods; if kubectl cannot read the cluster the call fails with its reason. A GSLBConfig that cannot be read is reported, not skipped. Use this only for multi-cluster GSLB questions — for single-cluster AKO health use get_ako_status instead. Always reads the current kubectl context; see list_ako_clusters.
Inputs: no named parameters. Returns: result
get_ako_configARead-onlyIdempotent
[READ] The AKO Helm release's values — controller IP, cloud name, network settings, feature flags.
Returns YAML as helm reports it. Use this first to read the live config; use diff_ako_config instead to see what an upgrade would change. Only values supplied at install time appear; chart defaults do not.
Inputs: no named parameters. Returns: result
get_ako_logsARead-onlyIdempotent
[READ] AKO pod logs — Ingress creation failures, sync errors, Controller connectivity.
Returns raw log text, not a table. Use when get_ako_status shows the pod unhealthy or diff_ako_sync reports a missing Ingress. Only the running container's logs are returned.
Inputs: tail, since, context. Returns: result
get_ako_statusARead-onlyIdempotent
[READ] Check AKO (AVI Kubernetes Operator) pod status in Kubernetes.
Returns pod name, phase, ready flag, restart count and namespace. First step for Ingress or LoadBalancer issues in Tanzu/K8s; follow with get_ako_logs when it is not Running. Looks in one context's AKO namespace only — run list_ako_clusters if not found.
Inputs: context. Returns: result
get_ako_sync_statusARead-onlyIdempotent
[READ] Compare the number of K8s Ingresses with the number of AVI Virtual Services.
Returns both counts and a match/mismatch verdict. Use this first as a cheap check, then diff_ako_sync for which objects differ. A count comparison only — in AKO shard mode many Ingresses share one VS, so a mismatch does not by itself mean trouble.
Inputs: context. Returns: result
get_ako_versionARead-onlyIdempotent
[READ] AKO version running in a cluster, read from the pod's image tag.
Returns the pod name and an Image/Version pair per container. Use it to check compatibility with the Controller, and before diff_ako_config or upgrade_ako_config so both target the installed chart. The tag is the only source, so 'latest' reports 'latest', not a number.
Inputs: context. Returns: result
get_service_engine_healthARead-onlyIdempotent
[READ] Health of every Service Engine — operational status and VS counts.
Returns name, operational state and the number of VSes placed on each SE. Use when VS health degrades to check if the issue is at the SE level; list_service_engines gives the management IP and SE Group, get_virtual_service_status the affected VS. An SE hosting no VS reports 0, not an error.
Inputs: no named parameters. Returns: result
get_virtual_service_analyticsARead-onlyIdempotent
[READ] Performance metrics for one Virtual Service over the last hour.
Returns L4 (bandwidth, connections) and L7 (latency, % errors, responses) averages over a fixed window that cannot be changed (12 samples, 5 min apart). Empty output means no traffic, not an error. Use when get_virtual_service_status shows degraded health; get_virtual_service_error_logs gives per-request detail.
Inputs: vs_name (required). Returns: result
get_virtual_service_error_logsARead-onlyIdempotent
[READ] Recent request error logs for one Virtual Service.
Returns up to 50 lines — timestamp, HTTP status, URI path, client IP — for status 400 and above. Use this instead of get_virtual_service_analytics for per-request detail. An empty result may mean no errors, or capture disabled on the VS.
Inputs: vs_name (required), since. Returns: result
get_virtual_service_statusARead-onlyIdempotent
[READ] Detailed status for one Virtual Service: VIP, pool, health, connections, throughput.
Returns one detail block, not a list. Use list_virtual_services first for the exact name — a name that does not match exactly fails. If the runtime read fails, the block says so (with the HTTP status) and health is UNKNOWN. Then get_virtual_service_analytics for metrics, get_virtual_service_error_logs for 5xx.
Inputs: name (required). Returns: result
list_ako_clustersARead-onlyIdempotent
[READ] List every Kubernetes context in the active kubeconfig and whether AKO is deployed there.
Returns Context, AKO Status (pod phase, 'Not deployed' when kubectl answered with no AKO pods, or 'Unreachable'/'Unreadable' with kubectl's reason when it could not read the context — unknown, not absent) and Version per context. Fails when no context could be read. Requires kubectl on PATH; every context is probed, so unreachable clusters add latency. Start here for context names, then pass one to get_ako_status, get_ako_logs or diagnose_ako_ingress.
Inputs: no named parameters. Returns: result
list_ako_ingressesARead-onlyIdempotent
[READ] Inventory Kubernetes Ingresses across all namespaces.
Returns Namespace, Ingress name, Host(s) and IngressClass per Ingress. Start here for namespace and Ingress names, then pass them to check_ako_ingress or diagnose_ako_ingress. Lists the K8s side only — use diff_ako_sync for Ingresses with no Controller object.
Inputs: context. Returns: result
list_lb_pool_membersARead-onlyIdempotent
[READ] List the members of a pool.
Returns Server IP, Port, Enabled and Ratio per member. Use before enable_lb_pool_member or disable_lb_pool_member; run list_lb_pools first for the pool name. Reports configured state only, not live health-monitor results.
Inputs: pool (required). Returns: result
list_lb_poolsARead-onlyIdempotent
[READ] Discover pools on the Controller.
Returns Name, member count, Enabled and short UUID per pool. Use this before list_lb_pool_members: pools are often named differently from the VS that use them.
Inputs: vs_filter. Returns: result
list_service_enginesARead-onlyIdempotent
[READ] List Service Engines (AVI data-plane VMs) on the Controller.
Returns Name, management IP, status (e.g. OPER_UP) and SE Group per SE, in one call that cannot be paged or filtered. Use to inventory capacity or find an SE's name and IP — use get_service_engine_health instead for degraded VS health.
Inputs: no named parameters. Returns: result
list_ssl_certsARead-onlyIdempotent
[READ] List SSL/TLS certificates stored on the AVI Controller.
Returns Name, Subject, Expiry and Type per certificate, in one call that cannot be paged or filtered. Use for inventory or a certificate's exact name — use check_ssl_cert_expiry instead for only the ones expiring soon.
Inputs: no named parameters. Returns: result
list_virtual_servicesARead-onlyIdempotent
[READ] List Virtual Services on the AVI Controller.
Returns Name, Enabled, VIP and short UUID for every VS in one call; it cannot be paged or filtered, and carries no health score. Use this before drilling into one VS with get_virtual_service_status.
Inputs: controller. Returns: result
restart_akoADestructive
[WRITE] Restart the AKO pod by deleting it — its StatefulSet recreates it.
Without confirm=True this only previews: it returns blast_radius (context, namespace, the pod's name, uid, phase and restarts, and the Ingresses whose programming pauses until the new pod is Running) and changes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen what it changes yet. The pod deleted is the one measured (uid precondition).
Refused with confirm=True: a pod already terminating, and a pod or Ingress list that cannot be read. Use when AKO is stuck or after config changes; brief traffic disruption is possible. Run get_ako_status afterwards, and get_ako_logs if the pod is not Running.
Inputs: confirm, context, confirmed.
set_virtual_service_enabledADestructive
[WRITE] Enable or disable a Virtual Service. Disabling stops all traffic to it.
Without confirm=True this only previews: it returns blast_radius (the VS name and uuid, whether it is enabled now, its VIPs and oper status, and the pools and member counts behind it) and changes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen what it changes yet. A VS already in the requested state returns action "noop".
Refused with confirm=True: a VS whose uuid or pools cannot be read (the change would be blind). Use get_virtual_service_status first to check current state.
Inputs: name (required), enable (required), confirm, confirmed.
upgrade_ako_configA
[WRITE] Apply an AKO Helm upgrade to the avi-system release.
Finds the avi-system release automatically and upgrades the Broadcom OCI
chart with --reuse-values. Without confirm=True this only previews: it
returns blast_radius (release, the chart and app version it is on, revision
and status, the chart it would move to) plus helm_dry_run, the output of
helm upgrade --dry-run, and changes nothing. Show that to the user and get
their explicit decision. Do not set confirm=True on your own because the
user asked earlier: they have not seen what it changes yet.
Refused with confirm=True: a failing dry-run (the real upgrade would fail
too), a release with another helm operation pending, and a release whose
status cannot be read. Helm output has credential values blanked to
<redacted> by this skill. Run diff_ako_config first to review the change.
Inputs: confirm, dry_run, confirmed, chart_version.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Each tool targets a clearly distinct resource and action, and descriptions explicitly differentiate near-neighbors like get_ako_status vs get_ako_amko_status and check_ako_ingress vs diagnose_ako_ingress. Workflow cross-references make tool selection unambiguous.
All names use consistent snake_case with a leading verb (list_, get_, enable_, disable_, check_, diff_, etc.). Plural/singular variations follow resource conventions and remain predictable.
28 tools is heavy for a single server, though the surface spans two substantial domains (AVI Controller and AKO/Kubernetes). Several granular AKO config/sync/diagnose tools could be consolidated, but each currently earns a distinct role.
The surface thoroughly covers read/diagnose and safe write operations across virtual services, pools, service engines, certificates, and AKO. However, it lacks create/delete/update for core AVI objects, which is a minor gap for an operations-focused toolkit.
Maintenance
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Hosted MCP catalog with 30 tenant-isolated browser, RAG, AI, mail and media tools.
One OAuth connector for your team's remote MCP servers, with Tool Packs, guardrails and logs.
One MCP endpoint for your company's tools, with per-person sign-in, policy and audit.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides MCP multi-cluster Kubernetes management and operations, featuring a management interface, logging, and nearly 50 built-in tools covering common DevOps and development scenarios. Supports both standard and CRD resources.893MIT
- AlicenseNot gradedqualityDmaintenanceEnables secure management of VMware vCenter 8.0+ environments through controlled operations including VM lifecycle management, snapshots, and resource discovery with built-in RBAC authorization, audit logging, and rate limiting.6MIT
- AlicenseAqualityBmaintenanceAI-powered VMware vSphere with Tanzu (VKS) management. Create and manage Supervisor Namespaces and TanzuKubernetesClusters with 20 MCP tools.25690 PyPI5MIT
- AlicenseAqualityAmaintenanceMCP server for managing VMware vCenter (vSphere 7/8) with 39 tools covering VMs, clusters, and ESXi hosts. Supports direct and jump host deployment modes.20MIT