Complete Model Context Protocol (MCP) server for Cisco Meraki Dashboard API. This server exposes all major Meraki Dashboard API endpoints as MCP tools, enabling Claude to interact with and manage Meraki networks, devices, and configurations.
- Complete API Coverage: Implements 80+ tools across all major Meraki API categories
- Rate Limiting: Automatic rate limiting (5 req/sec per org, configurable)
- Smart Retries: Exponential backoff for failed requests
- Caching: Intelligent caching for semi-static data
- Auto-Pagination: Automatic handling of paginated responses
- Type Safety: Full TypeScript implementation with comprehensive type definitions
- Error Handling: Detailed error messages with HTTP status codes
- Organizations: List, get details, inventory, licenses, API usage
- Networks: CRUD operations, bind/unbind templates, split/combine
- Devices: List, update, claim, remove, reboot, blink LEDs, LLDP/CDP
- Switch: Port configuration, VLANs, stacks, QoS, routing
- Wireless: SSIDs, RF profiles, Bluetooth, Air Marshal
- Appliance: VLANs, firewall rules, VPN, NAT, port forwarding, traffic shaping
- Monitoring: Uplink status, connection stats, latency, events, traffic analysis
- Alerts: Alert settings, webhooks, HTTP servers
- Camera: Quality settings, snapshots, video links, MV Sense, analytics
- Node.js 18+ and npm
- Meraki Dashboard API key (Get one here)
- Claude Desktop app or compatible MCP client
-
Clone or navigate to the project directory:
cd mcp-meraki -
Install dependencies:
npm install
-
Configure environment variables:
cp .env.example .env
Edit
.envand set your Meraki API key:MERAKI_API_KEY=your_api_key_here MERAKI_BASE_URL=https://api.meraki.com/api/v1 MERAKI_RATE_LIMIT=5 MERAKI_TIMEOUT=30000 DEBUG=false
-
Build the project:
npm run build
Add this server to your Claude Desktop configuration file:
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"meraki": {
"command": "node",
"args": ["/absolute/path/to/mcp-meraki/dist/index.js"],
"env": {
"MERAKI_API_KEY": "your_api_key_here",
"MERAKI_BASE_URL": "https://api.meraki.com/api/v1",
"MERAKI_RATE_LIMIT": "5"
}
}
}
}Edit %APPDATA%\Claude\claude_desktop_config.json with the same structure.
Important: Use absolute paths and replace /absolute/path/to/mcp-meraki with your actual project path.
Once configured, you can ask Claude to interact with your Meraki infrastructure:
"List all my Meraki organizations"
→ Uses: organizations_list
"Show me all networks in organization 123456"
→ Uses: networks_list
"Get details for device with serial Q2HP-ABCD-EFGH"
→ Uses: devices_get
"List all switch ports on device Q2HP-ABCD-EFGH"
→ Uses: switch_ports_list
"Create a new network called 'Branch Office' in org 123456 with wireless and appliance"
→ Uses: networks_create
"Update switch port 1 on device Q2HP-ABCD-EFGH to VLAN 10 and enable PoE"
→ Uses: switch_port_update
"Show me the firewall rules for network L_123456789"
→ Uses: appliance_firewall_l3_rules_get
"Get uplink status for all devices in network L_123456789"
→ Uses: monitoring_uplinks_status
"List all events in the last 24 hours for network L_123456789"
→ Uses: monitoring_events
"Show me all SSIDs in network L_123456789"
→ Uses: wireless_ssids_list
"Update SSID 0 in network L_123456789 to use WPA2-PSK with password 'SecurePassword123'"
→ Uses: wireless_ssid_update
"Get VPN settings for network L_123456789"
→ Uses: appliance_vpn_settings_get
"Create a port forwarding rule to forward port 80 to 192.168.1.100:8080"
→ Uses: appliance_port_forwarding_rules_update
"Show me connection statistics for the last hour in network L_123456789"
→ Uses: monitoring_connection_stats
"Get latency stats for network L_123456789"
→ Uses: monitoring_latency_stats
"Show me all clients connected to device Q2HP-ABCD-EFGH"
→ Uses: devices_clients
"Blink the LEDs on device Q2HP-ABCD-EFGH for 30 seconds"
→ Uses: devices_blink_leds
organizations_list- List all organizationsorganizations_get- Get organization detailsorganizations_update- Update organization settingsorganizations_inventory- Get device inventoryorganizations_licenses- List licensesorganizations_license_get- Get license detailsorganizations_api_requests- Get API usage historyorganizations_clone- Clone organization
networks_list- List networksnetworks_get- Get network detailsnetworks_create- Create networknetworks_update- Update networknetworks_delete- Delete networknetworks_bind- Bind to templatenetworks_unbind- Unbind from templatenetworks_split- Split combined networknetworks_combine- Combine networksnetworks_firmware_upgrades- Get firmware settings
devices_list- List devicesdevices_get- Get device detailsdevices_update- Update devicedevices_claim- Claim devicesdevices_remove- Remove devicedevices_blink_leds- Blink LEDsdevices_reboot- Reboot devicedevices_clients- List clientsdevices_lldp_cdp- Get LLDP/CDP infodevices_loss_latency- Get loss/latency historydevices_management_interface- Get management interface
switch_ports_list- List switch portsswitch_port_get- Get port detailsswitch_port_update- Update port configurationswitch_vlans_list- List VLANsswitch_vlan_create- Create VLANswitch_stacks_list- List switch stacksswitch_stack_create- Create switch stack
wireless_ssids_list- List SSIDswireless_ssid_get- Get SSID detailswireless_ssid_update- Update SSIDwireless_rf_profiles_list- List RF profileswireless_rf_profile_create- Create RF profilewireless_bluetooth_get- Get Bluetooth settingswireless_bluetooth_update- Update Bluetooth settingswireless_air_marshal- Get Air Marshal results
appliance_vlans_list- List VLANsappliance_vlan_create- Create VLANappliance_firewall_l3_rules_get- Get firewall rulesappliance_firewall_l3_rules_update- Update firewall rulesappliance_vpn_settings_get- Get VPN settingsappliance_vpn_settings_update- Update VPN settingsappliance_one_to_one_nat_rules_get- Get 1:1 NAT rulesappliance_one_to_one_nat_rules_update- Update 1:1 NAT rulesappliance_port_forwarding_rules_get- Get port forwarding rulesappliance_port_forwarding_rules_update- Update port forwarding rulesappliance_traffic_shaping_get- Get traffic shaping rules
monitoring_uplinks_status- Get uplink statusmonitoring_connection_stats- Get connection statisticsmonitoring_latency_stats- Get latency statisticsmonitoring_events- Get event logmonitoring_client_health- Get client healthmonitoring_device_performance- Get device performancemonitoring_network_traffic- Get traffic analysis
alerts_settings_get- Get alert settingsalerts_settings_update- Update alert settingswebhooks_list- List webhookswebhook_create- Create webhookwebhook_update- Update webhookwebhook_delete- Delete webhookwebhook_test- Test webhook
camera_quality_get- Get quality settingscamera_quality_update- Update quality settingscamera_video_settings_get- Get video settingscamera_video_settings_update- Update video settingscamera_snapshot- Generate snapshotcamera_video_link- Get video linkcamera_zones_get- Get detection zonescamera_sense_get- Get MV Sense settingscamera_sense_update- Update MV Sense settingscamera_analytics_overview- Get analytics overview
Total: 79 tools
mcp-meraki/
├── src/
│ ├── index.ts # Main MCP server
│ ├── meraki-client.ts # HTTP client with rate limiting
│ ├── types.ts # TypeScript type definitions
│ ├── utils.ts # Utilities (retry, pagination, cache)
│ └── tools/
│ ├── organizations.ts # Organization tools
│ ├── networks.ts # Network tools
│ ├── devices.ts # Device tools
│ ├── switch.ts # Switch tools
│ ├── wireless.ts # Wireless tools
│ ├── appliance.ts # Appliance tools
│ ├── monitoring.ts # Monitoring tools
│ ├── alerts.ts # Alert/webhook tools
│ └── camera.ts # Camera tools
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
├── .env # Environment variables (create from .env.example)
└── README.md
# Build the project
npm run build
# Watch mode (rebuild on changes)
npm run dev
# Run the server
npm start- Add type definitions to
src/types.ts - Create tool definition and handler in appropriate
src/tools/*.tsfile - Export tool and handler from the file
- Tools are automatically registered in
src/index.ts
Enable debug logging by setting DEBUG=true in your .env file or environment:
DEBUG=true npm startThe server respects Meraki's API rate limits:
- Default: 5 requests per second per organization
- Configurable via
MERAKI_RATE_LIMITenvironment variable - Automatic retry with exponential backoff on rate limit errors (429)
- Automatic retry on server errors (5xx)
All errors are formatted consistently:
{
"error": true,
"tool": "networks_get",
"status": 404,
"statusText": "Not Found",
"message": "Network not found",
"errors": ["Network L_123456789 not found"],
"endpoint": "/networks/L_123456789"
}- Never commit
.envfile - It contains your API key - Use read-only API keys when possible
- Restrict API key to specific organizations in Dashboard
- Enable IP restrictions on your API key if deploying to servers
- Rotate API keys regularly
- Check Claude Desktop logs:
~/Library/Logs/Claude/mcp*.log - Verify absolute path in config is correct
- Ensure project is built:
npm run build - Check Node.js version:
node --version(requires 18+)
- Verify API key is correct in
.env - Check API key is enabled in Dashboard
- Ensure API key has access to the organization
- Reduce
MERAKI_RATE_LIMITif hitting limits - Check for concurrent requests
- Review API usage:
organizations_api_requests
MIT
Contributions are welcome! Please feel free to submit issues or pull requests.
Built with: