MCP server for Cisco Packet Tracer 9 — live IOS, OSPF, BGP, NAT, VLAN, VoIP, QoS, IPv6, wireless.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Servidor Model Context Protocol para controlar Cisco Packet Tracer 9.0 desde fuera. Una extensión propia se cuelga del editor de PT, abre un bridge HTTP local y desde ahà el servidor MCP llama a la API IPC nativa de PT para crear topologÃas, configurar routers, lanzar simulaciones, etc. Escrito en TypeScript sobre Bun.
[!WARNING] Proyecto experimental. Es la versión 0.1.0, hecha en mis ratos libres como experimento personal. Funciona contra PT 9.0.0.0810 en mi PC y pasa los smoke tests, pero no la consideres lista para producción. Espera bugs, cambios de API y cosas que se rompen al actualizar PT. Si te animas a probarla, abre issues con lo que veas.

Demo acelerada x15: el cliente MCP lanza una receta y el canvas de Packet Tracer 9 se va llenando solo (devices, cableado, configuración).
Autor: Juan Cordero Pascual · Licencia: MIT Idiomas: español (este archivo) · English
Los proyectos para PT 6.x–8.x se apoyaban en librerÃas JS cargadas por
una extensión firmada de terceros. PT 9.0 cerró ese camino: los
App Meta Files (.pta) ahora tienen que ir firmados con ECDSA por
Cisco, asà que ningún proyecto open-source puede entregar uno. La
alternativa que queda es hablar con la webview de PT desde fuera, y eso
es lo que hace este servidor:
.pts propia que se instala desde el menú
Extensions de PT. Lo único que hace es arrancar un bucle de polling
contra el bridge HTTP local.ipc.appWindow().getActiveWorkspace().getLogicalWorkspace().addDevice(...)
o getDevice(...).getCommandLine().enterCommand(...). Sin librerÃas
intermedias, sin JS opaco copiado de otros sitios.src/ipc/.Otras herramientas mantienen un objeto "plan" en memoria, lo validan y al final lo vuelcan al simulador. Aquà no funciona asÃ:
TopologyPlan en memoria. Lo que hay en PT es lo
que hay; el plan es el canvas.Si quieres el detalle, está en docs/ARCHITECTURE.md.
>=1.2. Con Node solo no vale: el código es
TypeScript y se ejecuta directamente con Bun, sin paso previo de
compilación.mcp-bridge.pts instalada en PT. Viene en el repo en
extension/dist/.[!TIP] ¿Por qué Bun y no Node? Bun ejecuta
.tsnativamente, arranca en milisegundos y trae fetch, HTTP y test runner de serie sin instalar dependencias. Si solo tienes Node, puedes instalar Bun concurl -fsSL https://bun.sh/install | bash(obrew install bunen macOS). Convive con Node sin pisarse.
En Packet Tracer 9:
Extensions > Scripting > Configure PT Script Modules > Add y
selecciona extension/dist/mcp-bridge.pts.Extensions > MCP Bridge una vez por sesión.El polling arranca solo en cuanto la ventana se carga. Para comprobar
que todo está bien, lanza pt_bridge_status: en menos de un segundo
deberÃa responder connected: true.
El proceso completo de instalación está en
docs/BOOTSTRAP.md.
El endpoint MCP queda en:
[!NOTE] Por qué
:39001. PT 9 ya tiene su propio IPC nativo (no documentado, con handshake firmado por Cisco) escuchando en:39000. Para no chocar y dejar claro que el servidor MCP es algo aparte, este escucha en:39001. Si te molesta, cámbialo con la variable de entornoPACKETTRACER_MCP_PORT.
Una sola lÃnea, sin tocar JSON:
Verifica con /mcp dentro de Claude Code: debe aparecer packet-tracer
con sus 57 tools.
Edita ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) o el equivalente en tu SO y reinicia Claude Desktop:
Settings → MCP → Add new MCP server → pega la URL
http://127.0.0.1:39001/mcp con transporte http.
En el config.json del cliente:
Edita ~/.gemini/settings.json:
Verifica con /mcp list.
Edita ~/.codex/config.toml:
curl (sin cliente)Para confirmar que el server responde antes de configurar nada:
Debe devolver un result con serverInfo.name = "packet-tracer-mcp". Un
segundo POST con "method":"tools/list" devuelve las 57 tools con su
inputSchema.
La suite unitaria cubre la aritmética de subnetting, la inspección del canvas, el parser de snapshots, los diffs, la validación de blueprints y los builders CLI de cada receta. No hace falta PT corriendo para ejecutarla.
Con el bridge conectado (pt_bridge_status → connected: true), una
sesión completa más o menos se ve asÃ:
Si algo se ha torcido por el camino, pt_mend_canvas aplica
reparaciones conservadoras (encender dispositivos que ya están
cableados pero apagados, ese tipo de cosas) y avisa de lo que no se
atreve a tocar.
packet-tracer-mcp expone 57 herramientas MCP agrupadas por dominio.
pt_bridge_status, pt_ping, pt_clear_canvas.
pt_list_devices, pt_list_modules, pt_list_recipes,
pt_list_snapshots, pt_get_device_details.
pt_query_topology, pt_inspect_canvas, pt_explain_canvas,
pt_forecast (dry-run de receta), pt_generate_configs (genera el
IOS CLI offline de una receta sin tocar PT — útil para documentación,
aulas o reproducir el lab en hardware real), pt_inspect_ports
(estado per-puerto: link/up/proto, MAC, IP/máscara, wireless),
pt_read_vlans (base VLAN viva por switch), pt_read_acl (ACLs
configuradas leÃdas vÃa AclProcess), pt_show_bgp_routes (parsea
show ip bgp en filas estructuradas), pt_read_project_metadata
(descripción/versión/filename del .pkt actual).
pt_add_device, pt_add_module, pt_create_link, pt_delete_device,
pt_delete_link, pt_move_device, pt_auto_layout (recoloca todo el
canvas en una rejilla por capas, detecta routers de tránsito y los baja
a un segundo piso), pt_rename_device, pt_set_pc,
pt_set_device_power (toggle Device.setPower idempotente),
pt_add_canvas_annotation (notas/lÃneas/cÃrculos),
pt_manage_clusters (lista/elimina/disuelve clusters lógicos),
pt_send_raw (vÃa de escape: ejecuta JS arbitrario en el Script
Engine).
pt_cook_topology, pt_mend_canvas, pt_plan_review (revisión
pre-flight obligatoria para topologÃas de ≥3 routers), pt_apply_switching,
pt_apply_services, pt_configure_server_dhcp (DHCP server en Server-PT
vÃa API IPC nativa), pt_configure_subinterface (sub-interfaces 802.1Q
para router-on-a-stick), pt_apply_advanced_routing, pt_apply_ipv6,
pt_apply_voip, pt_apply_wireless.
pt_save_snapshot, pt_load_snapshot, pt_diff_snapshots. Los
snapshots se guardan en disco como un dump del canvas. Cargar uno no
sobreescribe nada: te enseña la diferencia contra lo que tienes ahora
mismo en PT y tú decides.
.pkt nativapt_save_pkt, pt_open_pkt (cuando el servidor y PT comparten
filesystem), más pt_save_pkt_to_bytes y pt_open_pkt_from_bytes para
mover el .pkt por la red. El formato comprimido .pkz no funciona:
la API JS expone los métodos pero los bytes que devuelve no son válidos
en PT 9.0.0.0810.
pt_run_cli, pt_run_cli_bulk, pt_show_running (con | section
opcional).
pt_simulation_mode (toggle Realtime↔Simulation), pt_simulation_play
(play/back/forward/reset), pt_send_pdu (Simple PDU originado),
pt_traceroute, pt_screenshot (PNG/JPG del workspace).
pt_list_recipes devuelve la lista al vuelo. Las que vienen de fábrica:
| Receta | Descripción |
|---|---|
chain | N routers en serie, cada uno con su LAN de M PCs. |
star | router hub con N spokes, cada spoke con su LAN. |
branch_office | HQ con una o dos LANs y un router de sucursal con la suya. |
campus_vlan | router-on-a-stick: un router + un switch con N VLANs y M PCs por VLAN. |
edge_nat | router de borde con PAT, DHCP, ACL y router ISP upstream. |
dual_isp | dos ISPs con BGP eBGP + HSRP en routers de borde. |
voip_lab | router CME + switch + N IP Phones 7960; provisiona telephony-service, ephone-dn, voice VLAN y DHCP option-150. |
ipv6_lab | dual-stack IPv4 + IPv6 con OSPFv3. |
wifi_lan | router + AccessPoint + laptops. Limitada: la API JS pública de PT 9 no dispara la asociación radio (ver docs/COVERAGE.md). |
Las primeras tres admiten routing: 'static' | 'ospf' | 'eigrp' | 'rip' | 'none' y dhcp: true|false. campus_vlan acepta además startVlanId,
vlanStep y lanPool. wifi_lan acepta ssid, security, psk y
channel.
Variables de entorno (todas opcionales):
| Variable | Por defecto | Significado |
|---|---|---|
PACKETTRACER_MCP_HOST | 127.0.0.1 | Host del transporte HTTP MCP. Pon 0.0.0.0 para acceso LAN. |
PACKETTRACER_MCP_PORT | 39001 | Puerto MCP (evita el :39000 del IPC nativo de PT). |
PACKETTRACER_BRIDGE_PORT | 54321 | Puerto que sondea la webview de PT. |
PACKET_TRACER_SNAPSHOT_DIR | ./packet-tracer-snapshots | Directorio para snapshots persistidos. |
AGENTS.md — guÃa operativa para LLMs que usen este
servidor: convenciones de cableado (LAN Gigabit vs WAN serial), LANs
de usuario vs de tránsito, flujo recomendado de creación + auto
layout, errores tÃpicos a evitar.docs/ARCHITECTURE.md — capas (transporte
MCP, tools, recetas, generadores IPC, bridge HTTP), por qué
canvas-first, persistencia .pkt, qué queda fuera de alcance.docs/BOOTSTRAP.md — instalación de la
extensión .pts, anatomÃa del polling, sección para desarrolladores
que quieran reconstruir el .pts.docs/COVERAGE.md — qué está verificado contra
PT 9 real, en qué estado (verified-pt9 / contract-verified /
partial / broken / dead-end), referencias a smoke runs y
limitaciones conocidas del simulador que afectan al usuario.docs/TOOLS.md — referencia de las 57 tools MCP,
con parámetros, comportamiento y notas.docs/RECIPES.md — catálogo de recipes (chain,
star, branch_office, campus_vlan, edge_nat, wifi_lan,
voip_lab, ipv6_lab, dual_isp) con parámetros, ejemplos y
resultado esperado.docs/TROUBLESHOOTING.md — sÃntomas
reales, causa probable y fix. La FAQ de aquà abajo es el resumen.CHANGELOG.md — qué entra en cada release, en
formato Keep a Changelog.CONTRIBUTING.md — cómo abrir issues, setup
local, convenciones de código y commits.CODE_OF_CONDUCT.md — Contributor Covenant
2.1.SECURITY.md — polÃtica de seguridad y reporte de
vulnerabilidades.Para que un LLM (Claude, ChatGPT, Gemini, lo que sea con cliente MCP) pueda crear, configurar y validar topologÃas en Packet Tracer 9 sin que tú toques el GUI. Útil para preparar laboratorios CCNA/CCNP, generar escenarios de prácticas, o automatizar tareas repetitivas.
Las llamadas read-only que no tocan el canvas (catálogo, listar
recetas, validar planes) funcionan sin PT. Cualquier cosa que toque la
topologÃa (pt_add_device, pt_cook_topology, pt_run_cli, etc.)
necesita PT abierto y la extensión cargada.
Solo 9.0.0.0810. La API IPC nativa cambia entre minor versions de PT y este servidor está calibrado contra esa build. Versiones anteriores (8.x) no tienen el Script Engine moderno y no van a funcionar.
Por comodidad, sobre todo. Bun ejecuta TypeScript sin transpilación,
arranca en pocos milisegundos (importa cuando un cliente MCP relanza
el servidor varias veces al dÃa) y bun build --compile saca un
binario standalone que puedes mover a otra máquina sin instalar nada.
Node funcionarÃa también; simplemente acabé prefiriendo el flujo de
Bun para esto.
No. Asume entorno local de confianza (loopback). Si abres el puerto a
la LAN con PACKETTRACER_MCP_HOST=0.0.0.0, la responsabilidad de
proteger el puerto es tuya. Mira SECURITY.md.
Llama a pt_clear_canvas, baja los parámetros (menos routers/VLANs) y
vuelve a probar. Si lo reproduces de forma fiable, abre un issue con
los parámetros exactos. Más detalle en
docs/TROUBLESHOOTING.md.
SÃ. Sigue el patrón de src/recipes/topologies/*.ts, exporta una
función que devuelva un Blueprint, y regÃstrala en
src/recipes/index.ts. Mira
CONTRIBUTING.md.
| SÃntoma | Fix rápido |
|---|---|
| Cliente MCP no conecta | lsof -i :39001 → si no hay nada, arranca bun run src/index.ts. |
pt_bridge_status → connected: false | Pega el bootstrap del README en el editor de scripts de PT y pulsa Run. |
| Canvas no se mueve | El polling se paró: vuelve a pegar el bootstrap. |
pt_run_cli devuelve vacÃo | Repite la llamada — terminal length 0 se aplica al primer enable. |
bun install falla | bun --version ≥ 1.2 y rm -rf node_modules bun.lock && bun install. |
Lista completa en docs/TROUBLESHOOTING.md.
Probado contra Cisco Packet Tracer 9.0.0.0810:
verified-pt9.chain, star,
branch_office, campus_vlan, edge_nat, dual_isp, voip_lab,
ipv6_lab). La novena, wifi_lan, se queda a medias por una
limitación de la API de PT (no del MCP)..pkt.La evidencia detallada (smoke runs, capturas de pantalla y limitaciones
conocidas) está en docs/COVERAGE.md.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/packet-tracer-mcp)<a href="https://allmcps.com/mcp/packet-tracer-mcp"><img src="https://allmcps.com/api/badge/packet-tracer-mcp?style=directory" alt="Packet Tracer Mcp on AllMCPs" /></a>