get_organizationsLABSCO SUMMARY
Two builds and a safety default that assumes you are reading, not changing.
The dynamic build's roughly 804 endpoints give an agent the whole Dashboard API, which is a lot of tools to expose; the manual build, with the 83 tools of its reference, is the tighter, type-checked option when you know what you need. READ_ONLY_MODE being true out of the box, plus a separate confirm flag for destructive calls, is the reason it is safe to point at a live org while you learn what it does.
What it is
A Python server over the Meraki Dashboard API, shipped in two flavours: a dynamic build exposing about 804 SDK endpoints, and a manual build (meraki-mcp.py) whose tools reference lists 83 tools, although the README's overview still advertises 40 curated endpoints.
What you get
- Organization management — admins, networks, devices, inventory, licensing
- Wireless — SSIDs, RF profiles, Air Marshal, analytics
- Switching — ports, VLANs, stacks, QoS, access policies
- Appliance and security — firewall types, NAT, VPN, traffic shaping
- Cameras, network monitoring (events, alerts, health), and live troubleshooting — ping, cable test, ARP table
- The dynamic build tracks the SDK, so upgrading it exposes new endpoints with no manual coding
Requirements
Python 3.13+, a Meraki Dashboard API key and organization ID in MERAKI_API_KEY and MERAKI_ORG_ID. Clone, create a venv, install requirements, then launch the chosen server file with fastmcp. READ_ONLY_MODE defaults to true, blocking create, update and delete; destructive calls additionally need confirm_destructive_action=true. MERAKI_BASE_URL points at another region if needed.
Setup effort
Build from source — git clone https://github.com/CiscoDevNet/meraki-magic-mcp-community.git
USE CASES
Auditing what is on the network
List organizations, networks and devices, and read the current inventory, all within the read-only default.
Troubleshooting a connectivity problem live
Run a ping, a cable test, or pull the ARP table from the conversation.
Reviewing wireless configuration
Read the SSIDs, RF profiles and Air Marshal state before deciding on a change.
Making a change deliberately
Set READ_ONLY_MODE to false and pass the destructive-action confirmation, so a mutation is never accidental.
Working against a non-default Meraki region
Point MERAKI_BASE_URL at the region or compatible Dashboard base URI.
90 tools
Listed in project docs. Your client may show a different list.
get_organization_detailsget_organization_statusget_organization_inventoryget_organization_licenseget_organization_conf_changeget_organization_adminscreate_organization_adminget_organization_api_requestsget_organization_webhook_logsget_networkscreate_networkdelete_networkget_network_detailsupdate_networkget_network_eventsget_network_event_typesget_network_alerts_historyget_network_alerts_settingsupdate_network_alerts_settingsget_clientsget_client_detailsget_client_usageget_client_policyupdate_client_policyget_network_trafficget_devicesget_network_devicesget_device_detailsget_device_statusget_device_uplinkupdate_deviceclaim_devicesremove_devicereboot_deviceget_device_clientsping_deviceget_device_ping_resultscable_test_deviceget_device_cable_test_resultsblink_device_ledswake_on_lan_deviceget_wireless_ssidsupdate_wireless_ssidget_wireless_settingsget_wireless_rf_profilescreate_wireless_rf_profileget_wireless_channel_utilizationget_wireless_signal_qualityget_wireless_connection_statsget_wireless_client_connectivity_eventsget_switch_portsupdate_switch_portget_switch_vlanscreate_switch_vlanget_switch_port_statusescycle_switch_portsget_switch_access_control_listsupdate_switch_access_control_listsget_switch_qos_rulescreate_switch_qos_ruleget_security_centerget_vpn_statusget_firewall_rulesupdate_firewall_rulesget_appliance_vpn_site_to_siteupdate_appliance_vpn_site_to_siteget_appliance_content_filteringupdate_appliance_content_filteringget_appliance_security_eventsget_appliance_traffic_shapingupdate_appliance_traffic_shapingget_camera_video_settingsget_camera_quality_settingsget_camera_analytics_liveget_camera_analytics_overviewget_camera_analytics_zonesgenerate_camera_snapshotget_camera_senseupdate_camera_sensecreate_action_batchget_action_batch_statusget_action_batchescall_meraki_apigetOrganizationsgetOrganizationAdminsgetOrganizationNetworksgetNetworkClientsgetNetworkEventsgetDeviceSwitchPortsBEFORE YOU INSTALL
What to know first
Tools you get
90 tools named in the project's documentation. The 90 names mix both builds: the 83 tools of the manual build (meraki-mcp.py) and 7 from the dynamic build, call_meraki_api plus six of its twelve pre-registered tools. The configurations here run the dynamic build, which reaches the rest of the roughly 804 API endpoints through call_meraki_api.
Requires
- Python 3.13+
- MERAKI_API_KEY in your environment
- MERAKI_ORG_ID in your environment
INSTALLATION
Connect your client
Server setup
git clone https://github.com/CiscoDevNet/meraki-magic-mcp-community.git
cd meraki-magic-mcp-community
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env-example .envEdit .env with your MERAKI_API_KEY and MERAKI_ORG_ID
MCP Clients
Claude Desktop — macOS
{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "<YOUR_PATH_TO_MERAKI_MAGIC_MCP_COMMUNITY>/.venv/bin/fastmcp",
"args": [
"run",
"-t",
"stdio",
"<YOUR_PATH_TO_MERAKI_MAGIC_MCP_COMMUNITY>/meraki-mcp-dynamic.py"
]
}
}
}<YOUR_PATH_TO_MERAKI_MAGIC_MCP_COMMUNITY> is your meraki-magic-mcp-community clone; both paths point into it.
The configuration on this page does not set MERAKI_API_KEY and MERAKI_ORG_ID; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.
Claude Desktop — Windows
{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "C:/Users/<YOUR_USERNAME>/meraki-magic-mcp-community/.venv/Scripts/fastmcp.exe",
"args": [
"run",
"-t",
"stdio",
"C:/Users/<YOUR_USERNAME>/meraki-magic-mcp-community/meraki-mcp-dynamic.py"
]
}
}
}C:/Users/<YOUR_USERNAME> is the folder you ran git clone in, so both paths point into your meraki-magic-mcp-community clone.
The configuration on this page does not set MERAKI_API_KEY and MERAKI_ORG_ID; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.
Claude Desktop — HTTP
In .env, set MCP_TRANSPORT=http, MCP_HOST=127.0.0.1 and MCP_PORT=8000, then start the server from the clone:
python meraki-mcp-dynamic.py{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://127.0.0.1:8000/mcp"
]
}
}
}The server listens at http://127.0.0.1:8000/mcp; mcp-remote needs Node.js.
Any HTTP MCP client — Docker Compose
From the clone, with MERAKI_API_KEY and MERAKI_ORG_ID set in .env:
docker compose up -dThe server is then available at http://localhost:8000/mcp for an HTTP MCP client.