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étodoMejor paraTransporte
Local (stdio)Claude Desktop / Cursor en la misma máquinastdio
Servidor HTTPAcceso remoto, servidor de equipo compartidoStreamableHTTP
DockerImplementaciones contenedorizadas / de producciónStreamableHTTP

Configuración de Claude Desktop

MCP Dinámico (Recomendado)

  1. Localiza el archivo de configuración de Claude:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. 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.

  1. Reinicia Claude Desktop (sal por completo y vuelve a abrirlo)

  2. 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

Cómo funciona

El MCP dinámico proporciona dos formas de acceder a las APIs de Meraki:

  1. Herramientas pre-registradas (12 operaciones más comunes):

    • getOrganizations, getOrganizationAdmins, getOrganizationNetworks
    • getNetworkClients, getNetworkEvents, getDeviceSwitchPorts
    • Y 6 operaciones comunes más
  2. 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=true en parameters

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

Contribuciones

¡Las contribuciones son bienvenidas! Por favor:

  1. Haz un fork del repositorio
  2. Crea una rama de características
  3. 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

  1. Herramientas de gestión de organizaciones
  2. Herramientas de gestión de redes
  3. Herramientas de gestión de dispositivos
  4. Herramientas de gestión inalámbrica
  5. Herramientas de gestión de switches
  6. Herramientas de gestión de aparatos
  7. Herramientas de gestión de cámaras
  8. Herramientas de automatización de red
  9. Herramientas de monitoreo avanzado
  10. 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 acceso
  • get_organization_details(org_id) - Obtener detalles de una organización específica
  • get_organization_status(org_id) - Obtener el estado y la salud de una organización
  • get_organization_inventory(org_id) - Obtener el inventario de una organización
  • get_organization_license(org_id) - Obtener el estado de licencia de una organización
  • get_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ón
  • create_organization_admin(org_id, email, name, org_access, tags, networks) - Crear un nuevo administrador de organización
  • get_organization_api_requests(org_id, timespan) - Obtener el historial de solicitudes de API de la organización
  • get_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 Meraki
  • create_network(name, tags, productTypes, org_id, copyFromNetworkId) - Crear una nueva red
  • delete_network(network_id, confirm_destructive_action) - Eliminar una red en Meraki
  • get_network_details(network_id) - Obtener detalles de una red específica
  • update_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 red
  • get_network_event_types(network_id) - Obtener los tipos de eventos de red disponibles
  • get_network_alerts_history(network_id, timespan) - Obtener el historial de alertas de la red
  • get_network_alerts_settings(network_id) - Obtener la configuración de alertas de la red
  • update_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 red
  • get_client_details(network_id, client_id) - Obtener detalles de un cliente específico
  • get_client_usage(network_id, client_id) - Obtener el historial de uso de un cliente
  • get_client_policy(network_id, client_id) - Obtener la política de un cliente específico
  • update_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 Meraki
  • get_network_devices(network_id) - Obtener una lista de dispositivos en una red específica
  • get_device_details(serial) - Obtener detalles de un dispositivo específico por número de serie
  • get_device_status(serial) - Obtener el estado actual de un dispositivo
  • get_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 Meraki
  • claim_devices(network_id, serials) - Reclamar uno o más dispositivos en una red de Meraki
  • remove_device(network_id, serial, confirm_destructive_action) - Eliminar un dispositivo de su red
  • reboot_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 dispositivo
  • get_device_ping_results(serial, ping_id) - Obtener resultados de una prueba de ping de dispositivo
  • cable_test_device(serial, ports) - Ejecutar prueba de cable en puertos del dispositivo
  • get_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ón
  • wake_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 red
  • update_wireless_ssid(network_id, ssid_number, ssid_settings) - Actualizar un SSID inalámbrico
  • get_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 red
  • create_wireless_rf_profile(network_id, name, band_selection_type, **kwargs) - Crear un perfil RF inalámbrico
  • get_wireless_channel_utilization(network_id, timespan) - Obtener el historial de utilización de canales inalámbricos
  • get_wireless_signal_quality(network_id, timespan) - Obtener el historial de calidad de señal inalámbrica
  • get_wireless_connection_stats(network_id, timespan) - Obtener estadísticas de conexión inalámbrica
  • get_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 switch
  • update_switch_port(serial, port_id, name, tags, enabled, vlan) - Actualizar un puerto de switch
  • get_switch_vlans(network_id) - Obtener VLANs de una red
  • create_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 switch
  • cycle_switch_ports(serial, ports) - Ciclar (reiniciar) puertos de switch
  • get_switch_access_control_lists(network_id) - Obtener listas de control de acceso de switch
  • update_switch_access_control_lists(network_id, rules) - Actualizar listas de control de acceso de switch
  • get_switch_qos_rules(network_id) - Obtener reglas de QoS de switch
  • create_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 red
  • get_vpn_status(network_id) - Obtener estado de VPN para una red
  • get_firewall_rules(network_id) - Obtener reglas de firewall para una red
  • update_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 appliance
  • update_appliance_vpn_site_to_site(network_id, mode, hubs, subnets) - Actualizar configuración VPN sitio a sitio del appliance
  • get_appliance_content_filtering(network_id) - Obtener configuración de filtrado de contenido del appliance
  • update_appliance_content_filtering(network_id, **kwargs) - Actualizar configuración de filtrado de contenido del appliance
  • get_appliance_security_events(network_id, timespan) - Obtener eventos de seguridad del appliance
  • get_appliance_traffic_shaping(network_id) - Obtener configuración de modelado de tráfico del appliance
  • update_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ámara
  • get_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ámara
  • get_camera_analytics_overview(serial, timespan) - Obtener resumen de analíticas de la cámara
  • get_camera_analytics_zones(serial) - Obtener zonas de analíticas de la cámara
  • generate_camera_snapshot(serial, timestamp) - Generar una captura de pantalla de la cámara
  • get_camera_sense(serial) - Obtener configuración de sensor de la cámara
  • update_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 masivas
  • get_action_batch_status(org_id, batch_id) - Obtener estado del lote de acciones
  • get_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ámbrico
  • FirewallRule - Configuración de reglas de firewall
  • DeviceUpdateSchema - Parámetros de actualización de dispositivos
  • NetworkUpdateSchema - Parámetros de actualización de red
  • AdminCreationSchema - Parámetros de creación de administradores
  • ActionBatchSchema - Configuración de lotes de acciones
  • VpnSiteToSiteSchema - Configuración VPN sitio a sitio
  • ContentFilteringSchema - Configuración de filtrado de contenido
  • TrafficShapingSchema - Configuración de modelado de tráfico
  • CameraSenseSchema - Configuración de sensor de cámara
  • SwitchQosRuleSchema - Configuración de reglas QoS de switch

Mejores Prácticas

  1. Manejo de Errores: Siempre verifique las respuestas de la API para detectar errores
  2. Límites de Tasa: La API de Meraki tiene límites de tasa; use demoras apropiadas (o use MCP dinámico con caché)
  3. Operaciones Masivas: Use lotes de acciones para operaciones masivas
  4. Validación: Use los esquemas proporcionados para la validación de datos
  5. Monitoreo: Verifique regularmente los eventos y alertas de la red
  6. Seguridad: Mantenga las claves de API seguras y rótelas regularmente

Solución de Problemas

Problemas Comunes

  1. Errores de Autenticación: Verifique que su clave de API sea correcta y tenga los permisos apropiados
  2. Límites de Tasa: Si encuentra límites de tasa, implemente demoras entre solicitudes (o use MCP dinámico con caché)
  3. Red No Encontrada: Asegúrese de que el ID de red sea correcto y accesible
  4. 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.