Skip to main content
Glama
Packet-Tracer-MCP

Packet-Tracer-MCP

by cvz-dev

Packet Tracer MCP

MCP server that lets Claude Code build and configure topologies in Cisco Packet Tracer by speaking natural language: create devices, cable them, apply IOS commands, VLANs, OSPF, NAT, ACLs, VoIP, or reproduce an entire network from a diagram image.

Tu -> Claude Code --stdio--> mcp_server.py --HTTP--> bridge :54321
                                                         |
                              Packet Tracer  <-----------+
                              modulo Builder:
                                bridge.js         (pagina: hace el polling)
                                bridge_runner.js  (motor: ejecuta y devuelve)

The HTTP bridge runs inside the MCP server: no separate terminal is needed to start it. And the polling loop lives inside the Builder module: nothing needs to be pasted into Packet Tracer either.

Requirements

uv

manages Python and dependencies

Cisco Packet Tracer

tested on 9.0.0 (Windows)

Claude Code

MCP client

Related MCP server: packet-tracer-mcp

Getting started (one time only)

1. Dependencies

uv sync

2. Install the Builder module in Packet Tracer

packet_tracer/Builder.pts is the script module that defines inside PT the functions this project uses (addDevice, addLink, addModule, configureIosDevice, configurePcIp, getDevices, removeLink, addLabel, saveTopology) and the bridge that connects it to the HTTP server. Without this module nothing works.

In Packet Tracer (English menus, verified on PT 9.0.0):

  1. Extensions -> Scripting -> Configure PT Script Modules

  2. Add -> select packet_tracer/Builder.pts from this repo

  3. Select Builder in the list -> Settings -> check On Startup, so the module starts on its own every time you open PT

  4. To confirm it is running: the Builder Code Editor entry must appear in the Extensions menu. If it does not appear, the module did not start.

On startup, the module opens the Builder Code Editor window on its own. That window hosts the polling loop, so it must stay open while you work; if its title says "bridge activo", the bridge is working.

3. Open the project in Claude Code

From a terminal, in the project folder:

claude

Claude Code reads .mcp.json and starts the MCP server (and with it, the HTTP bridge) automatically. The first time it may ask you to confirm that you trust the folder.

To check that the server is connected, type /mcp inside Claude Code: packet-tracer should appear with its tools.

Daily use

1. Abre Packet Tracer
   -> la ventana "Builder Code Editor" se abre sola y debe quedarse abierta

2. En una terminal, en la carpeta del proyecto:
      cd ruta/al/pt_MCP
      claude

3. Dentro de Claude Code:
      /pt-iniciar     -> confirma que las 3 piezas responden

Nothing else needs to be started: not main.py, no pasting scripts into Packet Tracer, no extra terminals.

And from there, in natural language:

  • "Create two 2911 routers connected by serial with 10.0.0.0/30 and one PC on each LAN"

  • /pt-desde-imagen diagramas/ejemplo-red1.jpeg — reproduce the topology from a diagram

  • "Configure VLAN 10 VENTAS on SW1 and put ports 1-4 in access"

If something does not appear on the canvas, ask Claude to call verificar_entorno(): it tells you which of the three pieces is down and how to bring it back up.

Structure

File

Role

mcp_server.py

MCP server: 38 network tools + embedded HTTP bridge

main.py

FastAPI app for the bridge (command and result queues)

packet_tracer/Builder.pts

PT script module, ready to import

packet_tracer/bridge.js

