Allows for the creation, configuration, validation, and explanation of network topologies in Cisco Packet Tracer, including generating CLI configurations and automated build scripts via the PTBuilder extension.
Click on "Install 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 MCPDesign a small office network with 2 routers, 5 PCs, and DHCP enabled."
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 Server
Servidor MCP que permite a cualquier LLM (Copilot, Claude, etc.) crear, configurar, validar y desplegar topologías de red completas en Cisco Packet Tracer.
Le decís "creame una red con 3 routers, DHCP y OSPF" y el servidor planifica la topología, valida todo, genera los scripts y configs, y lo despliega directo en PT en tiempo real.
Python 3.11+ · Pydantic 2.0+ · FastMCP · Streamable HTTP
Instalación
git clone <repo>
cd PACKET-TRACER
pip install -e .Uso
1. Levantar el servidor
python -m src.packet_tracer_mcpEsto inicia:
Servidor MCP en
http://127.0.0.1:39000/mcp(streamable-http)Bridge HTTP en
http://127.0.0.1:54321(comunicación con Packet Tracer)
Ambos arrancan automáticamente. No se necesita ningún script adicional.
Para modo stdio (debug/legacy):
python -m src.packet_tracer_mcp --stdio
2. Configurar el cliente MCP
VS Code — .vscode/mcp.json:
{
"servers": {
"packet-tracer": {
"url": "http://127.0.0.1:39000/mcp"
}
}
}Claude Desktop — claude_desktop_config.json:
{
"mcpServers": {
"packet-tracer": {
"url": "http://127.0.0.1:39000/mcp"
}
}
}3. Usar desde el LLM
Pedile al LLM que cree una red. El servidor expone 22 tools MCP que cubren todo el pipeline:
Tool | Qué hace |
| Catálogo de dispositivos disponibles |
| Templates de topologías predefinidas |
| Detalle de puertos/interfaces de un modelo |
| Estimación rápida sin generar plan completo |
| Genera un plan completo (dispositivos, links, IPs, DHCP, rutas) |
| Valida que el plan sea correcto |
| Auto-corrige errores comunes |
| Explicación en lenguaje natural del plan |
| Genera script JavaScript para PTBuilder |
| Genera configuraciones CLI por dispositivo |
| Pipeline completo de una sola vez |
| Copia script al portapapeles con instrucciones |
| Envía comandos directo a PT en tiempo real |
| Verifica conexión con PT |
| Consulta dispositivos existentes en PT |
| Elimina un dispositivo de PT |
| Renombra un dispositivo en PT |
| Mueve un dispositivo en el canvas |
| Elimina un enlace de PT |
| Envía JS arbitrario a PT |
| Exporta plan + scripts + configs a archivos |
| Gestión de proyectos guardados |
¿Por qué el servidor corre en el puerto 39000?
El servidor MCP usa streamable-http en lugar de stdio. Esto significa que el servidor se levanta una vez como un proceso HTTP persistente y los clientes MCP se conectan a él por red.
Ventajas sobre stdio:
Persistencia — el servidor queda corriendo, no se reinicia con cada sesión del editor
Múltiples clientes — podés conectar VS Code, Claude Desktop u otros clientes al mismo servidor simultáneamente
Estado compartido — el bridge HTTP hacia Packet Tracer se mantiene activo entre requests
Debug más fácil — podés hacer curl al servidor, ver logs en la terminal donde corre
Desacoplamiento — el servidor no depende del ciclo de vida del editor
El puerto 39000 fue elegido para no colisionar con puertos comunes (3000, 5000, 8000, 8080) ni con el bridge interno de PT que usa el 54321.
Live Deploy — Despliegue en tiempo real
La feature principal: enviar comandos directamente a Packet Tracer sin copiar/pegar nada.
┌─────────┐ ┌──────────────┐ HTTP ┌──────────────┐ $se() ┌──────────────┐
│ LLM │ MCP │ MCP Server │ :54321 │ PTBuilder │ IPC │ Packet Tracer│
│(Copilot)│ ──────► │ (:39000) │ ────────► │ (WebView) │ ─────► │ (Engine) │
└─────────┘ └──────────────┘ └──────────────┘ └──────────────┘Hay dos servidores HTTP corriendo:
Puerto | Qué es | Para qué |
39000 | Servidor MCP (streamable-http) | Recibe requests de tools del LLM/editor |
54321 | Bridge HTTP interno | Envía comandos JS a PTBuilder dentro de Packet Tracer |
Setup del bridge (una vez por sesión de PT):
Abrí Packet Tracer 8.2+
Abrí Builder Code Editor (Extensions > Builder Code Editor)
Pegá este bootstrap y hacé clic en Run:
/* PT-MCP Bridge */ window.webview.evaluateJavaScriptAsync("setInterval(function(){var x=new XMLHttpRequest();x.open('GET','http://127.0.0.1:54321/next',true);x.onload=function(){if(x.status===200&&x.responseText){$se('runCode',x.responseText)}};x.onerror=function(){};x.send()},500)");Eso hace que PTBuilder haga polling cada 500ms al bridge. Cuando el LLM genera comandos, el MCP Server los encola en el bridge y PT los ejecuta en tiempo real.
Arquitectura
src/packet_tracer_mcp/
├── adapters/mcp/ # Tools y resources MCP
├── application/ # Use cases + DTOs
├── domain/
│ ├── models/ # TopologyPlan, DevicePlan, LinkPlan
│ ├── services/ # Orchestrator, IPPlanner, Validator, AutoFixer
│ └── rules/ # Reglas de validación
├── infrastructure/
│ ├── catalog/ # Catálogo de dispositivos, cables, templates
│ ├── generator/ # Generador de scripts JS + configs CLI
│ ├── execution/ # Bridge HTTP + Live Executor
│ └── persistence/ # Proyectos guardados
├── server.py # Entry point del servidor
└── settings.py # ConfiguraciónFlujo de datos
Request → el LLM describe qué red quiere
Planificación → el Orchestrator genera un
TopologyPlancompletoValidación → el Validator verifica modelos, puertos, cables, IPs
Auto-fix → el AutoFixer corrige errores comunes automáticamente
Generación → se produce el script JS para PTBuilder + configs CLI
Deploy → se envía a PT vía bridge HTTP o se exporta a archivos
Direccionamiento IP
LANs:
192.168.X.0/24— gateway en.1, PCs desde.2Links inter-router:
10.0.X.0/30— 2 hosts por enlace
Routing soportado
static — genera
ip routecompletasospf — genera
router ospfcon áreasnone — sin routing
Tests
python -m pytest tests/ -vRequisitos
Python 3.11+
Cisco Packet Tracer 8.2+ (para live deploy)
PTBuilder extension instalada en PT (incluida en
PTBuilder/)
Listo. El MCP server puede crear dispositivos, enlaces y configurar routers automáticamente.
Nota técnica: El bootstrap inyecta un
setIntervalen el webview que hace polling HTTP. El$se('runCode', ...)bridgea del webview al Script Engine de PT. PTBuilder usaexecuteCode()que internamente hacecode.replace(/\n/g, ""), por eso el bootstrap usa/* */comments en vez de//.
Setup permanente (opcional):
Para que el polling arranque automáticamente al abrir Builder Code Editor:
En PT: Extensions > Scripting Interface
Seleccioná el módulo Builder
Reemplazá
main.jseinterface.jscon las versiones modificadas enPTBuilder/source/Guardá y reiniciá el módulo
MCP Tools (22)
Consulta
Tool | Descripción |
| Lista todos los dispositivos disponibles con sus puertos |
| Lista las plantillas de topología disponibles |
| Detalles completos de un modelo específico |
Estimación
Tool | Descripción |
| Dry-run: estima dispositivos, enlaces y complejidad sin generar |
Planificación
Tool | Descripción |
| Genera un plan completo desde parámetros (routers, PCs, routing, etc.) |
Validación
Tool | Descripción |
| Valida un plan con 15 tipos de error tipificados |
| Auto-corrige errores comunes (cables, modelos, puertos) |
| Genera explicación en lenguaje natural de cada decisión |
Generación
Tool | Descripción |
| Genera script JavaScript para PTBuilder |
| Genera configuraciones CLI (IOS) por dispositivo |
Pipeline completo
Tool | Descripción |
| Todo en uno: planifica, valida, genera y exporta |
Despliegue en vivo
Tool | Descripción |
| Copia script al portapapeles + instrucciones manuales |
| Envía comandos directo a PT en tiempo real via HTTP bridge |
| Verifica si el bridge está activo y PT está conectado |
Interacción con topología existente
Tool | Descripción |
| Consulta qué dispositivos existen actualmente en PT |
| Elimina un dispositivo y sus enlaces de PT |
| Renombra un dispositivo en la topología activa |
| Mueve un dispositivo a nuevas coordenadas en el canvas |
| Elimina el enlace de una interfaz específica |
| Envía código JS arbitrario al Script Engine de PT |
Exportación y proyectos
Tool | Descripción |
| Exporta a archivos (JS script, CLI configs, JSON plan) |
| Lista proyectos guardados |
| Carga un proyecto guardado |
MCP Resources (5)
URI | Descripción |
| Todos los dispositivos con puertos |
| Tipos de cable |
| Aliases de modelos |
| Plantillas de topología |
| Capacidades del servidor |
Dispositivos soportados
Routers
Modelo | Puertos |
1941 | Gig0/0, Gig0/1, Se0/0/0, Se0/0/1 |
2901 | Gig0/0, Gig0/1, Se0/0/0, Se0/0/1 |
2911 | Gig0/0, Gig0/1, Gig0/2, Se0/0/0, Se0/0/1 |
4321 (ISR4321) | Gig0/0/0, Gig0/0/1 |
Switches
Modelo | Puertos |
2960-24TT | Fa0/1–24, Gig0/1–2 |
3560-24PS | Fa0/1–24, Gig0/1–2 |
End Devices
Modelo | Puertos |
PC-PT | Fa0 |
Server-PT | Fa0 |
Laptop-PT | Fa0 |
Otros
Modelo | Tipo |
Cloud-PT | WAN Cloud |
AccessPoint-PT | Wireless AP |
Tipos de cable
Cable | Uso típico |
straight | Switch↔Router, Switch↔PC |
cross | Router↔Router, Switch↔Switch, PC↔PC |
serial | Router Serial↔Router Serial (WAN) |
fiber | Conexiones de fibra óptica |
auto | Detección automática |
Direccionamiento IP
LANs:
192.168.X.0/24— Gateway en.1, PCs desde.2Inter-router links:
10.0.X.0/30— Punto a punto entre routersDHCP: Pool automático por LAN con exclusión del gateway
Routing soportado
Protocolo | Estado | Genera |
static | ✅ Completo |
|
ospf | ✅ Completo |
|
eigrp | 🔲 Enum only | No implementado |
rip | 🔲 Enum only | No implementado |
none | ✅ | Sin routing |
Templates
Template | Descripción |
| 1 router + 1 switch + PCs |
| N routers interconectados, cada uno con su LAN |
| Multi LAN con nube WAN |
| Router central con routers satelitales |
| Hub-and-spoke |
| Sucursales |
| Inter-VLAN routing |
| 3 routers en triángulo |
| Personalizado |
Arquitectura
src/packet_tracer_mcp/
├── adapters/mcp/ # MCP protocol layer
│ ├── tool_registry.py # 22 MCP tools
│ └── resource_registry.py # 5 MCP resources
├── application/ # Use cases + DTOs (requests/responses)
├── domain/ # Core business logic
│ ├── models/ # TopologyPlan, DevicePlan, LinkPlan, errors
│ ├── services/ # Orchestrator, IPPlanner, Validator, AutoFixer
│ └── rules/ # Validation rules (devices, cables, IPs)
├── infrastructure/
│ ├── catalog/ # Device catalog, cables, templates, aliases
│ ├── generator/ # PTBuilder JS + CLI config generators
│ ├── execution/ # Executors + HTTP bridge
│ │ ├── live_bridge.py # PTCommandBridge (HTTP server :54321)
│ │ ├── live_executor.py # LiveExecutor (sends plan → bridge → PT)
│ │ ├── deploy_executor.py# DeployExecutor (clipboard + instructions)
│ │ └── manual_executor.py# ManualExecutor (file export)
│ └── persistence/ # Project save/load
├── shared/ # Enums, constants, utilities
├── server.py # MCP server entry point
└── settings.py # Version + configFlujo de datos
TopologyRequest → Orchestrator → IPPlanner → Validator → AutoFixer
↓
TopologyPlan (validated)
↓
┌───────────────────────┼──────────────────┐
↓ ↓ ↓
PTBuilder Script CLI Configs Live Deploy
(addDevice/addLink) (hostname, IPs, (HTTP bridge
DHCP, routing) → PT real-time)PTBuilder (extensión de PT)
El directorio PTBuilder/ contiene el código fuente del Script Module "Builder Code Editor":
Archivo | Función |
| Entry point — crea menú y webview |
|
|
|
|
| Mapeo modelo → tipo numérico de PT |
| Mapeo tipo de cable → ID numérico |
| Mapeo módulos de hardware |
| Gestión de la ventana webview (QWebEngine) |
| HTML + JS del editor web (status panel + real-time logging) |
| Paquete compilado de la extensión (binario, no editable) |
API principal de PTBuilder
// Crear dispositivo en coordenadas (x, y)
addDevice("R1", "2911", 100, 200);
// Crear enlace entre dos dispositivos
addLink("R1", "GigabitEthernet0/1", "S1", "GigabitEthernet0/1", "straight");
// Configurar router/switch con CLI commands
configureIosDevice("R1", "enable\nconfigure terminal\nhostname R1\ninterface GigabitEthernet0/0\nip address 192.168.0.1 255.255.255.0\nno shutdown\nexit");
// Configurar IP estática de PC
configurePcIp("PC1", false, "192.168.0.2", "255.255.255.0", "192.168.0.1");
// Configurar PC para DHCP
configurePcIp("PC1", true);Tests
# Todos los tests
python -m pytest tests/ -v
# Un archivo
python -m pytest tests/test_full_build.py -v
# Un test específico
python -m pytest tests/test_full_build.py::TestFullBuild::test_basic_2_routers -v34 tests cubriendo: IP planning, validación, auto-fix, explicación, estimación, generación y full build integration.
Ejemplo de uso rápido
Usuario: "Creame una red con 2 routers, 2 switches, 4 PCs, DHCP y static routing"
→ pt_full_build genera:
- 8 dispositivos: R1, R2, SW1, SW2, PC1, PC2, PC3, PC4
- 7 enlaces: R1↔R2 (cross), R1↔SW1 (straight), R2↔SW2 (straight), SW1↔PC1, SW1↔PC2, SW2↔PC3, SW2↔PC4
- IPs: LAN1 192.168.0.0/24, LAN2 192.168.1.0/24, Inter-router 10.0.0.0/30
- DHCP pools en R1 y R2
- Static routes bidireccionales
- 23 comandos JavaScript enviados a PT
→ pt_live_deploy envía todo a Packet Tracer y aparecen los dispositivos configuradosThis server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.