Meraki Switch Operations (read-only)
MCP Server
- Server: Cisco's official Meraki MCP — developer.cisco.com
- Endpoint:
https://mcp.meraki.com/mcp (remote HTTP, no local install)
- Self-host fallback: CiscoDevNet/cisco-meraki-mcp-official (Apache-2.0)
- Requires:
MERAKI_DASHBOARD_API_KEY — use a read-only dashboard key
- Tools: exactly two —
semantic_search (discover) and execute_api (invoke)
Read-only, structurally
All 431 mutating Meraki operations (174 POST, 186 PUT, 71 DELETE) are absent from the
capability catalogue. Only non-deprecated GETs are built in, so updateNetwork,
rebootDevice, blinkDeviceLeds and friends return Capability not found.
Do not attempt writes and do not offer them. There is no ServiceNow CR path here because
there is nothing to gate — a change must be made in the Meraki dashboard directly.
How to call it
Two capability IDs may be called directly; everything else must be discovered:
execute_api → getOrganizations — find accessible org IDs
execute_api → getOrganizationNetworks — find network IDs in the chosen org
semantic_search → describe the intent in words → returns ranked capability_ids
execute_api → the chosen capability_id + its required parameters
Discover, do not guess. An earlier version of this skill hardcoded 80 method names and
54 of them did not exist in the Meraki API at all — they failed regardless of server.
semantic_search is the guard against that: it can only return IDs that exist.
Reading results honestly
One page only. execute_api returns a single page. Request a bounded page size when
supported, and never present a page as the complete dataset.
Empty is not absent. n=0 means this network reported none, never none exist.
Live proof from a real sandbox org: getOrganizationDevices returns 0 devices while
the same org has a fully configured network with 15 SSIDs.
Three distinct errors, three different fixes:
| Error |
Meaning |
Fix |
Capability not found |
ID is mutating, deprecated, or invented |
semantic_search for a real one |
Resource not found |
valid ID, wrong org/network/serial |
re-derive the ID from step 1–2 |
Invalid parameters |
valid ID, missing a required parameter |
read the capability's parameters |
Never report any of the three as "no data" — none of them mean that.
Verified capabilities
| Capability ID |
Verified result |
getNetworkSwitchAccessControlLists |
1 ACL set on a real network |
There are 50 real switch capabilities. The ones you will reach for most:
getDeviceSwitchPorts, getDeviceSwitchPortsStatuses, getDeviceSwitchPortsStatusesPackets,
getNetworkSwitchAccessPolicies, getNetworkSwitchRoutingMulticast,
getDeviceSwitchRoutingInterfaces, getDeviceSwitchRoutingStaticRoutes,
getDeviceSwitchWarmSpare. Confirm each with semantic_search before calling.
Port capabilities are per-device and need a serial, not a network ID. Get serials from
getOrganizationDevices (org-wide) — and note that an org with 0 devices returns 0
serials, which is not the same as "the switches have no ports".
Workflow: Port configuration audit
getOrganizations → getOrganizationNetworks → getOrganizationDevices
- If 0 devices: stop and say so. Do not proceed to invent port data.
- Per switch serial:
getDeviceSwitchPorts — VLAN, type, PoE, STP guard, isolation
getDeviceSwitchPortsStatuses — link state, speed, duplex, errors, discards
getNetworkSwitchAccessControlLists and getNetworkSwitchAccessPolicies — ACL/802.1X
- Report per-port configuration drift against intent
Workflow: Port error investigation
getDeviceSwitchPortsStatuses — identify ports with errors or discards
getDeviceSwitchPortsStatusesPackets — packet-level breakdown per port
semantic_search "switch port cable test results" — physical-layer evidence
- Correlate with
getDeviceLossAndLatencyHistory via meraki-monitoring
- Distinguish errors (physical/duplex) from discards (congestion/QoS) — they have
different fixes, and conflating them is the usual wrong answer here.
Important Rules
- No writes exist. Port, VLAN, ACL and QoS changes must be made in the dashboard.
- Port capabilities need a device serial, not a network ID.
- Errors ≠ discards. Say which, with counts and the window.
- Record in GAIT — log every switch audit.
Integration with Other Skills
| Skill |
How They Work Together |
meraki-network-ops |
Network and device inventory for switch discovery |
meraki-monitoring |
Loss/latency history and live tools for switch uplinks |
meraki-security-appliance |
Trace a VLAN from switch port to firewall rule |
gait-session-tracking |
Record all switch audits |
Environment Variables
MERAKI_DASHBOARD_API_KEY — Meraki Dashboard API key (read-only recommended)
1---
2name: meraki-switch-ops
3description: "Cisco Meraki switching (read-only) — port configuration and status, VLANs, ACLs, QoS, STP, link aggregation, routing interfaces via Cisco's official Meraki MCP. Use when inspecting Meraki switch ports, auditing switch ACLs, or investigating port errors"
4version: 2.0.0
5license: Apache-2.0
6tags: [cisco, meraki, switch, port, vlan, acl, qos, stp, read-only]
7---
8
9# Meraki Switch Operations (read-only)
10
11## MCP Server
12
13- **Server**: Cisco's **official** Meraki MCP — [developer.cisco.com](https://developer.cisco.com/meraki/api-v1/mcp-server/)
14- **Endpoint**: `https://mcp.meraki.com/mcp` (remote HTTP, no local install)
15- **Self-host fallback**: [CiscoDevNet/cisco-meraki-mcp-official](https://github.com/CiscoDevNet/cisco-meraki-mcp-official) (Apache-2.0)
16- **Requires**: `MERAKI_DASHBOARD_API_KEY` — use a **read-only** dashboard key
17- **Tools**: exactly two — `semantic_search` (discover) and `execute_api` (invoke)
18
19## Read-only, structurally
20
21All 431 mutating Meraki operations (174 POST, 186 PUT, 71 DELETE) are **absent from the
22capability catalogue**. Only non-deprecated GETs are built in, so `updateNetwork`,
23`rebootDevice`, `blinkDeviceLeds` and friends return `Capability not found`.
24
25Do not attempt writes and do not offer them. There is no ServiceNow CR path here because
26there is nothing to gate — a change must be made in the Meraki dashboard directly.
27
28## How to call it
29
30Two capability IDs may be called directly; everything else must be discovered:
31
321. `execute_api` → `getOrganizations` — find accessible org IDs
332. `execute_api` → `getOrganizationNetworks` — find network IDs in the chosen org
343. `semantic_search` → describe the intent in words → returns ranked `capability_id`s
354. `execute_api` → the chosen `capability_id` + its required parameters
36
37**Discover, do not guess.** An earlier version of this skill hardcoded 80 method names and
38**54 of them did not exist in the Meraki API at all** — they failed regardless of server.
39`semantic_search` is the guard against that: it can only return IDs that exist.
40
41## Reading results honestly
42
43- **One page only.** `execute_api` returns a single page. Request a bounded page size when
44 supported, and never present a page as the complete dataset.
45- **Empty is not absent.** `n=0` means *this network reported none*, never *none exist*.
46 Live proof from a real sandbox org: `getOrganizationDevices` returns **0 devices** while
47 the same org has a fully configured network with **15 SSIDs**.
48- **Three distinct errors, three different fixes:**
49
50 | Error | Meaning | Fix |
51 |---|---|---|
52 | `Capability not found` | ID is mutating, deprecated, or invented | `semantic_search` for a real one |
53 | `Resource not found` | valid ID, wrong org/network/serial | re-derive the ID from step 1–2 |
54 | `Invalid parameters` | valid ID, missing a required parameter | read the capability's parameters |
55
56 Never report any of the three as "no data" — none of them mean that.
57
58## Verified capabilities
59
60| Capability ID | Verified result |
61|---|---|
62| `getNetworkSwitchAccessControlLists` | 1 ACL set on a real network |
63
64There are **50** real switch capabilities. The ones you will reach for most:
65`getDeviceSwitchPorts`, `getDeviceSwitchPortsStatuses`, `getDeviceSwitchPortsStatusesPackets`,
66`getNetworkSwitchAccessPolicies`, `getNetworkSwitchRoutingMulticast`,
67`getDeviceSwitchRoutingInterfaces`, `getDeviceSwitchRoutingStaticRoutes`,
68`getDeviceSwitchWarmSpare`. Confirm each with `semantic_search` before calling.
69
70**Port capabilities are per-device and need a `serial`**, not a network ID. Get serials from
71`getOrganizationDevices` (org-wide) — and note that an org with **0 devices returns 0
72serials**, which is not the same as "the switches have no ports".
73
74## Workflow: Port configuration audit
75
761. `getOrganizations` → `getOrganizationNetworks` → `getOrganizationDevices`
772. If 0 devices: **stop and say so.** Do not proceed to invent port data.
783. Per switch serial: `getDeviceSwitchPorts` — VLAN, type, PoE, STP guard, isolation
794. `getDeviceSwitchPortsStatuses` — link state, speed, duplex, errors, discards
805. `getNetworkSwitchAccessControlLists` and `getNetworkSwitchAccessPolicies` — ACL/802.1X
816. Report per-port configuration drift against intent
82
83## Workflow: Port error investigation
84
851. `getDeviceSwitchPortsStatuses` — identify ports with errors or discards
862. `getDeviceSwitchPortsStatusesPackets` — packet-level breakdown per port
873. `semantic_search` "switch port cable test results" — physical-layer evidence
884. Correlate with `getDeviceLossAndLatencyHistory` via `meraki-monitoring`
895. Distinguish **errors** (physical/duplex) from **discards** (congestion/QoS) — they have
90 different fixes, and conflating them is the usual wrong answer here.
91
92## Important Rules
93
94- **No writes exist.** Port, VLAN, ACL and QoS changes must be made in the dashboard.
95- **Port capabilities need a device serial**, not a network ID.
96- **Errors ≠ discards.** Say which, with counts and the window.
97- **Record in GAIT** — log every switch audit.
98
99## Integration with Other Skills
100
101| Skill | How They Work Together |
102|-------|----------------------|
103| `meraki-network-ops` | Network and device inventory for switch discovery |
104| `meraki-monitoring` | Loss/latency history and live tools for switch uplinks |
105| `meraki-security-appliance` | Trace a VLAN from switch port to firewall rule |
106| `gait-session-tracking` | Record all switch audits |
107
108## Environment Variables
109
110- `MERAKI_DASHBOARD_API_KEY` — Meraki Dashboard API key (**read-only** recommended)