Packet-Tracer-MCP
Provides tools to build and configure topologies in Cisco Packet Tracer, including creating devices, cabling, applying IOS commands, configuring VLANs, OSPF, NAT, ACLs, VoIP, and reproducing networks from diagram images.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Packet-Tracer-MCP Configura VLAN 10 en SW1 y asigna los puertos 1-8"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
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 sync2. 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):
Extensions->Scripting->Configure PT Script ModulesAdd-> selectpacket_tracer/Builder.ptsfrom this repoSelect Builder in the list ->
Settings-> check On Startup, so the module starts on its own every time you open PTTo confirm it is running: the Builder Code Editor entry must appear in the
Extensionsmenu. 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:
claudeClaude 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 respondenNothing 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: 38 network tools + embedded HTTP bridge |
| FastAPI app for the bridge (command and result queues) |
| PT script module, ready to import |
| Polling loop (goes in the module's Custom Interfaces) |
| Executor with return channel (goes in Script Engine) |
| Instructions and rules that Claude Code follows |
|
|
| Input diagrams for /pt-desde-imagen (see its README) |
| 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
Claude calls an MCP tool, which translates it into a line of PT JS.
mcp_server.pyqueues it withPOST /add_command.bridge.js, inside the Builder Code Editor window, picks it up withGET /next_command(every 2 s) and calls$se('runCodeBridge', codigo).bridge_runner.jsruns it in the script engine and, if it returns a value, hands it back to the page withevaluateJavaScriptAsync.The page publishes it with
POST /command_resultandmcp_server.pypicks 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()andobtener_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()andeliminar_conexion()confirm the actual result ([OK] / [ERROR]). The rest of the write commands (IOS configuration) are queued without confirmation:Exito: Comando enviadomeans queued, not executed.When creating certain devices, PT automatically adds a
Power Distribution Device0to 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 toolsagregar_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:
crear_dispositivo('R1', '2911')
crear_dispositivo('R2', '2911')
agregar_modulo_router('R1') <- instala HWIC-2T
agregar_modulo_router('R2')
conectar_dispositivos('R1','Serial0/0/0','R2','Serial0/0/0','serial')
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:
crear_dispositivo() para cada nodo
agregar_modulo_router() si se usará cable serial ← OBLIGATORIO para serial
conectar_dispositivos() para cada enlace
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:
crear_dispositivo('LAPTOP1', 'Laptop-PT')
instalar_tarjeta_wifi('LAPTOP1')
configurar_wifi('LAPTOP1', 'OFFICE-WIFI', clave='...')
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:
Bridge FastAPI en 127.0.0.1:54321 (lo arranca este mismo servidor MCP).
Loop JS dentro de Packet Tracer (módulo Builder, ventana Builder Code Editor).
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
Scored across 38 tools
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.
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.
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.
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
Related MCP Connectors
AI network lab: build and validate real multi-vendor router and switch labs from a prompt.
AI helper for choosing and speccing network & security products from Cisco, Arista, Juniper and more
Network hardware BOMs, built inside your AI assistant
Generate cloud architecture diagrams, flowcharts, and sequence diagrams.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables control of Cisco Packet Tracer 9.0 via natural language, allowing creation of network topologies, device configuration, and simulation launches through an MCP interface.97 npm15MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control Cisco Packet Tracer in real time, allowing natural language-driven creation and configuration of network topologies.6MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI models to generate, validate, and deploy network topologies directly into Cisco Packet Tracer from natural-language prompts.-
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to plan, validate, generate, and deploy Cisco Packet Tracer network topologies from natural-language prompts, including routing, switching, DHCP, VLANs, security, IPv6, wireless, live deployment, verification, and .pkt project management.3MIT