Polling loop (goes in the module's Custom Interfaces)

packet_tracer/bridge_runner.js

Executor with return channel (goes in Script Engine)

CLAUDE.md

Instructions and rules that Claude Code follows

.claude/commands/

/pt-iniciar and /pt-desde-imagen

diagramas/

Input diagrams for /pt-desde-imagen (see its README)

build_red1.py

Standalone script that talks directly to the bridge: example and debugging without Claude

The two .js files in packet_tracer/ are already inside Builder.pts; they are loose in the repo so they can be read, versioned, and re-imported if needed.

uv run python main.py still works to start the bridge on its own, without MCP (that is what those debugging scripts need).

How a command travels

  1. Claude calls an MCP tool, which translates it into a line of PT JS.

  2. mcp_server.py queues it with POST /add_command.

  3. bridge.js, inside the Builder Code Editor window, picks it up with GET /next_command (every 2 s) and calls $se('runCodeBridge', codigo).

  4. bridge_runner.js runs it in the script engine and, if it returns a value, hands it back to the page with evaluateJavaScriptAsync.

  5. The page publishes it with POST /command_result and mcp_server.py picks it up.

Step 4 is necessary because $se() only confirms that it dispatched the call (resolves to true), it never returns the value of the executed code.

Each request travels wrapped in a unique tag (a1b2c3d4|...) and only the result that carries it back is accepted. Without that, a late response stays in the queue and the next request picks up the wrong response.

Known limitations

  • Packet Tracer does not expose the output of IOS commands: hacer_ping() and obtener_tabla_routing() send the command, but its output is only visible in the device console inside PT. API queries (getDevices(), port status) do return data.

  • crear_dispositivo(), conectar_dispositivos(), agregar_modulo_router() and eliminar_conexion() confirm the actual result ([OK] / [ERROR]). The rest of the write commands (IOS configuration) are queued without confirmation: Exito: Comando enviado means queued, not executed.

  • When creating certain devices, PT automatically adds a Power Distribution Device0 to the canvas. It shows up in inventories and is not an error.

  • obtener_puertos_dispositivo() reads the device's actual ports in PT, including those on installed cards, and reports which ones are free.

  • diagnosticar_red() does not see 802.1Q subinterfaces, VLANs, or routing tables: it reporting no failures does not guarantee connectivity.

  • The Builder Code Editor window must stay open: that is where the loop lives.

Available Tools

38 tools
agregar_etiquetaA

Agrega una etiqueta de texto al canvas de Packet Tracer. Útil para documentar zonas de la topología (ej: 'RED CORPORATIVA', 'DMZ', 'ISP'). Ejemplo: agregar_etiqueta('SEDE CENTRAL', 200, 50)

Inputs: x (required), y (required), texto (required). Returns: result

agregar_modulo_routerA

Instala una tarjeta de expansion en un router y CONFIRMA que los puertos nuevos aparecieron.

REGLA OBLIGATORIA - CONEXIONES SERIALES: Los routers no traen puertos seriales de fabrica. Antes de conectar un cable 'serial' hay que instalar la tarjeta en AMBOS routers.

Tarjeta serial segun el modelo: ISR (1941, 2901, 2911, ISR4321) -> HWIC-2T clasicos (1841, 2811, 2620XM) -> WIC-2T Con modulo='auto' (por defecto) se elige la que corresponde al modelo real del router en PT. Un 2911 tambien acepta WIC-2T, pero HWIC-2T es la propia de la familia ISR.

Flujo correcto para un enlace serial:

  1. crear_dispositivo('R1', '2911')

  2. crear_dispositivo('R2', '2911')

  3. agregar_modulo_router('R1') <- instala HWIC-2T

  4. agregar_modulo_router('R2')

  5. conectar_dispositivos('R1','Serial0/0/0','R2','Serial0/0/0','serial')

  6. configurar_dispositivo('R1', 'interface Serial0/0/0 ...')

Otros modulos: WIC-1T, WIC-2A/S, NM-4A/S, NM-2FE2W, NM-1FE-TX, HWIC-4ESW, HWIC-8A. El slot 0 es el primero libre en el chasis.

No hace falta apagar el router: PT admite la instalacion en caliente por API.

Inputs: nombre (required), slot, modulo. Returns: result

analizar_imagen_topologiaA

Carga una imagen de diagrama de red para que Claude la vea y reproduzca la topología en Packet Tracer.

Devuelve la imagen como contenido visual real (no base64 en texto) más las instrucciones de construcción. Formatos: PNG, JPG, JPEG, GIF, WEBP.

La ruta puede ser absoluta o relativa a la carpeta del proyecto. Ejemplo: analizar_imagen_topologia('diagramas/ejemplo-red1.jpeg')

Inputs: ruta_imagen (required).

asignar_puerto_vlanA

Asigna un puerto de un switch a una VLAN en modo access o trunk.

Modo access: un solo dispositivo final (PC, teléfono, servidor). Modo trunk: enlace entre switches o switch↔router (router-on-a-stick).

Ejemplo access: asignar_puerto_vlan('SW1', 'FastEthernet0/1', 10) Ejemplo trunk: asignar_puerto_vlan('SW1', 'GigabitEthernet0/1', 10, 'trunk')

Inputs: puerto (required), switch (required), vlan_id (required), modo. Returns: result

conectar_dispositivosA

Conecta dos dispositivos en Packet Tracer con un cable.

FLUJO OBLIGATORIO: Siempre llama esta función después de crear_dispositivo(). Sin cables físicos los dispositivos NO se pueden configurar ni comunicar.

IMPORTANTE: Las interfaces son OBLIGATORIAS. Debes especificar la interfaz exacta de cada extremo. Usa obtener_puertos_dispositivo() si no sabes qué interfaces tiene un dispositivo.

Interfaces comunes por modelo: Router 2911: GigabitEthernet0/0, GigabitEthernet0/1, GigabitEthernet0/2, Serial0/0/0, Serial0/0/1 Router 1841: FastEthernet0/0, FastEthernet0/1, Serial0/0/0, Serial0/0/1 Switch 2960: FastEthernet0/1 … FastEthernet0/24, GigabitEthernet0/1, GigabitEthernet0/2 Switch 3560: FastEthernet0/1 … FastEthernet0/24, GigabitEthernet0/1, GigabitEthernet0/2 PC-PT: FastEthernet0 Server-PT: FastEthernet0 Laptop-PT: FastEthernet0

Esta herramienta CONFIRMA el resultado: responde [OK] solo si Packet Tracer creó el cable de verdad, y [ERROR] con las causas probables si lo rechazó.

Cables disponibles: auto — lo elige este servidor según los modelos (recomendado) straight — PC/Server↔Switch, Switch↔Router cross — PC↔PC, Router↔Router, Switch↔Switch fiber — Switch↔Switch (puertos SFP, larga distancia) serial — Router↔Router WAN (Serial DCE/DTE) console — PC↔Router/Switch (gestión) phone — Teléfono IP↔Switch o CME

CABLE SERIAL — MÓDULO WIC-2T OBLIGATORIO: Si usas tipo_cable='serial', los routers DEBEN tener el módulo WIC-2T instalado ANTES de llamar esta función. Llama agregar_modulo_router() en ambos routers primero. Sin WIC-2T los puertos Serial0/0/0 / Serial0/0/1 no existen y la conexión fallará.

Orden de operaciones recomendado:

  1. crear_dispositivo() para cada nodo

  2. agregar_modulo_router() si se usará cable serial ← OBLIGATORIO para serial

  3. conectar_dispositivos() para cada enlace

  4. configurar_dispositivo() o configurar_pc() para IPs, VLANs, rutas, etc.

Ejemplos de uso: conectar_dispositivos('R1', 'GigabitEthernet0/0', 'SW1', 'FastEthernet0/1') conectar_dispositivos('R1', 'Serial0/0/0', 'R2', 'Serial0/0/0', 'serial') conectar_dispositivos('PC1', 'FastEthernet0', 'SW1', 'FastEthernet0/2')

Inputs: interfaz1 (required), interfaz2 (required), dispositivo1 (required), dispositivo2 (required), +1 more. Returns: result

conectar_router_a_pcA

Conecta físicamente Router_Maestro con PC_IA y configura sus IPs.

Inputs: no named parameters. Returns: result

configurar_aclA

Crea una ACL en un router o switch L3 y, si se indica interfaz, LA APLICA.

  • acl_number: 1-99 para estándar, 100-199 para extendida

  • reglas: lista de reglas sin el prefijo 'access-list N' Estándar: ['permit 192.168.1.0 0.0.0.255', 'deny any'] Extendida: ['permit tcp 192.168.1.0 0.0.0.255 any eq 80', 'deny ip any any']

  • interfaz: dónde aplicarla, ej: 'GigabitEthernet0/0' o 'Vlan50'.

  • direccion: 'in' filtra el tráfico que ENTRA por esa interfaz (lo normal para bloquear una VLAN de origen), 'out' el que sale hacia ella.

IMPORTANTE: una ACL sin aplicar no filtra nada. Si omites interfaz, las reglas quedan escritas en la configuración pero SIN efecto, y esta función te lo advierte en la respuesta.

Recuerda el 'deny ip any any' implícito al final de toda ACL: si aplicas una ACL a una interfaz, todo lo que no permitas explícitamente queda bloqueado.

Ejemplo — invitados sin acceso a las redes internas, con salida a Internet: configurar_acl('CORE-SW', 150, ['deny ip 192.168.50.0 0.0.0.255 192.168.0.0 0.0.255.255', 'permit ip 192.168.50.0 0.0.0.255 any'], tipo='extended', interfaz='Vlan50', direccion='in')

Inputs: reglas (required), router (required), acl_number (required), tipo, +2 more. Returns: result

configurar_dhcpB

Configura un pool DHCP en un router Cisco para asignar IPs automáticamente.

Ejemplo: configurar_dhcp('R1', 'LAN_VENTAS', '192.168.10.0', '255.255.255.0', '192.168.10.1') Genera: ip dhcp pool LAN_VENTAS / network ... / default-router ... / dns-server ...

Inputs: red (required), router (required), gateway (required), mascara (required), +2 more. Returns: result

configurar_dhcp_servidorA

Crea un pool DHCP en el servicio DHCP de un Server-PT (no en un router).

Es el equivalente a la pestaña Services -> DHCP del servidor: activa el servicio y añade el pool. Para varias VLAN, llama una vez por pool y usa 'ip helper-address <ip_del_servidor>' en cada SVI para que el relay funcione.

  • gateway: default-router que se entrega a los clientes de ese pool

  • ip_inicial: primera IP del rango

  • dns: servidor DNS que se entrega (por defecto, el propio servidor)

Ejemplo: configurar_dhcp_servidor('SRV-DHCP-DNS', 'ADMIN', '192.168.10.1', '192.168.10.100', dns='192.168.30.10')

Inputs: gateway (required), servidor (required), ip_inicial (required), nombre_pool (required), +4 more. Returns: result

configurar_dispositivoA

Envía comandos de consola (IOS) a un router o switch en Packet Tracer. Usa '\n' para separar líneas, como si presionaras Enter. Ejemplo: 'enable\nconfigure terminal\nhostname R1'

Para PCs, Laptops y Servidores usa configurar_pc() en su lugar.

Inputs: nombre (required), comandos_ios (required). Returns: result

configurar_dns_servidorA

Activa el servicio DNS de un Server-PT y añade registros A.

  • registros: {'nombre.dominio': 'ip'}, por ejemplo {'intranet.empresa.local': '192.168.30.20', 'iot.empresa.local': '192.168.30.20'}

Los clientes deben recibir la IP de este servidor como DNS (por DHCP o manualmente) para que resuelvan estos nombres.

Inputs: servidor (required), registros (required). Returns: result

configurar_etherchannelA

Configura EtherChannel (Link Aggregation) en un switch Cisco.

Modos: active/passive — LACP (IEEE 802.3ad, recomendado) desirable/auto — PAgP (Cisco propietario) on — Sin negociación (ambos lados deben ser 'on')

  • puertos: lista de interfaces a agrupar, ej: ['FastEthernet0/1', 'FastEthernet0/2']

  • channel_group: número del port-channel (1-48)

Ejemplo: configurar_etherchannel('SW1', ['FastEthernet0/1', 'FastEthernet0/2'], 1, 'active')

Inputs: switch (required), puertos (required), channel_group (required), modo. Returns: result

configurar_natB

Configura NAT overload (PAT) en un router para salida a Internet.

  • interfaz_inside: interfaz LAN, ej: 'GigabitEthernet0/0'

  • interfaz_outside: interfaz WAN/ISP, ej: 'GigabitEthernet0/1'

  • acl_number: número de ACL que define el tráfico a traducir (default: 1)

Ejemplo: configurar_nat('R1', 'GigabitEthernet0/0', 'GigabitEthernet0/1')

Inputs: router (required), interfaz_inside (required), interfaz_outside (required), acl_number. Returns: result

configurar_ospfC

Configura OSPF en un router Cisco.

  • redes: lista de redes en formato 'RED WILDCARD AREA', ej: ['192.168.1.0 0.0.0.255 0', '10.0.0.0 0.255.255.255 0']

  • router_id: opcional, ej: '1.1.1.1'

Ejemplo: configurar_ospf('R1', 1, ['192.168.1.0 0.0.0.255 0', '192.168.2.0 0.0.0.255 0'], '1.1.1.1')

Inputs: redes (required), router (required), process_id (required), router_id. Returns: result

configurar_pcA

Configura la IP de una PC, Laptop o Servidor en Packet Tracer. Usa esta función en lugar de configurar_dispositivo() para endpoints.

  • nombre: nombre del dispositivo (debe ser PC-PT, Laptop-PT o Server-PT)

  • ip: dirección IP, ej: '192.168.10.2'

  • mascara: máscara de subred, ej: '255.255.255.0'

  • gateway: puerta de enlace, ej: '192.168.10.1'

  • dns: servidor DNS (default: '8.8.8.8')

  • dhcp: True para obtener IP por DHCP (ignora ip/mascara/gateway)

Ejemplo: configurar_pc('PC1', '192.168.10.2', '255.255.255.0', '192.168.10.1')

Inputs: ip (required), nombre (required), gateway (required), mascara (required), +2 more. Returns: result

configurar_ruta_defaultA

Configura la ruta por defecto (default route) en un router. Usada para enviar tráfico desconocido hacia el ISP o gateway de salida.

Ejemplo: configurar_ruta_default('R1', '200.0.0.1') Genera: ip route 0.0.0.0 0.0.0.0 200.0.0.1

Inputs: router (required), nexthop (required). Returns: result

configurar_ruta_estaticaA

Agrega una ruta estática a un router Cisco.

Ejemplo: configurar_ruta_estatica('R1', '10.0.0.0', '255.0.0.0', '192.168.1.2') Genera: ip route 10.0.0.0 255.0.0.0 192.168.1.2

Inputs: router (required), mascara (required), nexthop (required), red_destino (required). Returns: result

configurar_spanning_treeA

Configura Spanning Tree Protocol (STP) en un switch Cisco.

Modos disponibles: pvst — Per-VLAN STP (clásico) rapid-pvst — Rapid Per-VLAN STP (recomendado) mst — Multiple Spanning Tree

  • vlan_id: si se especifica, aplica prioridad solo a esa VLAN

  • prioridad: 0-61440 en múltiplos de 4096 (menor = root bridge preferido)

Ejemplo root bridge: configurar_spanning_tree('SW1', 'rapid-pvst', 10, 4096)

Inputs: switch (required), modo, vlan_id, prioridad. Returns: result

configurar_trunkA

Configura un puerto como trunk 802.1Q (enlace entre switches, o switch↔router para router-on-a-stick).

  • vlans_permitidas: 'all' para permitir todas (lo habitual), o una lista separada por comas: '10,20,30'.

OJO CON LOS SWITCHES MULTICAPA: en un 3560/3650 el comando 'switchport mode trunk' es RECHAZADO si antes no se fija la encapsulación con 'switchport trunk encapsulation dot1q'. En los 2960 ese comando no existe. Esta función consulta el modelo real en PT y manda lo que corresponde, así que sirve para ambos.

Ejemplo: configurar_trunk('CORE-SW', 'GigabitEthernet0/1')

Inputs: puerto (required), switch (required), vlans_permitidas. Returns: result

configurar_vlanB

Crea y nombra una VLAN en un switch Cisco. Ejemplo: configurar_vlan('SW1', 10, 'VENTAS') Genera: vlan 10 / name VENTAS

Inputs: switch (required), vlan_id (required), nombre_vlan (required). Returns: result

configurar_voipA

Configura Cisco CME (Call Manager Express) para telefonía IP en un router.

  • max_telefonos: número máximo de teléfonos IP a registrar

  • max_dn: número máximo de directory numbers (extensiones)

  • red_voip: IP del router en la red VoIP (ej: '192.168.20.1')

  • extensiones: lista de extensiones a crear, ej: ['1001', '1002', '1003']

Ejemplo: configurar_voip('R1', 3, 3, '192.168.20.1', ['1001', '1002', '1003'])

Inputs: max_dn (required), router (required), red_voip (required), extensiones (required), +1 more. Returns: result

configurar_wifiA

Configura SSID y seguridad de una red inalámbrica, tanto en el access point como en un cliente (laptop, tablet, smartphone, dispositivo IoT).

  • seguridad: 'wpa2-psk' (recomendada), 'wpa-psk', 'wep' o 'abierta'

  • clave: contraseña de la red; obligatoria salvo en 'abierta'

Detecta sola si el dispositivo es AP o cliente. Para que un cliente se asocie, llámala con EXACTAMENTE el mismo ssid, seguridad y clave que su AP.

El cliente necesita una tarjeta inalámbrica instalada: las laptops de PT traen módulo Ethernet de fábrica y hay que cambiarlo por uno wifi.

Ejemplos: configurar_wifi('AP-EMPLEADOS', 'OFFICE-WIFI', clave='Empresa2024') configurar_wifi('LAPTOP1', 'OFFICE-WIFI', clave='Empresa2024')

Inputs: ssid (required), dispositivo (required), clave, seguridad. Returns: result

construir_topologia_desde_descripcionA

Construye una topología completa en Packet Tracer a partir de un JSON con la descripción de dispositivos y conexiones.

Formato esperado del JSON: { "dispositivos": [ {"nombre": "R1", "modelo": "2911", "x": 100, "y": 200}, {"nombre": "SW1", "modelo": "2960-24TT", "x": 300, "y": 200}, {"nombre": "PC1", "modelo": "PC-PT", "x": 500, "y": 300} ], "conexiones": [ {"de": "R1", "puerto1": "GigabitEthernet0/0", "a": "SW1", "puerto2": "FastEthernet0/1", "cable": "straight"}, {"de": "SW1", "puerto1": "FastEthernet0/2", "a": "PC1", "puerto2": "FastEthernet0", "cable": "straight"} ], "configuraciones": [ {"dispositivo": "R1", "comandos": "interface g0/0\nip address 192.168.1.1 255.255.255.0\nno shutdown"} ] }

'puerto1' y 'puerto2' son OBLIGATORIOS en cada conexión: sin interfaz explícita la conexión se omite y se reporta como error. 'cable' acepta los tipos cortos (auto, straight, cross, fiber, serial, console, phone, coaxial) y también los nombres largos de PT ("Copper Straight-Through", "Serial DCE"…).

Si alguna conexión usa cable serial, agrega antes el módulo WIC-2T con agregar_modulo_router() en ambos routers: este tool no lo hace por ti.

Útil para reproducir topologías guardadas o generadas por analizar_imagen_topologia().

Inputs: descripcion_json (required). Returns: result

crear_dispositivoA

Crea un dispositivo de red en Cisco Packet Tracer.

Modelos disponibles (nombres exactos del catálogo de PT): Routers: 1841, 1941, 2620XM, 2811, 2901, 2911, ISR4321 Switches L2: 2950-24, 2960-24TT, Switch-PT Switches L3: 3560-24PS, 3650-24PS Firewalls ASA: 5505, 5506-X Endpoints: PC-PT, Laptop-PT, Server-PT, Printer-PT, TabletPC-PT, SMARTPHONE-PT, TV-PT Wireless: AccessPoint-PT, AccessPoint-PT-AC, Linksys-WRT300N, HomeRouter-PT-AC, WLC-2504 VoIP: 7960, Home-VoIP-PT ISP/WAN: Cloud-PT, DSL-Modem-PT, Cable-Modem-PT Hubs: Hub-PT, Repeater-PT Placas: MCU-PT, SBC-PT, Thing IoT: Webcam, Motion Detector, Smoke Detector, Temperature Monitor, Humidity Monitor, Light, Smart LED, Street Lamp, Door, Garage Door, Fan, Air Conditioner, Furnace, Thermostat, Siren, Alarm, Lawn Sprinkler, Power Meter, Solar Panel, Battery, Home Speaker, RFID Reader, RFID Card, LED, LCD, Motor, Servo, Speaker y los sensores (Motion Sensor, Temperature Sensor, Smoke Sensor, Water Sensor, etc.)

El nombre del modelo debe coincidir EXACTAMENTE con el catálogo: si no existe, Packet Tracer no crea nada y no avisa del error.

Coordenadas (x, y): opcionales. Si no se especifican, el dispositivo se posiciona automáticamente según su tipo en el canvas (900x600): Firewalls → columna izquierda Routers → fila superior central Switches L3→ fila media-alta Switches L2→ fila media Wireless → columna derecha media Endpoints → fila inferior VoIP → fila inferior derecha WAN/ISP → columna derecha

Asegúrate de que el nombre sea único en la topología.

IMPORTANTE: crear_dispositivo() solo coloca el icono en el canvas. Para que los dispositivos se comuniquen DEBES llamar conectar_dispositivos() después de crear todos los dispositivos. Sin cables no hay conectividad.

PUERTOS SERIALES: Si el router necesita enlaces WAN seriales (Serial0/0/0, Serial0/0/1), llama agregar_modulo_router(nombre, 'WIC-2T') ANTES de conectar los cables. El módulo WIC-2T no viene instalado por defecto en PT.

Inputs: modelo (required), nombre (required), x, y. Returns: result

crear_router_maestroD

Inputs: no named parameters. Returns: result

diagnosticar_redA

Audita la red construida en Packet Tracer y señala por qué NO funcionaría.

Llámala SIEMPRE al terminar de construir o modificar una topología, antes de decirle al usuario que está lista. Detecta los fallos que las demás herramientas no ven, porque ellas solo confirman que el comando se envió:

  • dispositivos sin ningún cable conectado

  • interfaces con IP pero sin cable, o con cable y apagadas (falta 'no shutdown')

  • subredes de endpoints sin ninguna interfaz de router (no hay gateway)

  • endpoints repartidos en varias subredes (necesitan routing o VLANs)

  • enlaces seriales sin clock rate en ningún extremo

NO puede ver: subinterfaces 802.1Q, VLANs, tablas de routing ni el resultado de un ping. Que no reporte fallos no garantiza conectividad; que reporte uno sí garantiza que algo está mal.

Inputs: no named parameters. Returns: result

eliminar_conexionA

Elimina el cable conectado a una interfaz concreta de un dispositivo.

Packet Tracer borra enlaces por puerto, no por pareja de dispositivos: si dos equipos están unidos por más de un cable, hay que decir cuál.

Ejemplo: eliminar_conexion('R1', 'GigabitEthernet0/0')

Inputs: interfaz (required), dispositivo (required). Returns: result

eliminar_dispositivoA

Elimina un dispositivo del canvas de Packet Tracer por su nombre. También elimina automáticamente todos los cables conectados a él.

Inputs: nombre (required). Returns: result

guardar_topologiaA

Guarda la topología actual como archivo .pkt en Packet Tracer. Si no se incluye extensión, se agrega .pkt automáticamente. Ejemplo: guardar_topologia('mi_red_empresarial')

Inputs: nombre_archivo (required). Returns: result

hacer_pingA

Verifica conectividad haciendo ping desde un dispositivo hacia una IP.

Usa ipc.network() para obtener el estado de la interfaz del dispositivo y confirmar si la red está activa. PT no expone el output del ping IOS a través de la API JS, pero podemos verificar el estado de conectividad comprobando que las interfaces estén UP y que el dispositivo exista.

Ejemplos: hacer_ping('Router1', '192.168.1.2') hacer_ping('PC1', '192.168.1.1')

Inputs: ip_destino (required), dispositivo_origen (required). Returns: result

instalar_tarjeta_wifiA

Cambia el módulo Ethernet de un endpoint por una tarjeta inalámbrica.

Las PCs, laptops, servidores e impresoras de Packet Tracer vienen con módulo de cobre: sin este cambio NO tienen radio y no pueden asociarse a ningún SSID, aunque configures el wifi con configurar_wifi().

Quita la tarjeta del slot 0 y pone la inalámbrica. Ojo: el dispositivo pierde su puerto FastEthernet0, así que hazlo ANTES de cablearlo.

Tablets y smartphones ya son inalámbricos de fábrica: no los necesitan.

Flujo para un cliente wifi:

  1. crear_dispositivo('LAPTOP1', 'Laptop-PT')

  2. instalar_tarjeta_wifi('LAPTOP1')

  3. configurar_wifi('LAPTOP1', 'OFFICE-WIFI', clave='...')

  4. configurar_pc('LAPTOP1', ...) o dejar que tome IP por DHCP

Inputs: dispositivo (required). Returns: result

limpiar_topologiaA

Elimina TODOS los dispositivos y conexiones del canvas. ¡Usar con precaución! Esta acción no se puede deshacer.

Inputs: no named parameters. Returns: result

listar_dispositivosA

Devuelve la lista de todos los dispositivos presentes en el canvas de Packet Tracer. Útil para saber qué hay en la topología antes de hacer cambios.

Inputs: no named parameters. Returns: result

mover_dispositivoA

Mueve un dispositivo existente a nuevas coordenadas en el canvas. Útil para reorganizar la topología visualmente. Ejemplo: mover_dispositivo('R1', 300, 150)

Inputs: x (required), y (required), nombre (required). Returns: result

obtener_estado_dispositivoB

Obtiene el estado actual de un dispositivo: nombre, tipo, puertos y estado de conexión (up/down) de cada interfaz. Ejemplo: obtener_estado_dispositivo('Router0')

Inputs: nombre (required). Returns: result

obtener_puertos_dispositivoA

Lista las interfaces REALES de un dispositivo, preguntándoselas a Packet Tracer, y dice cuáles están libres y cuáles ya tienen cable.

Refleja el hardware instalado: si el router lleva un WIC-2T, aquí aparecen sus puertos Serial; si no, no aparecen. Por eso es la forma fiable de saber qué interfaz usar en conectar_dispositivos().

Ejemplo: obtener_puertos_dispositivo('R1')

Inputs: nombre (required). Returns: result

obtener_tabla_routingA

Envía 'show ip route' y 'show ip interface brief' a un router o switch L3 para que el output sea visible en la consola del dispositivo en Packet Tracer.

Packet Tracer no devuelve el output de comandos IOS a través de la API. Abre la consola del dispositivo en PT para ver el resultado.

Ejemplo: obtener_tabla_routing('Router0')

Inputs: nombre (required). Returns: result

verificar_entornoA

Diagnostica las tres piezas del sistema y dice exactamente qué falta.

Úsala SIEMPRE al principio de una sesión, o cuando un comando no parezca surtir efecto en el canvas de Packet Tracer.

Comprueba:

  1. Bridge FastAPI en 127.0.0.1:54321 (lo arranca este mismo servidor MCP).

  2. Loop JS dentro de Packet Tracer (módulo Builder, ventana Builder Code Editor).

  3. Estado actual del canvas.

Inputs: no named parameters. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 38 tools

    Disambiguation5/5

    Each tool targets a specific action and device type, with clear boundaries. Configuration tools are separated by protocol (VLAN, DHCP, OSPF, NAT, ACL, STP, EtherChannel, VoIP, etc.), and management tools (create, delete, move, connect) are distinct. The only minor overlap is between conectar_dispositivos and conectar_router_a_pc, but the latter is a specialized helper with a clear purpose.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in Spanish, using snake_case. Prefixes like crear_, configurar_, eliminar_, obtener_, and listar_ are uniformly applied, making the toolset predictable and easy to navigate. No mixing of naming conventions.

    Tool Count2/5

    With 38 tools, the server exceeds the recommended range for a coherent toolset (typically 3-15). While the broad network simulation domain justifies many functions, the sheer number may overwhelm agents and increase the risk of misselection. The count is heavy even for a complex domain.

    Completeness5/5

    The toolset provides comprehensive coverage of the Packet Tracer domain: device lifecycle (create, delete, move), connection management, and deep configuration for routing, switching, VLANs, DHCP, DNS, wireless, security (ACL, NAT), STP, EtherChannel, VoIP, and static/OSPF routing. It also includes topology building, diagnostics, and ping verification, leaving no critical gaps for typical network design tasks.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers