Meraki Monitoring & Diagnostics (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
Live-verified against a real org:
| Capability ID |
Verified result |
getOrganizationConfigurationChanges |
3 change records |
getOrganizationApiRequestsOverview |
API request analytics present |
getOrganizationLicensesOverview |
licensing (co-term) present |
getOrganizationDevices |
0 devices |
getOrganizationInventoryDevices |
0 inventory |
getOrganizationDevicesStatuses |
Capability not found — deprecated upstream |
That last row matters: 8 deprecated GETs are filtered out of the catalogue. A
Capability not found on a name you remember working means it was deprecated, not that the
data is gone — semantic_search for the current equivalent.
There are 56 real monitoring capabilities, including getDeviceLossAndLatencyHistory,
getOrganizationDevicesAvailabilities, getOrganizationDevicesUplinksLossAndLatency,
getDeviceLiveToolsPing, getDeviceLiveToolsCableTest, getDeviceLiveToolsArpTable,
getDeviceLiveToolsMacTable, getDeviceLiveToolsThroughputTest.
Live tools are GET-only here — you can read results, not start runs. Starting a live
tool is a POST, which does not exist in this catalogue. Read existing results, or start the
run from the dashboard.
Workflow: Org health check
getOrganizations → getOrganizationNetworks
getOrganizationDevices — if 0, report "no devices reported by this org" and stop.
Do not present an empty inventory as a healthy one.
semantic_search "device availability across the organization" → invoke it
semantic_search "uplink loss and latency across the organization" → invoke it
getOrganizationLicensesOverview — licence state and expiry
- Report health with the observation window stated. A latency number without a window is
not a measurement.
Workflow: Change correlation
When something broke and nobody knows why:
getOrganizationConfigurationChanges — who changed what, when (one page only)
- Correlate timestamps against the reported onset of the problem
getOrganizationApiRequestsOverview — was the change made by an integration, not a human?
- Report the correlation as correlation. A config change near an outage is a lead, not
a cause, and saying otherwise has sent operators down the wrong path before.
Important Rules
- No writes and no run-starting. Live tools are readable, not startable.
- 0 devices ≠ healthy. Say the org reported none.
Capability not found on a familiar name means deprecated — search for the successor.
- Always state the observation window for any loss, latency, or availability figure.
- Record in GAIT — log every health check.
Integration with Other Skills
| Skill |
How They Work Together |
meraki-network-ops |
Network and device context for health checks |
meraki-switch-ops |
Port-level errors behind an uplink problem |
servicenow-change-workflow |
Correlate Meraki config changes against CRs |
slack-network-alerts |
Report degradation to the operator channel |
gait-session-tracking |
Record all health checks |
Environment Variables
MERAKI_DASHBOARD_API_KEY — Meraki Dashboard API key (read-only recommended)
1---
2name: meraki-monitoring
3description: "Cisco Meraki monitoring and diagnostics (read-only) — device availability, loss and latency history, uplink status, live tool results, configuration change log, API request analytics via Cisco's official Meraki MCP. Use when checking Meraki device health, investigating uplink loss, or reviewing recent configuration changes"
4version: 2.0.0
5license: Apache-2.0
6tags: [cisco, meraki, monitoring, diagnostics, uplink, latency, availability, read-only]
7---
8
9# Meraki Monitoring & Diagnostics (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
60Live-verified against a real org:
61
62| Capability ID | Verified result |
63|---|---|
64| `getOrganizationConfigurationChanges` | 3 change records |
65| `getOrganizationApiRequestsOverview` | API request analytics present |
66| `getOrganizationLicensesOverview` | licensing (co-term) present |
67| `getOrganizationDevices` | **0 devices** |
68| `getOrganizationInventoryDevices` | **0 inventory** |
69| `getOrganizationDevicesStatuses` | **`Capability not found` — deprecated upstream** |
70
71That last row matters: **8 deprecated GETs are filtered out of the catalogue.** A
72`Capability not found` on a name you remember working means it was deprecated, not that the
73data is gone — `semantic_search` for the current equivalent.
74
75There are **56** real monitoring capabilities, including `getDeviceLossAndLatencyHistory`,
76`getOrganizationDevicesAvailabilities`, `getOrganizationDevicesUplinksLossAndLatency`,
77`getDeviceLiveToolsPing`, `getDeviceLiveToolsCableTest`, `getDeviceLiveToolsArpTable`,
78`getDeviceLiveToolsMacTable`, `getDeviceLiveToolsThroughputTest`.
79
80**Live tools are GET-only here — you can read results, not start runs.** Starting a live
81tool is a POST, which does not exist in this catalogue. Read existing results, or start the
82run from the dashboard.
83
84## Workflow: Org health check
85
861. `getOrganizations` → `getOrganizationNetworks`
872. `getOrganizationDevices` — **if 0, report "no devices reported by this org" and stop.**
88 Do not present an empty inventory as a healthy one.
893. `semantic_search` "device availability across the organization" → invoke it
904. `semantic_search` "uplink loss and latency across the organization" → invoke it
915. `getOrganizationLicensesOverview` — licence state and expiry
926. Report health with the observation window stated. A latency number without a window is
93 not a measurement.
94
95## Workflow: Change correlation
96
97When something broke and nobody knows why:
98
991. `getOrganizationConfigurationChanges` — who changed what, when (**one page only**)
1002. Correlate timestamps against the reported onset of the problem
1013. `getOrganizationApiRequestsOverview` — was the change made by an integration, not a human?
1024. Report the correlation as **correlation**. A config change near an outage is a lead, not
103 a cause, and saying otherwise has sent operators down the wrong path before.
104
105## Important Rules
106
107- **No writes and no run-starting.** Live tools are readable, not startable.
108- **0 devices ≠ healthy.** Say the org reported none.
109- **`Capability not found` on a familiar name means deprecated** — search for the successor.
110- **Always state the observation window** for any loss, latency, or availability figure.
111- **Record in GAIT** — log every health check.
112
113## Integration with Other Skills
114
115| Skill | How They Work Together |
116|-------|----------------------|
117| `meraki-network-ops` | Network and device context for health checks |
118| `meraki-switch-ops` | Port-level errors behind an uplink problem |
119| `servicenow-change-workflow` | Correlate Meraki config changes against CRs |
120| `slack-network-alerts` | Report degradation to the operator channel |
121| `gait-session-tracking` | Record all health checks |
122
123## Environment Variables
124
125- `MERAKI_DASHBOARD_API_KEY` — Meraki Dashboard API key (**read-only** recommended)