Skip to main content
Glama

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.

published tests npm Packet Tracer 9 Node 20+ MCP License: MIT


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 bridge

This saves pt-tutor-bridge.pts in the current folder.

2. Add it to Packet Tracer

  1. Open Extensions → Scripting → Configure PT Script Modules.

  2. Click Add and choose pt-tutor-bridge.pts.

  3. 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-mcp

For 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 server

Tools

Tool

Purpose

pt_status

Connection check, the open file, and the current tutor mode

get_topology

Devices, ports and links on the canvas

get_device_state

Interfaces, addresses, routes and VLANs of one device

run_command

One read-only command on a device

diagnose

Why a source can't reach a destination (10–60 s)

tutor_hint

The next hint for a finding

For instructors

Set PT_TUTOR_MODE in the server's env:

Value

Behaviour

auto (default)

Hint-only during graded activities, full hints otherwise

hint-only

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 off

See 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

MIT

Available Tools

6 tools
diagnoseDiagnose connectivityA
Read-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.

NameRequiredDescriptionDefault
pingNoAlso run a real ping from the source to confirm (default true).
sourceYesDevice the traffic starts from, e.g. 'PC1'.
destinationYesDestination device name or IPv4 address, e.g. 'PC3' or '192.168.20.10'.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 stateA
Read-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.

NameRequiredDescriptionDefault
deviceYesDevice name exactly as shown on the canvas, e.g. 'Router0' or 'PC1'.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 topologyA
Read-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.

NameRequiredDescriptionDefault
includeNonNetworkNoAlso include canvas furniture such as power distribution devices and patch panels.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 statusA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 commandA
Read-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.

NameRequiredDescriptionDefault
deviceYesDevice name exactly as shown on the canvas.
commandYesA single command, e.g. 'show ip route' or 'ping 192.168.1.1'.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 hintA
Read-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.

NameRequiredDescriptionDefault
refNoThe finding's ref from a redacted diagnose result, e.g. 'h_1a2b3c4d'.
codeNoFinding code from diagnose, e.g. 'WRONG_GATEWAY'.
levelYes1 = nudge, 2 = where to look, 3 = explain the concept.
deviceNoThe finding's device, from diagnose.
interfaceNoThe finding's interface, from diagnose.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 6 tool updatesv0.1.1
    • First observeddiagnose
    • First observedget_device_state
    • First observedget_topology
    • First observedpt_status
    • First observedrun_command
    • First observedtutor_hint

TDQS

A4/5.0

Scored across 6 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers