Packet Tracer MCP
An MCP server that allows LLMs to create, configure, validate, and explain Cisco Packet Tracer network topologies. It provides a comprehensive suite of tools for generating deployment scripts, CLI configurations, and automated network troubleshooting.
README
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_mcp
Esto 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 |
|---|---|
pt_list_devices |
Catálogo de dispositivos disponibles |
pt_list_templates |
Templates de topologías predefinidas |
pt_get_device_details |
Detalle de puertos/interfaces de un modelo |
pt_estimate_plan |
Estimación rápida sin generar plan completo |
pt_plan_topology |
Genera un plan completo (dispositivos, links, IPs, DHCP, rutas) |
pt_validate_plan |
Valida que el plan sea correcto |
pt_fix_plan |
Auto-corrige errores comunes |
pt_explain_plan |
Explicación en lenguaje natural del plan |
pt_generate_script |
Genera script JavaScript para PTBuilder |
pt_generate_configs |
Genera configuraciones CLI por dispositivo |
pt_full_build |
Pipeline completo de una sola vez |
pt_deploy |
Copia script al portapapeles con instrucciones |
pt_live_deploy |
Envía comandos directo a PT en tiempo real |
pt_bridge_status |
Verifica conexión con PT |
pt_query_topology |
Consulta dispositivos existentes en PT |
pt_delete_device |
Elimina un dispositivo de PT |
pt_rename_device |
Renombra un dispositivo en PT |
pt_move_device |
Mueve un dispositivo en el canvas |
pt_delete_link |
Elimina un enlace de PT |
pt_send_raw |
Envía JS arbitrario a PT |
pt_export |
Exporta plan + scripts + configs a archivos |
pt_list_projects / pt_load_project |
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ón
Flujo de datos
- Request → el LLM describe qué red quiere
- Planificación → el Orchestrator genera un
TopologyPlancompleto - Validació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.2 - Links inter-router:
10.0.X.0/30— 2 hosts por enlace
Routing soportado
- static — genera
ip routecompletas - ospf — genera
router ospfcon áreas - none — sin routing
Tests
python -m pytest tests/ -v
Requisitos
- 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 |
|---|---|
pt_list_devices |
Lista todos los dispositivos disponibles con sus puertos |
pt_list_templates |
Lista las plantillas de topología disponibles |
pt_get_device_details |
Detalles completos de un modelo específico |
Estimación
| Tool | Descripción |
|---|---|
pt_estimate_plan |
Dry-run: estima dispositivos, enlaces y complejidad sin generar |
Planificación
| Tool | Descripción |
|---|---|
pt_plan_topology |
Genera un plan completo desde parámetros (routers, PCs, routing, etc.) |
Validación
| Tool | Descripción |
|---|---|
pt_validate_plan |
Valida un plan con 15 tipos de error tipificados |
pt_fix_plan |
Auto-corrige errores comunes (cables, modelos, puertos) |
pt_explain_plan |
Genera explicación en lenguaje natural de cada decisión |
Generación
| Tool | Descripción |
|---|---|
pt_generate_script |
Genera script JavaScript para PTBuilder |
pt_generate_configs |
Genera configuraciones CLI (IOS) por dispositivo |
Pipeline completo
| Tool | Descripción |
|---|---|
pt_full_build |
Todo en uno: planifica, valida, genera y exporta |
Despliegue en vivo
| Tool | Descripción |
|---|---|
pt_deploy |
Copia script al portapapeles + instrucciones manuales |
pt_live_deploy |
Envía comandos directo a PT en tiempo real via HTTP bridge |
pt_bridge_status |
Verifica si el bridge está activo y PT está conectado |
Interacción con topología existente
| Tool | Descripción |
|---|---|
pt_query_topology |
Consulta qué dispositivos existen actualmente en PT |
pt_delete_device |
Elimina un dispositivo y sus enlaces de PT |
pt_rename_device |
Renombra un dispositivo en la topología activa |
pt_move_device |
Mueve un dispositivo a nuevas coordenadas en el canvas |
pt_delete_link |
Elimina el enlace de una interfaz específica |
pt_send_raw |
Envía código JS arbitrario al Script Engine de PT |
Exportación y proyectos
| Tool | Descripción |
|---|---|
pt_export |
Exporta a archivos (JS script, CLI configs, JSON plan) |
pt_list_projects |
Lista proyectos guardados |
pt_load_project |
Carga un proyecto guardado |
MCP Resources (5)
| URI | Descripción |
|---|---|
pt://catalog/devices |
Todos los dispositivos con puertos |
pt://catalog/cables |
Tipos de cable |
pt://catalog/aliases |
Aliases de modelos |
pt://catalog/templates |
Plantillas de topología |
pt://capabilities |
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.2 - Inter-router links:
10.0.X.0/30— Punto a punto entre routers - DHCP: Pool automático por LAN con exclusión del gateway
Routing soportado
| Protocolo | Estado | Genera |
|---|---|---|
| static | ✅ Completo | ip route commands |
| ospf | ✅ Completo | router ospf configs |
| eigrp | 🔲 Enum only | No implementado |
| rip | 🔲 Enum only | No implementado |
| none | ✅ | Sin routing |
Templates
| Template | Descripción |
|---|---|
single_lan |
1 router + 1 switch + PCs |
multi_lan |
N routers interconectados, cada uno con su LAN |
multi_lan_wan |
Multi LAN con nube WAN |
star |
Router central con routers satelitales |
hub_spoke |
Hub-and-spoke |
branch_office |
Sucursales |
router_on_a_stick |
Inter-VLAN routing |
three_router_triangle |
3 routers en triángulo |
custom |
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 + config
Flujo 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 |
|---|---|
source/main.js |
Entry point — crea menú y webview |
source/runcode.js |
runCode(scriptText) — ejecuta JS en Script Engine |
source/userfunctions.js |
addDevice(), addLink(), configureIosDevice(), configurePcIp(), queryTopology(), deleteDevice(), renameDevice(), moveDevice(), deleteLink() |
source/devices.js |
Mapeo modelo → tipo numérico de PT |
source/links.js |
Mapeo tipo de cable → ID numérico |
source/modules.js |
Mapeo módulos de hardware |
source/window.js |
Gestión de la ventana webview (QWebEngine) |
source/interface/ |
HTML + JS del editor web (status panel + real-time logging) |
Builder.pts |
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 -v
34 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 configurados
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.