Install
$ agentstack add mcp-ciscodevnet-meraki-magic-mcp-community ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Meraki Magic MCP
Meraki Magic is a Python-based MCP (Model Context Protocol) server for Cisco's Meraki Dashboard. Meraki Magic provides tools for querying the Meraki Dashboard API to discover, monitor, and manage your Meraki environment.
Two Versions Available
🚀 Dynamic MCP (Recommended) - meraki-mcp-dynamic.py
- ~804 API endpoints automatically exposed
- 100% SDK coverage - all Meraki API methods available
- Auto-updates when you upgrade the Meraki SDK
- No manual coding required for new endpoints
📋 Manual MCP - meraki-mcp.py
- 40 curated endpoints with detailed schemas
- Type-safe with Pydantic validation
- Custom business logic for specific use cases
- Clean documentation for common operations
Features
Dynamic MCP includes:
- All organization management (admins, networks, devices, inventory, licensing)
- Complete wireless management (SSIDs, RF profiles, Air Marshal, analytics)
- Full switch management (ports, VLANs, stacks, QoS, access policies)
- Advanced appliance/security (all firewall types, NAT, VPN, traffic shaping)
- Camera management (analytics, quality, schedules, permissions)
- Network monitoring (events, alerts, health, performance)
- Live troubleshooting tools (ping, cable test, ARP table)
- Webhooks and automation (alert profiles, action batches)
- And 700+ more endpoints...
Manual MCP includes:
- Network discovery and management
- Device discovery and configuration
- Client discovery and policy management
- Wireless SSID management
- Switch port and VLAN configuration
- Basic firewall rules
- Camera settings
Quick Installation
Prerequisites
- Python 3.13+
- Claude Desktop (or any MCP-compatible client)
- Meraki Dashboard API Key
- Meraki Organization ID
Fast Track
macOS:
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 .env
# Edit .env with your API credentials
Windows (PowerShell):
git clone https://github.com/CiscoDevNet/meraki-magic-mcp-community.git
cd meraki-magic-mcp-community
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env-example .env
# Edit .env with your API credentials
📖 For detailed step-by-step instructions, see [INSTALL.md](INSTALL.md)
Configuration
Edit .env with your Meraki credentials:
MERAKI_API_KEY="your_api_key_here"
MERAKI_ORG_ID="your_org_id_here"
MERAKI_BASE_URL="https://api.meraki.com/api/v1"
# Optional: Performance tuning
ENABLE_CACHING=true
CACHE_TTL_SECONDS=300
READ_ONLY_MODE=true
Get your API key from: Meraki Dashboard → Organization → Settings → Dashboard API access
READ_ONLY_MODE defaults to true to block create/update/delete/remove operations. Set READ_ONLY_MODE=false only when you intend to make changes. Delete/remove calls also require confirm_destructive_action=true.
Use MERAKI_BASE_URL to point the MCP server at another Meraki region or compatible Dashboard API base URI.
Deployment Options
There are three ways to deploy Meraki Magic MCP:
| Method | Best For | Transport | |--------|----------|-----------| | [Local (stdio)](#claude-desktop-setup) | Claude Desktop / Cursor on same machine | stdio | | [HTTP Server](#http-transport) | Remote access, shared team server | StreamableHTTP | | [Docker](#docker-deployment) | Containerized / production deployments | StreamableHTTP |
Claude Desktop Setup
Dynamic MCP (Recommended)
- Locate Claude config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- Edit config with your paths:
macOS Example:
{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "/path/to/meraki-magic-mcp-community/.venv/bin/fastmcp",
"args": [
"run",
"-t", "stdio",
"/path/to/meraki-magic-mcp-community/meraki-mcp-dynamic.py"
]
}
}
}
Windows Example:
{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "C:/Users/YourName/meraki-magic-mcp-community/.venv/Scripts/fastmcp.exe",
"args": [
"run",
"-t", "stdio",
"C:/Users/YourName/meraki-magic-mcp-community/meraki-mcp-dynamic.py"
]
}
}
}
Replace /path/to/ with your actual installation path. Windows users: use forward slashes / and include .exe.
- Restart Claude Desktop (Quit completely, then reopen)
- Verify: Ask Claude "What MCP servers are available?"
📖 Detailed setup instructions: [INSTALL.md](INSTALL.md)
Manual MCP (Original)
Use meraki-mcp.py instead of meraki-mcp-dynamic.py in the config above.
Both MCPs (Advanced)
You can run both simultaneously:
{
"mcpServers": {
"Meraki_Curated": {
"command": "/path/to/meraki-magic-mcp-community/.venv/bin/fastmcp",
"args": ["run", "-t", "stdio", "/path/to/meraki-magic-mcp-community/meraki-mcp.py"]
},
"Meraki_Full_API": {
"command": "/path/to/meraki-magic-mcp-community/.venv/bin/fastmcp",
"args": ["run", "-t", "stdio", "/path/to/meraki-magic-mcp-community/meraki-mcp-dynamic.py"]
}
}
}
HTTP Transport
Run the MCP server over HTTP for remote access or shared team use:
# Set transport in .env
MCP_TRANSPORT=http
MCP_HOST=127.0.0.1 # Use 0.0.0.0 for remote access
MCP_PORT=8000
# Start the server
python meraki-mcp-dynamic.py
# Server available at http://127.0.0.1:8000/mcp
Connect Claude Desktop to an HTTP server using mcp-remote (requires Node.js):
{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:8000/mcp"]
}
}
}
Docker Deployment
The fastest way to deploy remotely:
cp .env-example .env
# Edit .env with your MERAKI_API_KEY and MERAKI_ORG_ID
docker compose up -d
# Server available at http://localhost:8000/mcp
📖 Full HTTP & Docker instructions: [INSTALL.md](INSTALL.md#http-transport-mode)
Keeping Updated
The dynamic MCP automatically stays current with Meraki's API:
# Manually update SDK
pip install --upgrade meraki
Then restart Claude Desktop. See [UPDATEGUIDE.md](UPDATEGUIDE.md) for details.
Performance & Safety Features
The dynamic MCP includes several optimizations:
✅ Response Caching - Read-only operations cached for 5 minutes (reduces API calls by 50-90%) ✅ Read-Only Mode - Optional safety mode blocks write operations ✅ Auto-Retry - Automatic retry on failures (3 attempts) ✅ Rate Limit Handling - Automatically waits when rate limited ✅ Operation Labeling - Tools labeled as [READ], [WRITE], or [MISC]
See [OPTIMIZATIONS.md](OPTIMIZATIONS.md) for details.
Documentation
- [INSTALL.md](INSTALL.md) - Detailed installation guide (macOS & Windows)
- [QUICKSTART.md](QUICKSTART.md) - Get started quickly with examples
- [README-DYNAMIC.md](README-DYNAMIC.md) - Dynamic MCP technical details
- [COMPARISON.md](COMPARISON.md) - Compare manual vs dynamic approaches
- [UPDATEGUIDE.md](UPDATEGUIDE.md) - Keep your MCP current with latest APIs
- [OPTIMIZATIONS.md](OPTIMIZATIONS.md) - Performance and safety features
How It Works
The Dynamic MCP provides two ways to access Meraki APIs:
- Pre-registered tools (12 most common operations):
getOrganizations,getOrganizationAdmins,getOrganizationNetworksgetNetworkClients,getNetworkEvents,getDeviceSwitchPorts- And 6 more common operations
- Generic API caller (
call_meraki_api):
- Access ALL 804+ Meraki API methods
- Example:
call_meraki_api(section="appliance", method="getNetworkApplianceFirewallL3FirewallRules", parameters={"networkId": "L_123"}) - Destructive methods require
confirm_destructive_action=trueinparameters
Example Usage
Get all admins in my organization
Show me firewall rules for network "Main Office"
Update switch port 12 on device ABC123 to enable BPDU guard
Get wireless clients from the last hour
Create a new network named "Branch Office"
Support
- Issues: GitHub Issues
- Meraki API Docs: developer.cisco.com/meraki/api-v1
- MCP Protocol: modelcontextprotocol.io
Contributing
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request
Manual MCP Tools Reference
The following tools are available in the manual MCP (meraki-mcp.py). The dynamic MCP provides access to these and 760+ additional endpoints through the generic call_meraki_api tool.
Network Tools Guide
This guide provides a comprehensive overview of the curated network tools available in the manual MCP, organized by category and functionality.
Table of Contents
- [Organization Management Tools](#organization-management-tools)
- [Network Management Tools](#network-management-tools)
- [Device Management Tools](#device-management-tools)
- [Wireless Management Tools](#wireless-management-tools)
- [Switch Management Tools](#switch-management-tools)
- [Appliance Management Tools](#appliance-management-tools)
- [Camera Management Tools](#camera-management-tools)
- [Network Automation Tools](#network-automation-tools)
- [Advanced Monitoring Tools](#advanced-monitoring-tools)
- [Live Device Tools](#live-device-tools)
Organization Management Tools
Basic Organization Operations
get_organizations()- Get a list of organizations the user has access toget_organization_details(org_id)- Get details for a specific organizationget_organization_status(org_id)- Get the status and health of an organizationget_organization_inventory(org_id)- Get the inventory for an organizationget_organization_license(org_id)- Get the license state for an organizationget_organization_conf_change(org_id)- Get the org change state for an organization
Advanced Organization Management
get_organization_admins(org_id)- Get a list of organization adminscreate_organization_admin(org_id, email, name, org_access, tags, networks)- Create a new organization adminget_organization_api_requests(org_id, timespan)- Get organization API request historyget_organization_webhook_logs(org_id, timespan)- Get organization webhook logs
Network Management
get_networks(org_id)- Get a list of networks from Merakicreate_network(name, tags, productTypes, org_id, copyFromNetworkId)- Create a new networkdelete_network(network_id, confirm_destructive_action)- Delete a network in Merakiget_network_details(network_id)- Get details for a specific networkupdate_network(network_id, update_data)- Update a network's properties
Network Management Tools
Network Monitoring
get_network_events(network_id, timespan, per_page)- Get network events historyget_network_event_types(network_id)- Get available network event typesget_network_alerts_history(network_id, timespan)- Get network alerts historyget_network_alerts_settings(network_id)- Get network alerts settingsupdate_network_alerts_settings(network_id, defaultDestinations, alerts)- Update network alerts settings
Client Management
get_clients(network_id, timespan)- Get a list of clients from a networkget_client_details(network_id, client_id)- Get details for a specific clientget_client_usage(network_id, client_id)- Get the usage history for a clientget_client_policy(network_id, client_id)- Get the policy for a specific clientupdate_client_policy(network_id, client_id, device_policy, group_policy_id)- Update policy for a client
Network Traffic & Analysis
get_network_traffic(network_id, timespan)- Get traffic analysis data for a network
Device Management Tools
Device Information
get_devices(org_id)- Get a list of devices from Merakiget_network_devices(network_id)- Get a list of devices in a specific networkget_device_details(serial)- Get details for a specific device by serial numberget_device_status(serial)- Get the current status of a deviceget_device_uplink(serial)- Get the uplink status of a device
Device Operations
update_device(serial, device_settings)- Update a device in the Meraki organizationclaim_devices(network_id, serials)- Claim one or more devices into a Meraki networkremove_device(network_id, serial, confirm_destructive_action)- Remove a device from its networkreboot_device(serial)- Reboot a device
Device Monitoring
get_device_clients(serial, timespan)- Get clients connected to a specific device
Live Device Tools
Network Diagnostics
ping_device(serial, target_ip, count)- Ping a device from another deviceget_device_ping_results(serial, ping_id)- Get results from a device ping testcable_test_device(serial, ports)- Run cable test on device portsget_device_cable_test_results(serial, cable_test_id)- Get results from a device cable test
Device Control
blink_device_leds(serial, duration)- Blink device LEDs for identificationwake_on_lan_device(serial, mac)- Send wake-on-LAN packet to a device
Wireless Management Tools
Basic Wireless Operations
get_wireless_ssids(network_id)- Get wireless SSIDs for a networkupdate_wireless_ssid(network_id, ssid_number, ssid_settings)- Update a wireless SSIDget_wireless_settings(network_id)- Get wireless settings for a network
Advanced Wireless Management
get_wireless_rf_profiles(network_id)- Get wireless RF profiles for a networkcreate_wireless_rf_profile(network_id, name, band_selection_type, **kwargs)- Create a wireless RF profileget_wireless_channel_utilization(network_id, timespan)- Get wireless channel utilization historyget_wireless_signal_quality(network_id, timespan)- Get wireless signal quality historyget_wireless_connection_stats(network_id, timespan)- Get wireless connection statisticsget_wireless_client_connectivity_events(network_id, client_id, timespan)- Get wireless client connectivity events
Switch Management Tools
Basic Switch Operations
get_switch_ports(serial)- Get ports for a switchupdate_switch_port(serial, port_id, name, tags, enabled, vlan)- Update a switch portget_switch_vlans(network_id)- Get VLANs for a networkcreate_switch_vlan(network_id, vlan_id, name, subnet, appliance_ip)- Create a switch VLAN
Advanced Switch Management
get_switch_port_statuses(serial)- Get switch port statusescycle_switch_ports(serial, ports)- Cycle (restart) switch portsget_switch_access_control_lists(network_id)- Get switch access control listsupdate_switch_access_control_lists(network_id, rules)- Update switch access control listsget_switch_qos_rules(network_id)- Get switch QoS rulescreate_switch_qos_rule(network_id, vlan, protocol, src_port, **kwargs)- Create a switch QoS rule
Appliance Management Tools
Basic Appliance Operations
get_security_center(network_id)- Get security information for a networkget_vpn_status(network_id)- Get VPN status for a networkget_firewall_rules(network_id)- Get firewall rules for a networkupdate_firewall_rules(network_id, rules)- Update firewall rules fo
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: CiscoDevNet
- Source: CiscoDevNet/meraki-magic-mcp-community
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.