PT Tutor
Provides a troubleshooting tutor for Cisco Packet Tracer labs by reading the live network topology and device state, running read-only diagnostic commands such as show, ping, and traceroute, diagnosing reachability faults, and offering layered hints without revealing or applying configurations.
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 TutorPC1 can't ping the server — help me find the fault"
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.
PT Tutor
A troubleshooting tutor for Cisco Packet Tracer, built on the Model Context Protocol.
It reads the student's live network, finds the fault, and teaches them to find it too.
Most AI tools for Packet Tracer build and fix the lab for you. PT Tutor does the opposite: it works out what's wrong, then asks the next good question, the way a lab instructor would. The student makes every change.
Features
Read-only by design. Only status commands (
show,ping,traceroute,ipconfig) can run. Configuration commands are refused.Real diagnosis. It walks the path in both directions (cabling, interfaces, VLANs, trunks, gateways, routes, ACLs, DHCP) and checks its verdict with a live ping.
Hint ladder. Every finding has three levels: a nudge, a pointer to where to look, then the concept. No level hands over the configuration.
Assessment guard. If a graded activity (
.pka) is open, it switches to hint-only mode. It says where the problem is, not what it is. If it can't tell whether the file is graded, it assumes it is.
Related MCP server: NetSage AI
How it works
Claude ──MCP──▶ PT Tutor server ──file mailbox──▶ Packet Tracer script module
(Node.js) ~/.pt-tutor (reads the live network)A small script module inside Packet Tracer exchanges files with the server in ~/.pt-tutor/mailbox. It opens no network port, and it accepts only a short list of read-only commands.
Getting started
Requirements: Packet Tracer 9.0, Node.js 20 or newer, and an MCP client such as Claude Code or Claude Desktop.
1. Get the Packet Tracer module
npx -y pt-tutor-mcp bridgeThis saves pt-tutor-bridge.pts in the current folder.
2. Add it to Packet Tracer
Open Extensions → Scripting → Configure PT Script Modules.
Click Add and choose
pt-tutor-bridge.pts.Give the module file access in its permission settings, then start it.
3. Connect your MCP client
claude mcp add pt-tutor -- npx -y pt-tutor-mcpFor Claude Desktop, add it to claude_desktop_config.json:
{
"mcpServers": {
"pt-tutor": { "command": "npx", "args": ["-y", "pt-tutor-mcp"] }
}
}4. Try it. Open a lab, break something, and ask for help. In Claude Code, run:
/mcp__pt-tutor__tutor PC1 can't reach the serverTools
Tool | Purpose |
| Connection check, the open file, and the current tutor mode |
| Devices, ports and links on the canvas |
| Interfaces, addresses, routes and VLANs of one device |
| One read-only command on a device |
| Why a source can't reach a destination (10–60 s) |
| The next hint for a finding |
For instructors
Set PT_TUTOR_MODE in the server's env:
Value | Behaviour |
| Hint-only during graded activities, full hints otherwise |
| Hint-only for every lab |
An unrecognised value also means hint-only, so a typo can't turn the guard off. The setting lives in the MCP config, so on shared machines keep that file somewhere students can't edit.
Limitations
Packet Tracer 9 only. Developed on macOS; Windows and Linux are untested.
Static routing, VLANs, trunks and ACLs are checked in depth. OSPF and EIGRP are read from the routing table only.
The commands the tutor runs appear in the device's console history.
Development
git clone https://github.com/faithere1/pt-tutor-mcp.git && cd pt-tutor-mcp
npm install
npm test # build and run the test suite (no Packet Tracer needed)
node tools/build-release.mjs # write the release bridge with dev commands offSee PROGRESS.md for the architecture, the dev setup and the Packet Tracer API notes.
Getting help
Found a bug or a wrong diagnosis? Open an issue. Contributions are welcome; see CONTRIBUTING.md.
License
Available Tools
6 toolsdiagnoseDiagnose connectivityARead-only
Explain why one device can or cannot reach another. Reads the whole live network (addressing, gateways, VLANs, trunks, interface state, routing tables, static routes, ACLs, proxy ARP), walks the path hop by hop in both directions, and runs a real ping to confirm. Returns findings with a code, the device and interface, evidence and the concept involved. In tutor mode, use the findings to ask guiding questions; do not paste the fix. Pass a finding to tutor_hint to get a graded hint. In hint-only mode the findings are redacted to where the problem is (device, interface, area) and a ref for tutor_hint. Takes 10-60 seconds on larger labs.
| Name | Required | Description | Default |
|---|---|---|---|
| ping | No | Also run a real ping from the source to confirm (default true). | |
| source | Yes | Device the traffic starts from, e.g. 'PC1'. | |
| destination | Yes | Destination device name or IPv4 address, e.g. 'PC3' or '192.168.20.10'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint already covering safety, the description adds substantial operational context: it reads live state end-to-end, walks the path bidirectionally, issues a real ping, returns coded findings with evidence, redacts output in hint-only mode to device/interface/area plus a ref, and notes 10-60 second latency. That is exactly the kind of behavior an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence and subsequent sentences carry distinct payloads (behaviors, output shape, mode rules, latency). It is dense but each clause informs invocation; only minor trimming would be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still specifies the return structure (code, device, interface, evidence, concept) and the redaction variant. Combined with the latency warning and the tutor_hint handoff, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by confirming the ping is a real confirmation step and by framing the diagnostic as source-to-destination path traversal, which clarifies how source and destination are used together. It stops short of covering destination format variations beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and problem statement — "Explain why one device can or cannot reach another" — that no sibling (get_topology, get_device_state, run_command) covers. It also enumerates the data it inspects and the form of the answer, so an agent can distinguish it from raw-state tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit mode-based guidance: in tutor mode use findings to ask guiding questions rather than pasting the fix, and pass a finding to tutor_hint for a graded hint. It does not explicitly state when to prefer get_device_state or get_topology over this diagnostic, so it falls short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_stateGet device stateARead-only
Detailed state of one device: every port (IP, mask, MAC, admin and line status, neighbour), plus the key show output for its kind. Routers get 'show ip interface brief' and 'show ip route'. Switches add 'show vlan brief' and 'show interfaces trunk'. End devices get 'ipconfig /all'. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Device name exactly as shown on the canvas, e.g. 'Router0' or 'PC1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by disclosing that output varies by device kind (routers vs switches vs end devices get different show commands), which is critical behavioral context an agent cannot get from annotations or schema. The closing 'Read-only' restates the annotation, but the device-type variability disclosure is genuine added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its contents, then the device-kind breakdown in short parallel clauses. Dense and largely waste-free, though the trailing 'Read-only.' is redundant against the annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully previews what the result contains (port table fields and the per-kind show outputs), which is exactly what an agent needs to decide whether to call it or run_command. Pagination/volume behavior is unaddressed but largely irrelevant for a single-device snapshot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `device` parameter is fully documented in the schema with an example format. The description only reinforces the 'one device' scope rather than adding syntax or lookup details, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Detailed state of one device') and enumerates the exact contents: per-port IP/mask/MAC/status/neighbour plus device-kind-specific show output. An agent can distinguish this from get_topology (whole network) or run_command (arbitrary CLI) without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of built-in 'show' output hints this is the shortcut for routine state checks rather than run_command, and 'one device' implies it's per-device versus get_topology. No explicit when-to-use, when-not-to-use, or named alternative is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topologyGet network topologyARead-only
List every network device on the Packet Tracer canvas (name, type, model, power) with its cabled or addressed ports, and every link with its up/down state. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| includeNonNetwork | No | Also include canvas furniture such as power distribution devices and patch panels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the safety profile, so the trailing 'Read-only.' earns no credit and is mild duplication. What the description does add is the returned inventory shape (devices with ports, links with up/down state), which matters because no output schema exists; it says nothing about size limits, latency, or whether the canvas must be saved/loaded first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence covering scope and payload, with zero filler. The only wasted words are the redundant 'Read-only.' sentence fragment that restates the annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with no output schema, describing the returned devices, ports, and link states is the essential missing piece and it is present. Gaps are minor: the includeNonNetwork toggle and any caveats about canvas state are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one optional parameter (includeNonNetwork) and schema description coverage is 100%, so the schema already carries its meaning. The description never mentions the parameter or the default exclusion of non-network furniture, so it adds nothing here beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every network device on the Packet Tracer canvas') and enumerates the returned fields (name, type, model, power, ports, link up/down state). It implicitly separates itself from get_device_state by scoping to 'every' device and all links, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the whole-canvas scope suggests this is the right call for a full inventory rather than single-device inspection. There is no explicit 'use this when / use X instead' guidance against pt_status, get_device_state, or diagnose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pt_statusPacket Tracer statusARead-only
Check that Packet Tracer is connected and report its version, the open file, and whether that file is a graded activity (.pka). Call this first. tutorMode is "hint-only" during a graded activity or when an instructor has set it for every lab (hintOnlyReason says which): diagnose hides what is wrong, hints stop at level 2, and the configuration can't be read. Guide them with questions; never give the configuration that solves the activity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the tutorMode state machine: hint-only mode during graded activities, that diagnose hides faults, that hints cap at level 2, and that configuration cannot be read. It also carries an explicit safety instruction not to reveal the solution configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core function is front-loaded in the first two sentences, with the tutorMode caveat following. It is dense but every clause carries operational information; the tutorMode sentence is long and packs three distinct restrictions into one run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description covers what is returned (version, file, graded status), the sequencing expectation, and the behavioral constraints the agent must respect. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero input parameters there is nothing to disambiguate, so the baseline is 4. The description instead spends its space on the semantics of the returned state, which is the right trade-off here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource — check the Packet Tracer connection — and names the returned fields (version, open file, .pka status). It does not explicitly differentiate itself from siblings like get_device_state or get_topology, though 'Call this first' implies a sequencing role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this first' is an explicit directive about when to invoke it, and the tutorMode paragraph clarifies the behavioral context the agent operates under. There is no explicit when-not-to-use or named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_commandRun a read-only commandARead-only
Run one read-only command on a device's terminal and return its output. IOS devices (routers, switches) accept 'show ...', 'ping' and 'traceroute'. End devices (PCs, servers) accept 'ipconfig', 'ping', 'tracert', 'arp -a', 'nslookup' and 'netstat'. Configuration commands are refused: the student makes the changes, the tutor only looks. In hint-only mode, 'show running-config' and 'show startup-config' are refused too.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Device name exactly as shown on the canvas. | |
| command | Yes | A single command, e.g. 'show ip route' or 'ping 192.168.1.1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description earns credit beyond that: it enumerates which command families are allowed per device class, discloses that configuration commands are refused, and adds the non-obvious mode-dependent restriction that 'show running-config'/'show startup-config' fail in hint-only mode. That is exactly the kind of behavioral context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action, then platform allowlists, then refusal semantics. Every sentence carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the two parameters, both platform families, refusal boundaries, and a mode-specific caveat, which is strong for a tool with no output schema. What is missing is any sense of the response shape (raw text vs structured, error format on refusal), though 'return its output' gives the agent a rough expectation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds real meaning by telling the agent what kind of string 'command' must be for each device type, which the schema only illustrates with two generic examples. It does not address the 'device' parameter beyond the schema's exact-name requirement, but that is already well documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('run one read-only command on a device's terminal and return its output') and immediately constrains scope by device type. Among siblings (get_device_state, diagnose, tutor_hint) this is clearly the only command-execution tool, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete acceptance criteria per platform (IOS vs end devices) and states explicitly what is refused, including the hint-only mode exception. It never routes the agent to a sibling tool (e.g., 'use diagnose to interpret output' or 'use get_device_state instead of show commands'), so the when-not-to-call-this-tool case is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tutor_hintGet a tutor hintARead-only
Get a hint for a finding from diagnose, at one of three levels. Pass either the finding's code, or its ref when diagnose returned redacted findings. Level 1 is a nudge towards the problem area without naming the device. Level 2 names the device and a read-only command to look at. Level 3 explains the concept. No level gives the fix. Start at level 1 and only go up after the student has tried and is still stuck. Put the hint in your own words, as a question where you can. In hint-only mode the highest level is 2.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | The finding's ref from a redacted diagnose result, e.g. 'h_1a2b3c4d'. | |
| code | No | Finding code from diagnose, e.g. 'WRONG_GATEWAY'. | |
| level | Yes | 1 = nudge, 2 = where to look, 3 = explain the concept. | |
| device | No | The finding's device, from diagnose. | |
| interface | No | The finding's interface, from diagnose. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, and the description adds substantial behavioral context beyond that: each level's disclosure scope, the guarantee that no level gives the fix, the maximum level in hint-only mode, and guidance to phrase the hint as a question. These details materially shape how an agent should use the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well structured, opening with the core action and then adding level meanings, input selection, escalation guidance, and mode behavior. Every sentence contributes to correct selection or invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter read-only hint tool with no output schema, the description covers the essential decision points: which identifier to pass, what each level reveals, escalation discipline, and hint-only mode limits. An agent has enough information to call and use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for the level parameter and for choosing code versus ref. It does not elaborate on device or interface beyond what the schema already says, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: retrieving a hint for a finding from diagnose, with three defined levels. It clearly distinguishes this from sibling tools like diagnose and run_command by framing it as pedagogical hint retrieval rather than diagnosis or command execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use code versus ref, especially for redacted findings, and describes the escalation policy: start at level 1 and only go up after the student has tried and remains stuck. It also states the hint-only mode ceiling of level 2, which is a concrete usage constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.1- First observed
diagnose - First observed
get_device_state - First observed
get_topology - First observed
pt_status - First observed
run_command - First observed
tutor_hint
TDQS
Scored across 6 tools
Most tools have clearly distinct purposes: status, topology, per-device state, command execution, diagnosis, and hints. The main overlap is between get_device_state and run_command, since both can return show output, but their descriptions clarify aggregate state versus a single read-only command.
The names are all readable snake_case, but the conventions are mixed: get_topology/get_device_state/run_command use verb_noun, while pt_status, diagnose, and tutor_hint do not. This is not chaotic, but it is not a predictable verb_noun pattern throughout.
Six tools is well-scoped for a read-only Packet Tracer tutoring workflow. Each tool has a distinct role in the inspection, diagnosis, and hinting flow.
The toolset covers connection status, topology, device state, command inspection, diagnosis, and leveled hints, which is a coherent read-only lifecycle. Minor gaps might include retrieving activity instructions or broader lab context, but the core tutoring and diagnostic surface is present.
Maintenance
Related MCP Connectors
Network, domain and website diagnostics for AI clients via MCP.
Collision-first MCP diagnostics for MCP, API, webhook and agent failures. Returns structured evidence, bounded repair guidance, agent compatibility checks and safe recovery routing.
Remote MCP server for deterministic educational practice-assessment score conversions.
MCP diagnostics that help AI agents find safe next steps for HTTP, API, and MCP failures.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to investigate and manipulate live network simulations via MCP, including protocol debugging and fault injection.-
- FlicenseNot gradedqualityBmaintenanceEnables network troubleshooting through an MCP Streamable HTTP endpoint, exposing diagnostic tools for Cisco Packet Tracer labs with human-in-the-loop review and NIST/CIS security validation.-
- AlicenseAqualityCmaintenanceEnables headless creation, parsing, and grading of Cisco Packet Tracer .pkt/.pka lab files, including CCNA activity scoring, through MCP tools without requiring Packet Tracer to run.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables external control of Cisco Packet Tracer 9.0 through MCP, allowing users to create network topologies, configure routers, and launch simulations from MCP clients.9 npm1MIT