pt-mcp
Integrates with a running Cisco Packet Tracer instance through its external-application IPC API to build and manage topologies from natural language. Provides tools to add and cable devices, install expansion modules, configure IOS devices and host interfaces, verify connectivity with ping matrices, step through Packet Tracer simulation mode to read per-hop OSI explanations and decoded headers, read console/command logs, export and rebuild labs, and annotate the workspace.
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., "@pt-mcp Build two routers with a serial link and static routes, then ping between them"
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.
Model Context Protocol (MCP) Server for Cisco Packet Tracer
mcp-name: io.github.kiskander/pt-mcp-server
Overview
pt-mcp brings AI assistants to your Packet Tracer labs. It lets you work with a running
Cisco Packet Tracer in natural language from AI applications like
Claude Desktop, Claude Code, and Cursor.
Instead of dragging devices around and typing every command by hand, tell the AI what you want in plain English, like "Build two routers with a serial link and static routes, then prove the PCs can ping each other" or "Step my ping through simulation mode and explain what the switch does with the frame". Then watch it happen in Packet Tracer.
This works through the Model Context Protocol (MCP), a
standard way for AI applications to use external tools. pt-mcp connects to Packet Tracer through Packet Tracer's
own external-application interface: the IPC API over PTMP, the same channel Cisco's "ExApps" use. That means no
plugins inside Packet Tracer, no patched binaries, and no screen scraping.
It is built with CCNA students in mind. It can show you why the network behaves the way it does (Packet Tracer's own per-hop explanations in simulation mode), it verifies the way the exam expects, and by design it cannot read the answers or score of a graded activity.
Related MCP server: Packet Tracer MCP Server
Features
Build Topologies: Add devices, cable them (with automatic cable selection like the GUI), or build an entire lab (devices, expansion cards, cables, host IPs, IOS configs) in one call.
Export and Rebuild Labs: Export the open network, configs included, in the same format, and rebuild it anywhere.
Configure Devices: Paste whole IOS configs (
show running-configoutput works as-is), run exec or config commands, and get each command's status. Read, save, and erase running and startup configs.Expansion Modules: See a device's slots and supported cards (HWIC-2T, NIM-2T, WIC, SFPs…) and install or remove them. Power cycling is handled for you.
End Devices: Set PC/server IP settings, and run Command Prompt commands (
ping,ipconfig,tracert) with their output.Verify Connectivity: Ping matrices with loss statistics, retrying the usual ARP/STP first-ping failures.
Simulation Mode (Packet Tracer's "packet capture"): Send PDUs, step time, list events, and read Packet Tracer's own OSI-layer explanation of each hop plus decoded headers (Ethernet, 802.1Q, IP, ICMP, ARP, HDLC, TCP/UDP, STP, OSPF, DHCP, DNS, CDP…).
Console and Command Logs: Read a device's console buffer (
%LINK/%LINEPROTOmessages) and Packet Tracer's log of typed commands.Annotations: Add, edit, and delete notes, lines, and circles on the logical workspace.
Activities (.pka): Read an activity's instructions. Answers and scores are deliberately out of reach.
Crash Protection: Only IPC calls verified against a live Packet Tracer are ever sent, and known crashing calls are blocked (see Crash protection).
Cross-Platform: Tested on macOS and Windows with Packet Tracer 9.0.1.
.pktfiles move between them.Modular Architecture: Tools are organized into modules (devices, links, cli, simulation, etc.), following cml-mcp.
Quick Start
Requirements
Cisco Packet Tracer 9.0.1, running and logged in to NetAcad (8.2.0 API data is included but not re-verified)
macOS or Windows (Linux is detected but untested)
uv, which brings its own Python (3.12–3.14)
git, which
uvxuses to fetch the server from GitHub
Step 1: Register pt-mcp with Packet Tracer (one time per computer)
uvx --from git+https://github.com/kiskander/pt-mcp-server pt-mcp setupThis finds Packet Tracer, generates a private key for this computer, creates PTMCP.pta in a pt-mcp folder in
your home folder (~/pt-mcp/ or C:\Users\<you>\pt-mcp\), and opens that folder for you.
Then in Packet Tracer:
Extensions → IPC → Configure Apps… → Add
Choose
PTMCP.ptafrom thept-mcpfolderAccept the prompt and leave it on On Demand
Step 2: Check the connection
uvx --from git+https://github.com/kiskander/pt-mcp-server pt-mcp doctorEvery line should say [OK]. If one doesn't, it tells you how to fix it.
Step 3: Add the server to your MCP client
Copy the block for your client into its MCP configuration file. No keys or passwords go here: the server reads the
key that setup saved.
Claude Desktop: claude_desktop_config.json
(macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\, Linux ~/.config/Claude/)
{
"mcpServers": {
"Cisco Packet Tracer": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/kiskander/pt-mcp-server", "pt-mcp"]
}
}
}Claude Code: .mcp.json in your project (or run
claude mcp add --scope user packet-tracer -- uvx --from git+https://github.com/kiskander/pt-mcp-server pt-mcp)
{
"mcpServers": {
"packet-tracer": {
"command": "uvx",
"args": ["--from", "git+https://github.com/kiskander/pt-mcp-server", "pt-mcp"]
}
}
}Cursor: ~/.cursor/mcp.json (or .cursor/mcp.json in a project)
{
"mcpServers": {
"packet-tracer": {
"command": "uvx",
"args": ["--from", "git+https://github.com/kiskander/pt-mcp-server", "pt-mcp"]
}
}
}VS Code (GitHub Copilot): .vscode/mcp.json
{
"servers": {
"packet-tracer": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/kiskander/pt-mcp-server", "pt-mcp"]
}
}
}Restart your client after saving, then ask: "Is Packet Tracer connected?"
"Command not found" for uvx? MCP clients don't always inherit your shell's PATH. Replace "uvx" with its
full path: run which uvx on macOS/Linux or where uvx on Windows (e.g. "/Users/alice/.local/bin/uvx" or
"C:\\Users\\alice\\.local\\bin\\uvx.exe"; JSON needs doubled backslashes).
Use the--from git+https://github.com/kiskander/pt-mcp-server form exactly. A different, unrelated package
called pt-mcp exists on PyPI, so uvx pt-mcp would run that instead.
Any setting can also go in an env block. If you set PT_APP_KEY here, it must match the key in the .pta that is
registered in Packet Tracer (the one in pt-mcp.env, written by setup). A stale key here is the most common cause of
"authentication rejected".
{
"mcpServers": {
"Cisco Packet Tracer": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/kiskander/pt-mcp-server", "pt-mcp"],
"env": {
"PT_HOST": "127.0.0.1",
"PT_PORT": "39000",
"PT_APP_ID": "net.netacad.cisco.ptmcp",
"PT_APP_KEY": "<key from pt-mcp.env>"
}
}
}
}pt-mcp.env is in ~/Library/Application Support/pt-mcp/ (macOS), %APPDATA%\pt-mcp\ (Windows), or
~/.config/pt-mcp/ (Linux). All settings are listed in INSTALLATION.md.
For running from a clone, HTTP mode, Windows notes, and troubleshooting, see INSTALLATION.md.
Available MCP Tools
The server provides 45 MCP tools by default (plus one opt-in), organized into the following categories:
Connection
get_pt_information - Connection check: Packet Tracer version, device/link counts, workspace mode, open file
Network Topology
create_full_network_topology - Build a whole lab (devices, modules, links, host IPs, IOS configs) in one call; errors are collected, not fatal
export_network_topology - Export the open network (with configs) in the same format, for rebuilding or review
set_network_description - Set the file's description (objectives, addressing table…)
Device Management
get_devices_in_network - List devices with type, model, power, and position
get_device_models - List models for a device type (router, switch, pc, server, …)
add_device_to_network - Add a device, optionally named and positioned
rename_device - Change a device's display name
set_device_power - Power a device on or off
delete_device_from_network - Delete a device and its cables (asks for confirmation)
Device Configuration
get_device_configuration - Read the running-config or startup-config
configure_device - Apply an IOS config block (handles
show runoutput and sub-modes; reports only rejected lines)save_device_configuration -
write memoryerase_device_configuration - Erase startup-config and reload to a blank config (asks for confirmation)
Expansion Modules
get_device_model_details - Show slots (installed or empty) and every supported module with its description
add_module_to_device - Install a module (e.g. HWIC-2T) and return the new ports
remove_module_from_device - Remove a module (asks for confirmation)
Interface & Link Management
get_interfaces_for_device - Ports with status, MAC, IP/mask, and the remote device/port
configure_host_interface - IP, mask, gateway, DNS, or DHCP on PCs, servers, and laptops
set_interface_power - Turn a single port on or off
connect_two_devices - Cable two ports (
autopicks serial, console, straight-through, or crossover)get_all_links - Every cable with both ends and its type
delete_link - Remove the cable on a port (asks for confirmation)
CLI & Verification
send_cli_command - Run IOS commands in exec or config mode, with per-command status (
ok,invalid,rejected, …) and outputsend_terminal_command - Run a command in a PC/server Command Prompt (or a device terminal) and collect the output
verify_connectivity - Ping a list of destinations from a device and report sent/received/loss for each
get_console_log - The device's console buffer (boot and link messages)
get_command_history - Packet Tracer's log of commands typed into terminals
Simulation Mode
set_simulation_mode - Switch between Realtime and Simulation
send_simple_pdu - Send an ICMP PDU between two devices (the envelope tool)
step_simulation - Step forward or backward
get_simulation_events - The event list: where each PDU is, where it came from, protocol, and what happened
get_simulation_event_details - Packet Tracer's OSI-layer explanation of an event plus decoded inbound/outbound headers
reset_simulation - Clear the event list
Annotations (Visual Elements)
get_annotations - Notes, lines, and shapes on the workspace
add_text_note - Add a text note
edit_text_note - Change a note's text
add_line_annotation - Draw a line
add_circle_annotation - Draw a circle
delete_annotation - Delete a note or shape (asks for confirmation)
Activities
get_activity_instructions - Read a
.pkaactivity's instruction pages as plain text (not answers or scores)
Files
create_new_network - Start a new, empty network (asks for confirmation)
open_network_file - Open a
.pktor.pkasave_network_file - Save the network as a
.pkt
IPC API Reference
describe_ipc_class - Look up the methods and wire types of any Packet Tracer IPC class (offline)
call_ipc_api - (opt-in,
PT_MCP_ENABLE_RAW_IPC=true) Call the raw IPC API; still limited to verified methods
Usage
Once configured, make sure Packet Tracer is open and logged in, restart your MCP client, and start chatting.
What Can You Do?
Here are some example prompts to try:
Getting Started:
"Is Packet Tracer connected? What version is it?"
"What router models can I add?"
"What's in my network right now?"
Building Labs:
"Add a 2911 router called R1 and a 2960 switch called SW1, and connect them"
"Give R1 a serial card so I can do a WAN link"
"Build two routers with a serial link between them and a PC behind each one"
Configuration & Testing:
"Configure the router interfaces with 192.168.1.1/24 and 10.0.12.1/30 and bring them up"
"Add static routes so both LANs can reach each other, then save the configs"
"Can PC1 ping PC2? If not, why not?"
"Show me R1's routing table and running config"
Learning:
"Switch to simulation mode, send a ping from PC1 to PC2, and explain each hop"
"Why did the switch flood that frame?"
"Show me the IP and Ethernet headers at the router. What changed?"
"What does this activity ask me to do?"
Complete Workflow Example:
"Start a new network"
"Add two 2911 routers R1 and R2, each with an HWIC-2T, a 2960 switch, and two PCs"
"Connect R1 and R2 over Serial0/0/0, R1 to the switch, PC1 to the switch, and PC2 directly to R2"
"Address R1's LAN as 192.168.1.0/24, R2's as 192.168.2.0/24, the WAN as 10.0.12.0/30, configure static routes, and save"
"Verify PC1 can reach PC2"
"In simulation mode, send a PDU from PC1 to PC2 and walk me through what R1 does with it"
"Add a note labelling the WAN link, then save the lab to ~/labs/serial-wan.pkt"
System Prompt
If your LLM tool supports a system prompt, this works well:
You are a networking lab assistant for Cisco Packet Tracer, helping a student studying for the CCNA. You can build and configure topologies, verify connectivity, and use simulation mode to show how packets move. Explain what each step does and why. Verify with show commands and pings rather than assuming. On graded activities (.pka files), teach and give hints instead of completing the tasks for the student.
An example agent skill with Packet Tracer-specific conventions is also included.
Crash protection
Some Packet Tracer IPC calls crash the application (it exits and the open network is lost). The one confirmed so far
is LogicalWorkspace.getEllipseItemData on 9.0.1. Packet Tracer exposes 4,500+ IPC methods and most have never been
exercised, so:
The client only sends methods on an allow-list recorded while every tool ran successfully against a live Packet Tracer. Anything else is refused before it reaches Packet Tracer.
Known crashing calls are blocked unconditionally.
The raw
call_ipc_apitool is off by default, and even when enabled it is limited to verified methods unless you also setPT_ALLOW_UNVERIFIED_IPC=true.
Academic integrity
The ExApp file that setup builds deliberately does not request Packet Tracer's ACTIVITY_WIZARD privilege, the
one that exposes a .pka activity's answer network, assessment, score, and password hash. Packet Tracer itself
refuses those calls, so no client can use this server to pull answers. A test enforces that the privilege stays out.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
For development setup, testing, and code style, see DEVELOPMENT.md.
Troubleshooting
Common Issues
Start with pt-mcp doctor. It checks each step and prints the fix for whatever fails.
"authentication rejected"
The ExApp isn't registered with the key this machine is using. Re-run pt-mcp setup, then in Extensions → IPC →
Configure Apps remove any old PT MCP Bridge entry and Add the new .pta.
"Cannot reach Packet Tracer" / nothing listening
Packet Tracer must be running and past the NetAcad login; IPC starts after you log in. Check Extensions → IPC → Options (Start Listening, port). If 39000 is busy (a second instance, or right after a crash), Packet Tracer moves to 39001+, and the server scans for it automatically.
"Refusing to call …: it has not been verified"
That's crash protection working. The tool you used needs an IPC method that hasn't been verified on your Packet Tracer version. Please open an issue with the method name and your Packet Tracer version.
Commands rejected right after adding a module
Adding or removing a module power-cycles the device (Packet Tracer requires it), and unsaved configuration on that device is lost. Save first, and give the device a moment to boot; the tools wait for it automatically.
For more troubleshooting help, see INSTALLATION.md.
Getting Help
Check the Issues page for known problems
See CONTRIBUTING.md for how to report bugs
Documentation
INSTALLATION.md - Detailed installation for macOS and Windows, MCP clients, HTTP mode, and every setting
DEVELOPMENT.md - Development setup, testing, adding tools, and the crash-protection workflow
CONTRIBUTING.md - How to contribute to the project
tests/README.md - Mock vs live test modes and the fake Packet Tracer
examples/skill/packet-tracer/SKILL.md - Example agent skill with Packet Tracer conventions for the model
examples/skill/INSTALL.md - How to install the skill into Claude Code, Claude Desktop, Cursor, and VS Code + GitHub Copilot
License
The MCP server portion of this project is licensed under the BSD 2-Clause "Simplified" License. However, it leverages IPC API definitions and data derived from Cisco Packet Tracer itself, which are covered under a proprietary Cisco license.
Available Tools
45 toolsadd_circle_annotationAdd a Circle AnnotationA
Draw a circle on the logical workspace, e.g. to group a LAN, mark a broadcast or collision domain, or highlight an OSPF area. Returns the circle's id (get_annotations lists circles as kind "ellipse").
Examples:
"Circle the devices in VLAN 10"
"Mark each broadcast domain with a circle"
Inputs: center_x (required), center_y (required), color, radius. Returns: result
add_device_to_networkAdd a Device to the NetworkA
Add a device to the logical workspace. Returns the device's name (Packet Tracer assigns one such
as 'Router0'; it is renamed to name if given).
Required: device_type (e.g. "router", "switch", "pc", "server"), model (e.g. "2911", "ISR4331", "2960-24TT", "PC-PT", "Server-PT" -- discover via get_device_models). Optional: x/y position, name.
Examples:
"Add a 2911 router called R1"
"Put a 2960 switch at 300,200"
"Add two PCs to the network"
Inputs: model (required), device_type (required), x, y, +1 more. Returns: result
add_line_annotationAdd a Line AnnotationA
Draw a line on the logical workspace, e.g. to separate sites, mark a WAN boundary, or underline a label. Returns the line's id.
Examples:
"Draw a red line between the HQ and branch halves of the topology"
"Underline the title note"
Inputs: end_x (required), end_y (required), start_x (required), start_y (required), +2 more. Returns: result
add_module_to_deviceAdd a Module to a DeviceA
Install a hardware module (e.g. HWIC-2T for two serial ports, NIM-2T on ISR4000s, HWIC-4ESW, SFPs) into a free slot. The device is powered off for the change and powered back on, so an unsaved running-config on it is lost -- save first if needed. Returns the new port names (e.g. ["Serial0/0/0", "Serial0/0/1"]).
Examples:
"Add a serial card to R1 so I can do a WAN link"
"Put an HWIC-2T in slot 0/0 of R2"
"Add a NIM-2T to the ISR4331"
Inputs: name (required), slot (required), module (required). Returns: result
add_text_noteAdd a Text NoteA
Place a text note on the logical workspace (the "Place Note" tool) -- e.g. subnet labels, "VLAN 10 - Sales", an addressing table, or lab instructions. Returns the note's id.
Examples:
"Label the LAN behind R1 as 192.168.1.0/24"
"Add a note with the lab objectives at the top"
Inputs: text (required), x, y. Returns: result
configure_deviceConfigure a Cisco DeviceADestructive
Apply a block of IOS configuration to a Cisco device, like pasting it into the CLI in global
config mode. Accepts output of show running-config as-is: "!" lines, "end", "enable",
"configure terminal", "version", and prompt lines are skipped. Indentation does not matter.
Returns how many commands were sent and only the ones IOS rejected. save=true runs
"write memory" afterwards.
Prefer this over send_cli_command for multi-line configs (VLANs, OSPF, ACLs, interface blocks).
CRITICAL: Changes device configuration. Show the user the config and confirm before applying.
Examples:
"Configure OSPF area 0 on R1 for 10.0.0.0/8"
"Apply this config to SW1 and save it"
"Create VLANs 10 and 20 on the switch and assign Fa0/1-12 to VLAN 10"
Inputs: name (required), config (required), save. Returns: saved, device, errors, commands_sent
configure_host_interfaceConfigure an End-Device InterfaceAIdempotent
Set IPv4 settings on an end device's port (PC, laptop, server, printer...). Typical port names: 'FastEthernet0' (PC-PT), 'GigabitEthernet0'. For routers and switches use send_cli_command. subnet_mask defaults to 255.255.255.0 when ip_address is given. dhcp=true switches the port to DHCP.
Examples:
"Give PC0 192.168.1.10/24 with gateway 192.168.1.1"
"Set the server's DNS to 8.8.8.8"
"Put PC1 on DHCP"
Inputs: name (required), port (required), dhcp, dns_server, +3 more. Returns: dhcp, ip_address, subnet_mask
connect_two_devicesConnect Two DevicesA
Cable a port on one device to a port on another and return the cable type used. Both ports must exist and be free; use get_interfaces_for_device to find port names. cable="auto" (default) picks like Packet Tracer's GUI: serial for Serial ports, console for console ports, straight-through between a switch and a host/router, crossover between like devices.
Examples:
"Connect R1 Gi0/0 to SW1 Gi0/1"
"Cable PC0 FastEthernet0 to the switch's Fa0/1"
"Add a serial link between R1 Serial0/1/0 and R2 Serial0/1/0"
Inputs: port_a (required), port_b (required), device_a (required), device_b (required), +1 more. Returns: result
create_full_network_topologyCreate a Full Network TopologyA
Build a whole network in one call into the open Packet Tracer file (existing devices are kept). Same format export_network_topology returns, so exports can be rebuilt. Steps run in order: devices (+modules), links, host IP settings, then IOS configs; errors are collected, not fatal.
Format: { "description": "OSPF lab", "devices": [ {"name": "R1", "device_type": "router", "model": "2911", "x": 100, "y": 100, "modules": [{"slot": "0/0", "module": "HWIC-2T"}], "config": "hostname R1\ninterface Gi0/0\n ip address 192.168.1.1 255.255.255.0\n no shutdown"}, {"name": "SW1", "device_type": "switch", "model": "2960-24TT", "x": 300, "y": 100}, {"name": "PC1", "device_type": "pc", "model": "PC-PT", "x": 500, "y": 100} ], "links": [{"device_a": "R1", "port_a": "GigabitEthernet0/0", "device_b": "SW1", "port_b": "GigabitEthernet0/1"}, {"device_a": "PC1", "port_a": "FastEthernet0", "device_b": "SW1", "port_b": "FastEthernet0/1"}], "hosts": [{"name": "PC1", "port": "FastEthernet0", "ip_address": "192.168.1.10", "subnet_mask": "255.255.255.0", "default_gateway": "192.168.1.1"}] } Use full port names. cable defaults to "auto". Discover models with get_device_models and modules with get_device_model_details.
Examples:
"Build a 3-router OSPF lab with a LAN behind each router"
"Recreate the topology I exported earlier"
"Set up a router-on-a-stick lab with two VLANs"
Inputs: topology (required). Returns: links, errors, devices
create_new_networkCreate a New Empty NetworkADestructive
Close the current network and start a new, empty one without a save prompt.
CRITICAL: Unsaved changes to the current network are lost. Always ask "Discard the current network?" (or offer save_network_file first) and wait for the user's "yes" before invoking this tool.
Examples:
"Start a fresh topology"
"Clear the workspace"
Inputs: no named parameters. Returns: result
delete_annotationDelete an AnnotationADestructive
Delete a note or drawn shape from the workspace.
CRITICAL: Destructive. Confirm with the user before deleting.
Examples:
"Remove the old 'TODO' note"
Inputs: annotation_id (required). Returns: result
delete_device_from_networkDelete a Device from the NetworkADestructive
Delete a device and all of its links from the network.
CRITICAL: Destructive and irreversible (the device's configuration is lost). Always ask "Confirm deletion of [device]?" and wait for the user's "yes" before invoking this tool.
Examples:
"Delete R2"
"Remove the extra switch"
Inputs: name (required). Returns: result
delete_linkDelete a LinkADestructive
Remove the cable attached to a device port.
CRITICAL: Destructive. Always ask "Confirm removal of the link on [device] [port]?" and wait for the user's "yes" before invoking this tool.
Examples:
"Disconnect R1 Gi0/0"
"Remove the cable between PC0 and the switch"
Inputs: port (required), device (required). Returns: result
describe_ipc_classDescribe a Packet Tracer IPC ClassARead-only
Show an IPC class's inheritance and method signatures, (param types) -> return type plus the ExApp privilege each needs. Use with call_ipc_api.
Examples:
"What methods does a Router have for OSPF?" -> class_name="OspfProcess"
"How do I read a port's MAC address?" -> class_name="Port", name_filter="mac"
Inputs: class_name (required), name_filter. Returns: object
edit_text_noteEdit a Text NoteBIdempotent
Replace the text of an existing note.
Examples:
"Change the R1 LAN label to 10.1.1.0/24"
Inputs: text (required), annotation_id (required). Returns: result
erase_device_configurationErase a Device's ConfigurationADestructive
Erase a Cisco device's startup-config ("write erase") and, by default, reload it so it boots with a blank configuration -- the classic way to reset lab gear. Prompts are answered automatically (the running config is NOT saved before reload).
CRITICAL: Destructive and irreversible. Always ask "Erase the configuration of [device]?" and wait for the user's "yes" before invoking this tool.
Examples:
"Wipe R1's configuration"
"Reset the switch to factory defaults"
Inputs: name (required), reload. Returns: result
export_network_topologyExport the Network TopologyARead-only
Export the open network as a topology object: devices (type, model, position, installed modules, running-config), links, and host IPv4 settings. The result can be fed back to create_full_network_topology, saved as a study reference, or reviewed for mistakes.
Examples:
"Export my lab"
"Give me a summary of everything in this network including configs"
"Back up this topology as JSON"
Inputs: include_configs. Returns: hosts, links, devices, description
get_activity_instructionsGet Activity InstructionsARead-only
If the open file is a Packet Tracer activity (.pka, e.g. a NetAcad CCNA lab), return its instruction pages as plain text: objectives, addressing table, and the tasks to complete.
This server cannot read an activity's answers, score or completion percentage (it does not hold Packet Tracer's ACTIVITY_WIZARD privilege). Use Check Results in Packet Tracer for grading. When helping a student, prefer explaining concepts and hinting over doing the graded tasks for them.
Examples:
"What does this activity ask me to do?"
"Read me the addressing table from the instructions"
"Explain task 3 of this lab"
Inputs: no named parameters. Returns: pages, page_count, is_activity
get_all_linksGet All Links in the NetworkARead-only
List every cable in the network as device/port pairs with the cable type.
Examples:
"Show all the links"
"What is R1 connected to?"
"Map the topology connections"
Inputs: no named parameters. Returns: result
get_annotationsGet Workspace AnnotationsARead-only
List the notes and drawn shapes on the logical workspace with their ids, positions and note text.
Examples:
"What notes are on my topology?"
"Find the label that says 'LAN A'"
Inputs: no named parameters. Returns: result
get_command_historyGet Command HistoryARead-only
Return Packet Tracer's command log: commands typed into device terminals (by a person in the CLI tab, or by send_terminal_command/verify_connectivity; send_cli_command and configure_device are not logged), with time, device and prompt (so the mode is visible, e.g. "R1(config-if)#"). Great for reviewing how a lab was solved, spotting a typo, or building a study sheet of the commands used. Most recent last.
Examples:
"What commands did I type on R1?"
"Make me a cheat sheet from the commands I used in this lab"
"Which command did I mistype?"
Inputs: name, limit. Returns: result
get_console_logGet Console Log for a DeviceARead-only
Return the device's console/terminal buffer as shown in its CLI tab (or the PC's Command Prompt): boot messages, %LINK/%LINEPROTO and other syslog messages, and recent command output.
Examples:
"Show R1's console messages"
"Did any interface go down on the switch?"
"What happened on PC1's command prompt?"
Inputs: name (required), max_chars. Returns: result
get_device_configurationGet a Device's ConfigurationARead-only
Return a Cisco device's running-config (default) or startup-config as text. Useful for reviewing a lab, comparing running vs startup ("did I save?"), or exporting a config to reuse.
Examples:
"Show me R1's running config"
"Is SW1's startup config the same as its running config?"
Inputs: name (required), source. Returns: config, device, source
get_device_model_detailsGet Device Model Details (Slots and Modules)ARead-only
Show a device's expansion slots (installed module and its ports, or empty) and every module model it supports with Packet Tracer's description. Use before add_module_to_device.
Examples:
"What modules can I add to R1?"
"Which slots on the 2911 are free?"
"Does this router have serial interfaces?"
Inputs: name (required). Returns: model, slots, device, supported_modules
get_device_modelsGet Available Device ModelsARead-only
List the device models Packet Tracer offers for a device type. Use one of these model strings with add_device_to_network.
Examples:
"Which router models can I add?"
"List the available switch models"
"What PC models does Packet Tracer have?"
Inputs: device_type (required). Returns: result
get_devices_in_networkGet All Devices in the NetworkARead-only
List every device in the active Packet Tracer network: name, IPC class, model, device type, power state and logical-workspace x/y position. Packet Tracer's auto-created power distribution device is hidden unless include_infrastructure=true.
Examples:
"What devices are in my Packet Tracer network?"
"List all routers and switches"
"Show me the topology"
Inputs: include_infrastructure. Returns: result
get_interfaces_for_deviceGet Interfaces for a DeviceARead-only
List a device's ports: name, IPC class, link/protocol state, MAC, IPv4 address/mask (host ports), and the remote port name if a cable is attached.
Examples:
"What interfaces does R1 have?"
"Which ports on the switch are connected?"
"Show PC0's IP address"
Inputs: name (required). Returns: result
get_pt_informationGet Packet Tracer InformationARead-only
Connect to Cisco Packet Tracer over IPC and report its version, the IPC API spec in use, device/link counts, workspace mode (logical/physical, realtime/simulation) and the open file. Call this first to confirm the connection works.
Examples:
"Is Packet Tracer connected?"
"What version of Packet Tracer is running?"
"How many devices are in my network?"
Inputs: no named parameters. Returns: file, link_count, pt_version, server_uid, +4 more
get_simulation_event_detailsGet Simulation Event DetailsARead-only
Explain one Simulation-mode event the way Packet Tracer's PDU Information window does: the device's OSI-layer decisions in plain English ("The frame destination MAC address is not in the MAC table. The Switch floods the frame...") plus the inbound and outbound headers decoded field by field (Ethernet, 802.1Q, IP, ICMP, ARP, TCP/UDP, STP, OSPF, DHCP, ...). Great for learning why a packet was forwarded or dropped.
Examples:
"Why was event 2 dropped?"
"What does the switch do with the frame at event 1?"
"Show me the IP and Ethernet headers of the ping"
Inputs: index (required). Returns: time, index, source, status, +7 more
get_simulation_eventsGet Simulation EventsARead-only
List Simulation-mode events (the Event List): time, the device the PDU is at, where it came from, protocol, and what happened (sent, accepted, dropped, buffered...).
Examples:
"Where did the ping go?"
"Show only the ARP events"
"Did any packet get dropped?"
Inputs: limit, start, protocol. Returns: result
open_network_fileOpen a Network FileADestructive
Open a .pkt (network) or .pka (activity) file. Returns Packet Tracer's result code.
CRITICAL: Replaces the open network; unsaved changes may be lost. Confirm with the user first.
Examples:
"Open ~/labs/ospf.pkt"
"Load the activity file I downloaded"
Inputs: path (required). Returns: result
remove_module_from_deviceRemove a Module from a DeviceADestructive
Remove the module in a slot. The device is power-cycled; cables on the module's ports are removed.
CRITICAL: Destructive. Confirm with the user ("Remove the module in [slot] of [device]?") first.
Examples:
"Take the serial card out of R1 slot 0/0"
Inputs: name (required), slot (required). Returns: result
rename_deviceRename a DeviceAIdempotent
Change a device's display name (the name used by all other tools). This does not change the IOS hostname; use send_cli_command with "hostname X" for that.
Examples:
"Rename Router0 to R1"
"Call PC0 'Accounting-PC'"
Inputs: name (required), new_name (required). Returns: result
reset_simulationReset the SimulationA
Clear the Simulation-mode event list and restart simulation time (Reset Simulation). Device configurations are not changed.
Examples:
"Clear the event list"
"Start the simulation over"
Inputs: no named parameters. Returns: result
save_device_configurationSave a Device's ConfigurationAIdempotent
Save a Cisco device's running-config to startup-config ("write memory" / "copy run start") so it survives a reload or power cycle. Returns true when IOS reports [OK].
Examples:
"Save R1's config"
"Make sure all my changes on SW1 survive a reload"
Inputs: name (required). Returns: result
save_network_fileSave the Network to a FileA
Save the current network as a .pkt file at an absolute path, without a dialog. Overwrites an existing file at that path. Returns the saved path.
Examples:
"Save this topology to ~/labs/campus.pkt"
"Back up the network"
Inputs: path (required). Returns: result
send_cli_commandSend CLI Command to a Cisco DeviceADestructive
Send IOS commands to a Cisco device (router, switch, multilayer switch, ASA, WLC...) and return each command's status and output. Works even before the device finishes booting (boot is skipped).
Separate multiple commands with newlines.
config_command=false (default): privileged exec mode (e.g. "show ip interface brief").
config_command=true: configuration mode -- DO NOT include "enable", "configure terminal" or "end". Sub-modes carry over, so "interface Gi0/0\nip address 10.0.0.1 255.255.255.0\nno shutdown" works.
status is "invalid"/"incomplete"/"ambiguous" when IOS rejected a command.
CRITICAL: Can modify device state. Review commands carefully before executing, especially when config_command=true.
Examples:
"Run 'show ip route' on R1"
"Configure Gi0/0 on R1 with 10.0.0.1/24 and bring it up"
"Show the running config of SW1"
Inputs: name (required), commands (required), config_command. Returns: result
send_simple_pduSend a Simple PDU (ICMP)A
Create a Simple PDU (the envelope tool: an ICMP echo) from one device to another. In Simulation mode, step_simulation then moves it hop by hop and get_simulation_events shows where it went -- including any ARP it triggers. Returns the PDU's index in the user-created PDU list.
Examples:
"Send a ping PDU from PC1 to the server and watch it"
"Show me how ARP works between PC1 and R1"
Inputs: source (required), destination (required). Returns: result
send_terminal_commandSend Command to an End-Device TerminalA
Type one command into a device's terminal and collect its output -- for PCs, laptops and servers this is the Desktop > Command Prompt ('ping 10.0.0.1', 'ipconfig /all', 'tracert 8.8.8.8', 'arp -a'). Output is collected until Packet Tracer reports the command ended or the timeout passes; pings in Realtime mode take a few seconds.
Examples:
"Ping 192.168.1.1 from PC0"
"Run ipconfig on the laptop"
"Traceroute from PC1 to the server"
Inputs: name (required), command (required), timeout. Returns: output, status, completed
set_device_powerSet Device PowerAIdempotent
Power a device on or off. Powering off a Cisco device discards its unsaved running-config.
Examples:
"Turn off R1"
"Power on all the switches"
Inputs: name (required), power_on (required). Returns: result
set_interface_powerSet Interface PowerAIdempotent
Administratively enable or disable a port at the physical level (like plugging/unplugging the port's power in Packet Tracer). For IOS 'shutdown'/'no shutdown' use send_cli_command.
Examples:
"Disable PC0's FastEthernet0"
Inputs: name (required), port (required), power_on (required). Returns: result
set_network_descriptionSet the Network DescriptionAIdempotent
Set the network file's description (shown in Packet Tracer under File > Network description / Info). Handy for lab notes, objectives, or an IP addressing table.
Examples:
"Describe this lab as 'CCNA 2 - OSPF single area practice'"
"Put the addressing table in the network description"
Inputs: description (required). Returns: result
set_simulation_modeSwitch Realtime/Simulation ModeAIdempotent
Switch Packet Tracer between Simulation mode (enabled=true: time advances only when stepped, every packet is recorded) and Realtime mode (enabled=false). Returns the resulting mode. Switching back to Realtime clears the event list, so read events/details first.
Examples:
"Switch to simulation mode so I can watch the ping"
"Go back to realtime"
Inputs: enabled (required). Returns: result
step_simulationStep the SimulationA
Advance (or rewind) Simulation mode by N steps, like clicking Capture/Forward. Returns the simulation time, total event count and how many new events were recorded.
Examples:
"Step the simulation forward 5 times"
"Go back one step"
Inputs: steps, direction. Returns: object
verify_connectivityVerify Connectivity (Ping Test)ARead-only
Ping each destination from a device (PC/server Command Prompt or a Cisco device) and report sent/received/ loss per destination. A destination that loses everything is retried (ARP resolution and STP on fresh switch links make the first ping fail). Raw output is included only for failures. The standard way to verify a CCNA lab end to end.
Examples:
"Can PC1 reach its gateway, the server and the other LAN?"
"Verify connectivity from PC1 to 192.168.1.1, 192.168.2.10 and 8.8.8.8"
"Is my static routing working?"
Inputs: source (required), destinations (required), attempts. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 45 tools
Most tools have clearly distinct resource/action targets, especially around devices, links, annotations, files, and simulation. A few boundaries overlap slightly: send_cli_command, configure_device, and send_terminal_command all send commands, though the descriptions explain when to use each.
All tool names use consistent snake_case verb_noun phrasing such as get_devices_in_network, add_device_to_network, delete_link, and set_simulation_mode. Variants like get_interfaces_for_device and get_device_model_details are still predictable and readable.
The 45-tool surface is very large for an MCP server and exceeds the expected range even for a broad Packet Tracer automation domain. While many tools are justified, the set could likely be consolidated into fewer higher-level operations.
Coverage is strong across topology building, device configuration, interfaces, links, modules, annotations, files, and simulation workflows. Minor gaps remain, such as repositioning existing devices or reading back some workspace metadata like the network description, but core lifecycles are well covered.
Maintenance
Related MCP Connectors
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Manage uptime monitors and incidents and search logs, metrics and traces from an AI assistant.
Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
Related MCP Servers
- 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.-
- AlicenseAqualityCmaintenanceEnables AI clients like Claude Desktop and Cursor to control Cisco Packet Tracer through natural language, including generating network topologies, running device configurations, and managing simulations.23MIT
- 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