Meraki Magic MCP
Un servidor MCP basado en Python para el panel de control de Cisco Meraki, que proporciona herramientas para consultar la API y descubrir, monitorear y gestionar tu entorno Meraki.
Documentación
Meraki Magic MCP
Meraki Magic es un servidor MCP (Model Context Protocol) basado en Python para el panel de control Meraki de Cisco. Meraki Magic proporciona herramientas para consultar la API del panel de control de Meraki para descubrir, monitorear y gestionar tu entorno Meraki.
Dos versiones disponibles
🚀 MCP Dinámico (Recomendado) - meraki-mcp-dynamic.py
- ~804 endpoints de API expuestos automáticamente
- 100% de cobertura del SDK - todos los métodos de la API de Meraki disponibles
- Actualización automática al actualizar el SDK de Meraki
- Sin codificación manual requerida para nuevos endpoints
📋 MCP Manual - meraki-mcp.py
- 40 endpoints seleccionados con esquemas detallados
- Seguridad de tipos con validación Pydantic
- Lógica de negocio personalizada para casos de uso específicos
- Documentación clara para operaciones comunes
Características
El MCP Dinámico incluye:
- Toda la gestión de organizaciones (administradores, redes, dispositivos, inventario, licencias)
- Gestión inalámbrica completa (SSIDs, perfiles RF, Air Marshal, analíticas)
- Gestión completa de switches (puertos, VLANs, stacks, QoS, políticas de acceso)
- Aparatos/seguridad avanzados (todos los tipos de firewall, NAT, VPN, modelado de tráfico)
- Gestión de cámaras (analíticas, calidad, horarios, permisos)
- Monitoreo de red (eventos, alertas, salud, rendimiento)
- Herramientas de solución de problemas en vivo (ping, prueba de cable, tabla ARP)
- Webhooks y automatización (perfiles de alerta, lotes de acciones)
- Y más de 700 endpoints adicionales...
El MCP Manual incluye:
- Descubrimiento y gestión de redes
- Descubrimiento y configuración de dispositivos
- Descubrimiento de clientes y gestión de políticas
- Gestión de SSIDs inalámbricos
- Configuración de puertos de switch y VLANs
- Reglas básicas de firewall
- Configuración de cámaras
Instalación rápida
Requisitos previos
- Python 3.13+
- Claude Desktop (o cualquier cliente compatible con MCP)
- Clave de API del panel de control de Meraki
- ID de organización de Meraki
Vía rápida
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
# Set credentials in the MCP client env block (see Configuration)
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
# Set credentials in the MCP client env block (see Configuration)
📖 Para instrucciones detalladas paso a paso, consulta INSTALL.md
Configuración
El servidor lee las credenciales del entorno del proceso. No crees un archivo de proyecto .env.
Para Claude Desktop / Cursor (stdio), colócalas en el bloque env de la configuración del cliente:
"env": {
"MERAKI_API_KEY": "your_api_key_here",
"MERAKI_ORG_ID": "your_org_id_here",
"MERAKI_BASE_URL": "https://api.meraki.com/api/v1",
"MERAKI_PYTHON_SDK_CALLER": "MagicMCP CiscoDevNet",
"READ_ONLY_MODE": "true"
}
Para CLI, HTTP o Docker, exporta las mismas variables en tu shell:
export MERAKI_API_KEY="your_api_key_here"
export MERAKI_ORG_ID="your_org_id_here"
export MERAKI_BASE_URL="https://api.meraki.com/api/v1"
export MERAKI_PYTHON_SDK_CALLER="MagicMCP CiscoDevNet"
export READ_ONLY_MODE=true
Ajuste opcional: ENABLE_CACHING, CACHE_TTL_SECONDS, ENABLE_FILE_CACHING, MAX_RESPONSE_TOKENS, MAX_PER_PAGE, RESPONSE_CACHE_DIR.
Obtén tu clave de API en: Panel de control de Meraki → Organización → Configuración → Acceso a la API del panel de control
READ_ONLY_MODE tiene como valor predeterminado true para bloquear operaciones de crear/actualizar/eliminar/remover. Establece READ_ONLY_MODE=false solo cuando tengas la intención de realizar cambios. Las llamadas de eliminar/remover también requieren confirm_destructive_action=true.
Usa MERAKI_BASE_URL para apuntar el servidor MCP a otra región de Meraki o URI base compatible con la API del panel de control.
Las llamadas a la API identifican este servidor con el llamador predeterminado MagicMCP CiscoDevNet. Establece MERAKI_PYTHON_SDK_CALLER en el bloque env del cliente MCP o en el entorno del proceso para usar tu propio identificador de aplicación y proveedor. Sigue el formato de agente de usuario de Meraki.
Opciones de implementación
Hay tres formas de implementar Meraki Magic MCP:
| Método | Mejor para | Transporte |
|---|---|---|
| Local (stdio) | Claude Desktop / Cursor en la misma máquina | stdio |
| Servidor HTTP | Acceso remoto, servidor de equipo compartido | StreamableHTTP |
| Docker | Implementaciones contenedorizadas / de producción | StreamableHTTP |
Configuración de Claude Desktop
MCP Dinámico (Recomendado)
-
Localiza el archivo de configuración de Claude:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
Edita la configuración con tus rutas:
Ejemplo en macOS:
{
"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"
],
"env": {
"MERAKI_API_KEY": "your_api_key_here",
"MERAKI_ORG_ID": "your_org_id_here",
"MERAKI_BASE_URL": "https://api.meraki.com/api/v1",
"MERAKI_PYTHON_SDK_CALLER": "MagicMCP CiscoDevNet",
"READ_ONLY_MODE": "true"
}
}
}
}
Ejemplo en Windows:
{
"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"
],
"env": {
"MERAKI_API_KEY": "your_api_key_here",
"MERAKI_ORG_ID": "your_org_id_here",
"MERAKI_BASE_URL": "https://api.meraki.com/api/v1",
"MERAKI_PYTHON_SDK_CALLER": "MagicMCP CiscoDevNet",
"READ_ONLY_MODE": "true"
}
}
}
}
Reemplaza /path/to/ con tu ruta de instalación real. Usuarios de Windows: usa barras diagonales / e incluye .exe.
-
Reinicia Claude Desktop (sal por completo y vuelve a abrirlo)
-
Verifica: Pregunta a Claude "¿Qué servidores MCP están disponibles?"
📖 Instrucciones de configuración detalladas: INSTALL.md
MCP Manual (Original)
Usa meraki-mcp.py en lugar de meraki-mcp-dynamic.py en la configuración anterior.
Ambos MCPs (Avanzado)
Puedes ejecutar ambos simultáneamente:
{
"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"],
"env": {
"MERAKI_API_KEY": "your_api_key_here",
"MERAKI_ORG_ID": "your_org_id_here",
"READ_ONLY_MODE": "true"
}
},
"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"],
"env": {
"MERAKI_API_KEY": "your_api_key_here",
"MERAKI_ORG_ID": "your_org_id_here",
"READ_ONLY_MODE": "true"
}
}
}
}
Transporte HTTP
Ejecuta el servidor MCP a través de HTTP para acceso remoto o uso compartido en equipo:
export MERAKI_API_KEY="your_api_key_here"
export MERAKI_ORG_ID="your_org_id_here"
export MCP_TRANSPORT=http
export MCP_HOST=127.0.0.1 # Use 0.0.0.0 for remote access
export MCP_PORT=8000
python meraki-mcp-dynamic.py
# Server available at http://127.0.0.1:8000/mcp
Conecta Claude Desktop a un servidor HTTP usando mcp-remote (requiere Node.js):
{
"mcpServers": {
"Meraki_Magic_MCP": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:8000/mcp"]
}
}
}
Implementación con Docker
La forma más rápida de implementar de forma remota:
export MERAKI_API_KEY="your_api_key_here"
export MERAKI_ORG_ID="your_org_id_here"
docker compose up -d
# Server available at http://localhost:8000/mcp
📖 Instrucciones completas de HTTP y Docker: INSTALL.md
Mantenerse actualizado
El MCP dinámico se mantiene automáticamente al día con la API de Meraki:
# Manually update SDK
pip install --upgrade meraki
Luego reinicia Claude Desktop. Consulta UPDATE_GUIDE.md para más detalles.
Características de rendimiento y seguridad
El MCP dinámico incluye varias optimizaciones:
✅ Caché de respuestas - Las operaciones de solo lectura se almacenan en caché durante 5 minutos (reduce las llamadas a la API en un 50-90%) ✅ Modo de solo lectura - Modo de seguridad opcional que bloquea operaciones de escritura ✅ Reintento automático - Reintento automático en fallos (3 intentos) ✅ Manejo de límite de velocidad - Espera automáticamente cuando se alcanza el límite de velocidad ✅ Etiquetado de operaciones - Herramientas etiquetadas como [LECTURA], [ESCRITURA] o [VARIOS]
Consulta OPTIMIZATIONS.md para más detalles.
Documentación
- INSTALL.md - Guía de instalación detallada (macOS y Windows)
- QUICKSTART.md - Comienza rápidamente con ejemplos
- README-DYNAMIC.md - Detalles técnicos del MCP dinámico
- COMPARISON.md - Compara los enfoques manual y dinámico
- UPDATE_GUIDE.md - Mantén tu MCP actualizado con las últimas APIs
- OPTIMIZATIONS.md - Características de rendimiento y seguridad
Cómo funciona
El MCP dinámico proporciona dos formas de acceder a las APIs de Meraki:
-
Herramientas pre-registradas (12 operaciones más comunes):
getOrganizations,getOrganizationAdmins,getOrganizationNetworksgetNetworkClients,getNetworkEvents,getDeviceSwitchPorts- Y 6 operaciones comunes más
-
Llamador de API genérico (
call_meraki_api):- Accede a TODOS los 804+ métodos de la API de Meraki
- Ejemplo:
call_meraki_api(section="appliance", method="getNetworkApplianceFirewallL3FirewallRules", parameters={"networkId": "L_123"}) - Los métodos destructivos requieren
confirm_destructive_action=trueenparameters
Ejemplo de uso
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"
Soporte
- Problemas: GitHub Issues
- Documentación de la API de Meraki: developer.cisco.com/meraki/api-v1
- Protocolo MCP: modelcontextprotocol.io
Contribuciones
¡Las contribuciones son bienvenidas! Por favor:
- Haz un fork del repositorio
- Crea una rama de características
- Envía una solicitud de extracción (pull request)
Referencia de herramientas del MCP Manual
Las siguientes herramientas están disponibles en el MCP manual (meraki-mcp.py). El MCP dinámico proporciona acceso a estas y a más de 760 endpoints adicionales a través de la herramienta genérica call_meraki_api.
Guía de herramientas de red
Esta guía proporciona una visión general completa de las herramientas de red seleccionadas disponibles en el MCP manual, organizadas por categoría y funcionalidad.
Tabla de contenidos
- Herramientas de gestión de organizaciones
- Herramientas de gestión de redes
- Herramientas de gestión de dispositivos
- Herramientas de gestión inalámbrica
- Herramientas de gestión de switches
- Herramientas de gestión de aparatos
- Herramientas de gestión de cámaras
- Herramientas de automatización de red
- Herramientas de monitoreo avanzado
- Herramientas de dispositivos en vivo
Herramientas de gestión de organizaciones
Operaciones básicas de organización
get_organizations()- Obtener una lista de organizaciones a las que el usuario tiene accesoget_organization_details(org_id)- Obtener detalles de una organización específicaget_organization_status(org_id)- Obtener el estado y la salud de una organizaciónget_organization_inventory(org_id)- Obtener el inventario de una organizaciónget_organization_license(org_id)- Obtener el estado de licencia de una organizaciónget_organization_conf_change(org_id)- Obtener el estado de cambios de la organización
Gestión avanzada de organizaciones
get_organization_admins(org_id)- Obtener una lista de administradores de la organizacióncreate_organization_admin(org_id, email, name, org_access, tags, networks)- Crear un nuevo administrador de organizaciónget_organization_api_requests(org_id, timespan)- Obtener el historial de solicitudes de API de la organizaciónget_organization_webhook_logs(org_id, timespan)- Obtener registros de webhooks de la organización
Gestión de redes
get_networks(org_id)- Obtener una lista de redes de Merakicreate_network(name, tags, productTypes, org_id, copyFromNetworkId)- Crear una nueva reddelete_network(network_id, confirm_destructive_action)- Eliminar una red en Merakiget_network_details(network_id)- Obtener detalles de una red específicaupdate_network(network_id, update_data)- Actualizar las propiedades de una red
Herramientas de gestión de redes
Monitoreo de redes
get_network_events(network_id, timespan, per_page)- Obtener el historial de eventos de la redget_network_event_types(network_id)- Obtener los tipos de eventos de red disponiblesget_network_alerts_history(network_id, timespan)- Obtener el historial de alertas de la redget_network_alerts_settings(network_id)- Obtener la configuración de alertas de la redupdate_network_alerts_settings(network_id, defaultDestinations, alerts)- Actualizar la configuración de alertas de la red
Gestión de clientes
get_clients(network_id, timespan)- Obtener una lista de clientes de una redget_client_details(network_id, client_id)- Obtener detalles de un cliente específicoget_client_usage(network_id, client_id)- Obtener el historial de uso de un clienteget_client_policy(network_id, client_id)- Obtener la política de un cliente específicoupdate_client_policy(network_id, client_id, device_policy, group_policy_id)- Actualizar la política de un cliente
Tráfico y análisis de red
get_network_traffic(network_id, timespan)- Obtener datos de análisis de tráfico de una red
Herramientas de gestión de dispositivos
Información del dispositivo
get_devices(org_id)- Obtener una lista de dispositivos de Merakiget_network_devices(network_id)- Obtener una lista de dispositivos en una red específicaget_device_details(serial)- Obtener detalles de un dispositivo específico por número de serieget_device_status(serial)- Obtener el estado actual de un dispositivoget_device_uplink(serial)- Obtener el estado de enlace ascendente de un dispositivo
Operaciones con dispositivos
update_device(serial, device_settings)- Actualizar un dispositivo en la organización de Merakiclaim_devices(network_id, serials)- Reclamar uno o más dispositivos en una red de Merakiremove_device(network_id, serial, confirm_destructive_action)- Eliminar un dispositivo de su redreboot_device(serial)- Reiniciar un dispositivo
Monitoreo de dispositivos
get_device_clients(serial, timespan)- Obtener clientes conectados a un dispositivo específico
Herramientas de dispositivos en vivo
Diagnóstico de red
ping_device(serial, target_ip, count)- Hacer ping a un dispositivo desde otro dispositivoget_device_ping_results(serial, ping_id)- Obtener resultados de una prueba de ping de dispositivocable_test_device(serial, ports)- Ejecutar prueba de cable en puertos del dispositivoget_device_cable_test_results(serial, cable_test_id)- Obtener resultados de una prueba de cable de dispositivo
Control de dispositivos
blink_device_leds(serial, duration)- Parpadear los LED del dispositivo para identificaciónwake_on_lan_device(serial, mac)- Enviar paquete wake-on-LAN a un dispositivo
Herramientas de gestión inalámbrica
Operaciones inalámbricas básicas
get_wireless_ssids(network_id)- Obtener SSIDs inalámbricos de una redupdate_wireless_ssid(network_id, ssid_number, ssid_settings)- Actualizar un SSID inalámbricoget_wireless_settings(network_id)- Obtener la configuración inalámbrica de una red
Gestión inalámbrica avanzada
get_wireless_rf_profiles(network_id)- Obtener perfiles RF inalámbricos de una redcreate_wireless_rf_profile(network_id, name, band_selection_type, **kwargs)- Crear un perfil RF inalámbricoget_wireless_channel_utilization(network_id, timespan)- Obtener el historial de utilización de canales inalámbricosget_wireless_signal_quality(network_id, timespan)- Obtener el historial de calidad de señal inalámbricaget_wireless_connection_stats(network_id, timespan)- Obtener estadísticas de conexión inalámbricaget_wireless_client_connectivity_events(network_id, client_id, timespan)- Obtener eventos de conectividad de clientes inalámbricos
Herramientas de gestión de switches
Operaciones básicas de switches
get_switch_ports(serial)- Obtener puertos de un switchupdate_switch_port(serial, port_id, name, tags, enabled, vlan)- Actualizar un puerto de switchget_switch_vlans(network_id)- Obtener VLANs de una redcreate_switch_vlan(network_id, vlan_id, name, subnet, appliance_ip)- Crear una VLAN de switch
Gestión avanzada de switches
get_switch_port_statuses(serial)- Obtener estados de puertos de switchcycle_switch_ports(serial, ports)- Ciclar (reiniciar) puertos de switchget_switch_access_control_lists(network_id)- Obtener listas de control de acceso de switchupdate_switch_access_control_lists(network_id, rules)- Actualizar listas de control de acceso de switchget_switch_qos_rules(network_id)- Obtener reglas de QoS de switchcreate_switch_qos_rule(network_id, vlan, protocol, src_port, **kwargs)- Crear una regla de QoS de switch
Herramientas de gestión de aparatos
Operaciones Básicas de Appliance
get_security_center(network_id)- Obtener información de seguridad para una redget_vpn_status(network_id)- Obtener estado de VPN para una redget_firewall_rules(network_id)- Obtener reglas de firewall para una redupdate_firewall_rules(network_id, rules)- Actualizar reglas de firewall para una red
Gestión Avanzada de Appliance
get_appliance_vpn_site_to_site(network_id)- Obtener configuración VPN sitio a sitio del applianceupdate_appliance_vpn_site_to_site(network_id, mode, hubs, subnets)- Actualizar configuración VPN sitio a sitio del applianceget_appliance_content_filtering(network_id)- Obtener configuración de filtrado de contenido del applianceupdate_appliance_content_filtering(network_id, **kwargs)- Actualizar configuración de filtrado de contenido del applianceget_appliance_security_events(network_id, timespan)- Obtener eventos de seguridad del applianceget_appliance_traffic_shaping(network_id)- Obtener configuración de modelado de tráfico del applianceupdate_appliance_traffic_shaping(network_id, global_bandwidth_limits)- Actualizar configuración de modelado de tráfico del appliance
Herramientas de Gestión de Cámaras
Operaciones Básicas de Cámaras
get_camera_video_settings(network_id, serial)- Obtener configuración de video para una cámaraget_camera_quality_settings(network_id)- Obtener configuración de calidad y retención para cámaras
Gestión Avanzada de Cámaras
get_camera_analytics_live(serial)- Obtener analíticas en vivo de la cámaraget_camera_analytics_overview(serial, timespan)- Obtener resumen de analíticas de la cámaraget_camera_analytics_zones(serial)- Obtener zonas de analíticas de la cámaragenerate_camera_snapshot(serial, timestamp)- Generar una captura de pantalla de la cámaraget_camera_sense(serial)- Obtener configuración de sensor de la cámaraupdate_camera_sense(serial, sense_enabled, mqtt_broker_id, audio_detection)- Actualizar configuración de sensor de la cámara
Herramientas de Automatización de Redes
Lotes de Acciones
create_action_batch(org_id, actions, confirmed, synchronous)- Crear un lote de acciones para operaciones masivasget_action_batch_status(org_id, batch_id)- Obtener estado del lote de accionesget_action_batches(org_id)- Obtener todos los lotes de acciones para una organización
Definiciones de Esquemas
El MCP manual incluye esquemas Pydantic completos para validación de datos:
SsidUpdateSchema- Configuración de SSID inalámbricoFirewallRule- Configuración de reglas de firewallDeviceUpdateSchema- Parámetros de actualización de dispositivosNetworkUpdateSchema- Parámetros de actualización de redAdminCreationSchema- Parámetros de creación de administradoresActionBatchSchema- Configuración de lotes de accionesVpnSiteToSiteSchema- Configuración VPN sitio a sitioContentFilteringSchema- Configuración de filtrado de contenidoTrafficShapingSchema- Configuración de modelado de tráficoCameraSenseSchema- Configuración de sensor de cámaraSwitchQosRuleSchema- Configuración de reglas QoS de switch
Mejores Prácticas
- Manejo de Errores: Siempre verifique las respuestas de la API para detectar errores
- Límites de Tasa: La API de Meraki tiene límites de tasa; use demoras apropiadas (o use MCP dinámico con caché)
- Operaciones Masivas: Use lotes de acciones para operaciones masivas
- Validación: Use los esquemas proporcionados para la validación de datos
- Monitoreo: Verifique regularmente los eventos y alertas de la red
- Seguridad: Mantenga las claves de API seguras y rótelas regularmente
Solución de Problemas
Problemas Comunes
- Errores de Autenticación: Verifique que su clave de API sea correcta y tenga los permisos apropiados
- Límites de Tasa: Si encuentra límites de tasa, implemente demoras entre solicitudes (o use MCP dinámico con caché)
- Red No Encontrada: Asegúrese de que el ID de red sea correcto y accesible
- Dispositivo No Encontrado: Verifique que el número de serie del dispositivo sea correcto y que el dispositivo esté en línea
Información de Depuración
Habilite el registro de depuración configurando el nivel de registro apropiado en su entorno.
⚠️ Aviso Legal
IMPORTANTE: AVISO DE USO EN PRODUCCIÓN
Este software se proporciona "TAL CUAL" sin garantía de ningún tipo, ya sea expresa o implícita. Los autores y colaboradores no hacen representaciones ni garantías sobre la idoneidad, confiabilidad, disponibilidad, precisión o integridad de este software para ningún propósito.
ÚSELO BAJO SU PROPIO RIESGO: Este servidor MCP está diseñado para fines de desarrollo, prueba y educativos. Ejecutar este software en entornos de producción es completamente bajo su propio riesgo. Los autores y colaboradores no son responsables de ningún daño, pérdida de datos, interrupciones del servicio u otros problemas que puedan surgir del uso de este software en entornos de producción.
CONSIDERACIONES DE SEGURIDAD: Este software requiere acceso a sus credenciales de la API de Meraki. Asegúrese de que:
- Las claves de API se almacenen de forma segura y no se comprometan al control de versiones
- Las claves de API tengan permisos apropiados y se roten regularmente
- El acceso a la red esté debidamente asegurado
- Se realicen auditorías de seguridad regularmente
SIN GARANTÍA: Los autores renuncian a todas las garantías, incluidas pero no limitadas a garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores serán responsables de cualquier reclamo, daño u otra responsabilidad que surja del uso de este software.
SOPORTE: Este es un proyecto de código abierto. Para uso en producción, considere implementar mecanismos adicionales de prueba, monitoreo y soporte apropiados para su entorno.
Licencia
Consulte el archivo LICENSE para más detalles.