Governed Cisco Meraki fabric ops: uplink RCA, health score, drift; 32 tools with audit/undo.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by Cisco, Meraki, Arista, Ubiquiti, or any network-controller vendor. "Cisco", "Meraki", "Catalyst", "DNA Center", "Arista", "CloudVision", "Ubiquiti", "UniFi" and all product/trademark names belong to their respective owners. MIT licensed.
Governed AI-ops for network fabrics managed through a controller β the
Cisco Meraki Dashboard API (the reference platform, full read + write),
Cisco Catalyst Center (formerly DNA Center; read subset), Arista
CloudVision Portal (CVP) (read subset), and UniFi Network (self-hosted
controller or UniFi OS console; read subset + device restart) β with a
built-in governance
harness: unified audit log, token/runaway budget guard,
undo-token recording, and descriptive risk tiers. Multi-platform by
construction: a registry keyed by platform maps every canonical operation
onto each controller's REST API (path templates + response adapters), so adding
a controller is a registry entry, never new ops/CLI/MCP surface. An operation a
platform doesn't map returns a clear teaching error ("not supported on X yet β
open an issue"), never a silent no-op. The test suite is mock-based; no
platform has yet been exercised against a live controller β see
docs/VERIFICATION.md.
Three flagship signature analyses, plus the guarded reads and writes around them:
fabric-aiops ...): init, overview, org, network, device, client, health, remediate, secret, doctor, mcp.fabric-aiops mcp or fabric-aiops-mcp): 34 tools (25 read, 9 write), every one wrapped with the bundled @governed_tool harness.username:password / CVP service-account token / UniFi API key) lives in an encrypted store ~/.fabric-aiops/secrets.enc (Fernet + scrypt) β never plaintext on disk. Unlock with a master password from FABRIC_AIOPS_MASTER_PASSWORD (MCP/CI) or an interactive prompt (CLI).update_device/update_network_vlan restore prior values; claimβremove; bindβunbind/rebind). Irreversible ops (reboot_device, blink_device_leds) record the prior state for audit but declare no undo.--dry-run and requires double confirmation; every write MCP tool takes a dry_run preview.| Domain | Tools | Count | R/W |
|---|---|---|---|
| Overview | overview | 1 | read |
| Organizations | org_list, org_get, org_licensing, org_admins, org_device_statuses, org_api_requests | 6 | read |
| Networks | network_list, network_get, network_vlans, network_alerts, network_traffic | 5 | read |
| Devices | device_inventory, device_status, device_uplinks, switch_ports, wireless_ssids | 5 | read |
| Clients | client_list, client_get, client_usage, client_connectivity | 4 | read |
| Health (flagship) | uplink_loss_and_latency_rca, network_health_score, config_template_drift | 3 | read |
| Remediation | reboot_device, claim_devices_into_network, remove_device_from_network, bind_network_to_template, unbind_network_from_template | 5 | write (high) |
update_device, update_network_vlan | 2 | write (medium) | |
blink_device_leds | 1 | write (low) | |
| Undo | undo_list | 1 | read |
undo_apply | 1 | write (medium) |
network_health_score and config_template_drift are injected-only (they score
data you already hold); uplink_loss_and_latency_rca accepts injected records
for offline analysis or pulls live from a configured target. Device models carry
a product-type prefix: MX appliance, MS switch, MR wireless AP, MV
camera, MG cellular gateway.
One tool, four controller platforms. The ops/CLI/MCP surface is identical
everywhere; each platform maps the canonical operations it supports and raises
a teaching error for the rest ("not supported on <platform> yet β open an
issue or PR").
| Canonical operation | meraki | catalyst | cvp | unifi |
|---|---|---|---|---|
overview (org/site/container rollup) | β | β | β | β |
org_list / org_get | β | β sites | β containers | β sites (list; get β) |
org_licensing, org_api_requests | β | β | β | β |
org_admins | β | β | β users | β |
org_device_statuses | β | β device-health | β inventory + streaming status | β stat/device (state, uptime, firmware) |
network_list / network_get | β | β site-health / site | β containers | β sites / stat/health (subsystem rollup) |
network_vlans, network_traffic | β | β | β | β |
network_alerts | β | β issues (P1βcritical, P2βwarning) | β events | β alarms (*_Lost_Contactβcritical) |
device_inventory, device_status | β | β network-device | β inventory (+ complianceCode drift signal) | β stat/device (id = device MAC) |
device_uplinks | β | β | β | β |
switch_ports | β | β interface stats (pass the device uuid) | β | β
device port_table (pass the device MAC) |
wireless_ssids | β | β | β | β |
client_list / client_get | β | β client-health (aggregate) / client-detail (by MAC) | β | β stat/sta (connected) / stat/user (by MAC) |
client_usage, client_connectivity | β | β | β | β |
uplink_loss_and_latency_rca (live pull) | β | β (injected records still work) | β (injected records still work) | β (injected records still work) |
network_health_score, config_template_drift (injected-only) | β | β | β | β |
reboot_device | β | β teaching error | β teaching error | β
cmd/devmgr restart-device |
| The other 7 writes (blink/update/claim/remove/bind/unbind/VLAN) | β | β teaching error | β teaching error | β teaching error |
Concept mapping: canonical organizations/networks are Catalyst Center
sites, CVP containers, and UniFi sites (the canonical id is the
site's short name β the /api/s/{site}/ path segment); all have one global
tree, so the org scope does not filter their lists. On unifi, device-scoped
calls (device get / switch_ports / reboot) fill the site from the
target's default org_id β set it in config.yaml (or the init wizard). Writes
are Meraki-only except UniFi device restart β Catalyst Center and CVP
change models (task/configlet workflows) don't map cleanly onto these
canonical writes, so each write fails fast with a teaching error before any
controller call (never a silent no-op). CVP config-drift surfaces through
device_inventory (complianceCode/complianceIndication per device) and
network_alerts (events); configlet-content retrieval and deep pagination on
catalyst/cvp/unifi are known deferrals.
| Platform | platform: | Secret stored (encrypted) | Auth on the wire | Base URL |
|---|---|---|---|---|
| Cisco Meraki Dashboard | meraki | API key (Dashboard β Organization β Settings β API access) | Authorization: Bearer (or auth_style: meraki-key β X-Cisco-Meraki-API-Key) | default https://api.meraki.com/api/v1 |
| Cisco Catalyst Center | catalyst | username:password (one string) | exchanged via POST /dna/system/api/v1/auth/token (HTTP Basic) for a ~1 h X-Auth-Token, auto-refreshed once on a 401 | required, e.g. https://<catalyst-center-host> |
| Arista CloudVision Portal | cvp | service-account token (Settings β Access Control β Service Accounts) | Authorization: Bearer | required, e.g. https://<cvp-host> |
| UniFi Network | unifi | API key (UniFi OS: Settings β Control Plane β Integrations; self-hosted Network Server 9.0+) | X-API-KEY (stateless; legacy cookie login is a known deferral) | required β classic controller https://<host>:8443, or UniFi OS console https://<console>/proxy/network (keep the prefix) |
fabric-aiops init walks through the platform choice and stores the right kind
of secret; fabric-aiops doctor probes each target with the canonical
top-of-hierarchy read (organizations / sites / containers / UniFi sites),
exercising the full auth flow.
It delivers network-fabric operations β reads and writes β accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the account you connect it with: give it a Meraki API key whose admin has read-only organization access (or the read-only equivalent on your controller) and the writes fail at the controller β the place that actually owns the permission.
So there is no read-only switch, no policy file, no approval gate to configure.
The one thing the tool guarantees is that nothing is silent: every call, over
MCP and over the CLI alike, lands an audit row in ~/.fabric-aiops/audit.db,
and mutating writes still capture their before-state and record an inverse where
one exists.
Each tool declares a
risk_level, kept in agreement with its[READ]/[WRITE]documentation tag by a test, and carried into the audit row as a descriptive tier β so a reviewer can see at a glance that a row was a high-risk delete. It is a label, not a gate.
Run as an MCP server (stdio):
Every operation β MCP and CLI β passes through the bundled @governed_tool
harness. It records; it does not authorize (see above).
~/.fabric-aiops/audit.db
(relocatable via FABRIC_AIOPS_HOME). The CLI writes the same row the MCP path
does β there is no unaudited entry point.FABRIC_RUNAWAY_MAX=0; optional hard
ceilings via FABRIC_MAX_TOOL_CALLS / FABRIC_MAX_TOOL_SECONDS.risk_level; it gates nothing.This is the network-fabric / controller member of the AIops-tools family
(governed AI-ops with audit + budget + undo + risk tiers). Do NOT use it for
OT / industrial edge (Modbus, OPC-UA, PROFINET) β see the separate
industrial-aiops line β nor for device-level CLI/SSH network automation.
Coverage is intentionally a curated subset of each controller's API. Missing a call or a device family on Meraki? A β in the support matrix you need on Catalyst Center, CloudVision Portal, or UniFi Network (writes included β e.g. the UniFi cookie-login fallback for pre-9.0 controllers)? Want another controller platform entirely? Open an issue or PR β contributions welcome (a platform is a single descriptor module: path templates + response adapters).
The test suite is mock-based. No platform has yet been exercised against a live
Meraki organization, Catalyst Center appliance, CloudVision Portal instance, or
UniFi controller β all four platforms' API paths are modelled from the public
API shapes. docs/VERIFICATION.md defines the checklist
a live run must cover; fabric-aiops doctor is the fastest live check.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/fabric-aiops)<a href="https://allmcps.com/mcp/fabric-aiops"><img src="https://allmcps.com/api/badge/fabric-aiops?style=directory" alt="Fabric AIops on AllMCPs" /></a>