Skip to main content
Glama

Network Lab MCP

An AI Network Engineer Workspace for real network labs.

Describe the network. Let AI investigate, build, troubleshoot, and verify it — while you remain in control.

Network Lab MCP connects an MCP-capable AI client to real network lab devices through a small, controlled tool interface. It supplies the AI with explicit engineering context and observable terminal sessions, so the AI can follow evidence, run commands, and work through complex lab investigations instead of relying on a rigid test script.

The AI client does the reasoning; Network Lab MCP provides the context and access; the engineer retains authority over decisions and committed definitions.

Watch the demo · Why it exists · How it works · Configuration model · Quick Start · Documentation

Why Network Lab MCP?

As a network engineer, I often want to investigate or validate something in a lab, but customer work, troubleshooting, meetings, and documentation limit the time available for hands-on verification.

What if AI could do the time-consuming investigation — inspect the topology, connect to the right devices, compare outputs, follow a problem, and return evidence — without taking away the engineer's visibility or judgment?

That is the motivation behind Network Lab MCP: delegate the investigation, not the engineering responsibility.

The project explores a concept I call Vibe Networking, inspired by Vibe Coding: express the network objective in natural language, let an AI agent plan and execute work in a real lab, inspect what actually happened, and iterate. It is a direction for AI-assisted engineering, not a claim of unrestricted or fully autonomous production-network operation.

Related MCP server: hpe-cx-mcp

What you can do

  • Investigate and troubleshoot: inspect live device state across a lab, correlate observations, and collect command evidence.

  • Discover and validate topology: collect LLDP/CDP neighbors, review a topology candidate, and explicitly commit the definition.

  • Build and verify lab services: give the AI engineering objectives and let it use real terminals to configure and test lab devices, subject to the AI client's permissions and human oversight.

  • Validate resilience and traffic: observe planned failures, traffic behavior, protocol convergence, and service continuity using available lab instruments and evidence.

  • Reuse engineering knowledge: guide repeated work with Scenarios and References rather than repeating every instruction from scratch.

  • Watch AI activity: monitor terminal output live and inspect session transcripts instead of treating the AI as a black box.

Network Lab MCP is not a network-engineering reasoning model, a fixed test-script library, or a production network automation platform. An external AI client supplies the reasoning and decides which tool or command to use next.

How it works

  1. Human intent: an engineer specifies the goal and the limits of the task.

  2. Engineering context: Network Lab MCP exposes the selected topology, task instructions, principles, and applicable references — without revealing private access credentials.

  3. AI reasoning: the AI client chooses the investigation steps and invokes MCP tools.

  4. Controlled execution: Network Lab MCP connects to devices through managed SSH/Telnet terminal sessions, using private connection information internally.

  5. Evidence and review: the AI analyzes device outputs and reports findings; the engineer can observe terminals and approves changes to managed definitions through the human CLI.

Safety boundary: the candidate/commit model protects Network Lab MCP's managed lab definitions and selections. It does not automatically make device CLI commands read-only or require human approval before every command sent by an AI client. Configure client permissions and use an isolated lab accordingly.

A deliberately small MCP interface

Network Lab MCP exposes exactly seven MCP tools:

Tool

Purpose

get_active_topology

Read the currently selected logical topology

get_execution_instructions

Read selected task guidance and engineering context

terminal_open

Open a managed terminal by logical device ID

terminal_send

Send text to a managed device terminal

terminal_read

Read its output

terminal_list

Inspect managed terminal sessions

terminal_close

Close a managed terminal session

The AI uses logical device names; it does not obtain private access-info. See the MCP tool contract.

Configuration Model

Network Lab MCP separates what is selected, how to connect, what exists, what to accomplish, and what knowledge to reuse.

Conceptual diagram: the running configuration selects definitions; it does not contain every definition's full content. The illustration's masked password is not a representation of local CLI password display behavior.

Component

Responsibility

AI visibility

running-config

Selects the active access-info, topology, scenario, and references

Indirect

access-info

Private management endpoints and authentication details

Not exposed through MCP

topology

Logical devices, interfaces, and connectivity

Yes

scenario

Objectives, task procedures, and verification criteria

Yes

reference

Reusable technical knowledge and operational guidance

Yes, when selected or inspected read-only

running-config is a selection model, not the storage location for all definitions. Creating or changing a topology, Scenario, or Reference does not automatically select it. Selection changes become active after an explicit CLI commit.

Scenario describes what the AI is trying to accomplish now. Reference contains knowledge that can help across many tasks, such as SR-MPLS or EVPN guidance, platform-specific notes, or test-equipment procedures. Principles are separate, always-applied rules, not a substitute for task-specific scenarios or reusable references.

The AI may inspect a catalog of stored Scenarios and References, use the applicable knowledge, and propose new or refined definitions. It does not directly commit those definition changes. Engineers edit and commit them through the independent human CLI.

Three complementary configuration workflows

  • CLI configuration: use the IOS XR-style human CLI to manage access information, definitions, and active selections with candidate/commit behavior. clear discards uncommitted changes.

  • Topology discovery: discover LLDP/CDP neighbor relationships from actual devices and review the resulting candidate before a separate definition commit and active selection.

  • YAML-based engineering context: edit Topology, Scenario, and Reference definitions through the configured external editor ($VISUAL, then $EDITOR, then Vim). Access-info uses the structured CLI.

New installations start with the fictional sample_lab access-info and topology, the onboarding getting_started Scenario, and the supporting cisco_platform_guidance Reference. Existing local selections are not automatically rewritten.

See Architecture, CLI reference, and Scenario / Reference format.

Demo

Traffic Loss Validation with Network Lab MCP

The video demonstration illustrates an AI-assisted workflow involving live terminal observation, a validation Scenario, traffic measurement, analysis, and reporting.

The demo is a concrete lab example, not a guarantee that every device, test instrument, or network design can be controlled without additional configuration.

Quick Start

Requirements

  • Linux, Python 3.10+, tmux, and an OpenSSH client

  • A telnet client only if lab devices require Telnet

  • An MCP-capable AI client, such as Claude Code or Codex CLI

macOS may work but is not formally validated. Native Windows is not supported; WSL2 is not formally validated.

1. Install from a local checkout

git clone https://github.com/CiscoDevNet/network-lab-mcp-community.git
cd network-lab-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

This project currently uses a local editable installation; the repository-local lab/ directory is part of its operational model. Non-editable wheel or package-index installation is not supported.

2. Initialize local selections

cp lab/settings.example.yaml lab/settings.yaml

The checked-in sample is fictional and uses documentation-only addresses. To connect to a real lab, create private connection definitions and select the appropriate definitions through the CLI. Never commit real credentials or sensitive lab details to a public repository.

3. Register the MCP server

Use the absolute path to the executable inside this repository's virtual environment, replacing /path/to/network-lab-mcp below.

Claude Code — user scope:

claude mcp add network-lab -s user -- \
  /path/to/network-lab-mcp/.venv/bin/network-lab-mcp
claude mcp list

Codex CLI:

codex mcp add network-lab -- \
  /path/to/network-lab-mcp/.venv/bin/network-lab-mcp
codex mcp list

For a local stdio server, Codex may show Auth: Unsupported; device authentication is handled privately by Network Lab MCP, not by MCP authentication. In the tested Codex environment, the following server setting was also needed in ~/.codex/config.toml:

[mcp_servers.network-lab]
command = "/path/to/network-lab-mcp/.venv/bin/network-lab-mcp"
default_tools_approval_mode = "approve"

Restart Codex after changing its configuration. AI-client configuration and approval options may differ by client version.

4. Start the human CLI

./run_cli.sh

Useful first commands:

help
help claude
show version
show running-config
configure

5. Start your AI client

The task workspace can be outside the Network Lab MCP repository:

cd ~/work/my-lab-task
claude
# or: codex

Start with a bounded task, such as reviewing the active topology and reporting what can be verified without changing device configuration.

Permissions: keep the AI client's normal approval controls enabled, particularly for device configuration and destructive operations. Bypass/never-ask modes are appropriate only when explicitly chosen for a fully controlled, isolated lab; they bypass client-side confirmation and are not prerequisites for using Network Lab MCP.

Example: discovering and selecting a topology

First, create a private access-info definition and select it as active through the human CLI. For example, you can start by copying the fictional template and changing it locally:

cp lab/access-info/sample_lab.yaml lab/access-info/my_lab.yaml

With my_lab already selected as the active access-info, a typical CLI flow is:

network-lab# configure
network-lab(config)# discover topology
Discovering topology from access-info 'my_lab'...
...
Discovery complete.
...
network-lab(config-topology-my_lab)# show configuration
...
network-lab(config-topology-my_lab)# commit
Commit complete.
network-lab(config-topology-my_lab)# root
network-lab(config)# running-config
network-lab(config-running)# topology my_lab
network-lab(config-running)# commit
Commit complete.

The two commits serve different purposes: the first saves the discovered topology definition; the second selects it as active.

Discovery is intentionally conservative:

  • discover topology collects LLDP/CDP evidence only; discover topology l3 adds observed IPv4/VRF information.

  • It rebuilds the topology candidate from the current observations instead of silently merging older links. Unobserved elements can therefore disappear from the new candidate. The committed definition remains untouched until commit.

  • Missing or conflicting evidence, failures, and uncommitted manual edits cause Discovery to fail closed rather than guessing or overwriting edits.

  • Discovery does not configure devices, enable LLDP/CDP, auto-commit, or auto-select a topology.

  • clear discards uncommitted candidate changes and restores the committed state.

See CLI reference for detailed discovery conditions and command syntax.

After the context is selected, a typical AI sequence uses:

get_active_topology()
get_execution_instructions()
terminal_open(...)
terminal_send(...)
terminal_read(...)
...

Observable terminals

Engineers can observe the same managed terminal activity used by the AI, read-only, from the human CLI:

network-lab# terminal monitor R1
RP/0/RP0/CPU0:R1#show version
...
RP/0/RP0/CPU0:R1#

Monitoring does not inject commands into the observed session. It can follow managed and Discovery terminal sessions, including their lifecycle changes. Exit locally with q.

Terminal transcripts are stored at logs/terminal/<device-id>/*.log. They are raw transcripts, not guaranteed-redacted records; handle them as sensitive data. See Terminal monitor.

Platform-aware engineering knowledge

The architecture is vendor-neutral, but the public examples and initial platform guidance focus on Cisco devices. The included cisco_platform_guidance Reference illustrates how reusable knowledge can be qualified by device family, software release, feature, and question type. It is selected by the sample configuration, not mandatory for all installations, and it does not fetch or validate documentation automatically.

Protocol theory may transfer across platforms, but command syntax, supported features, limitations, telemetry paths, and release-specific behavior require device-appropriate evidence. For example, telemetry paths should come from applicable YANG models, not guesses; the Cisco YANG models repository is one possible reference source.

Supported device types

device.type

Platform

Topology Discovery

iosxr

Cisco IOS XR

LLDP + CDP

iosxe

Cisco IOS XE

LLDP + CDP

ios

Classic Cisco IOS

CDP

nxos

Cisco NX-OS

Not currently supported

host

Generic host / endpoint

Skipped

A registered type does not imply that every platform capability, command, or discovery protocol is supported.

Security and operational boundaries

See SECURITY.md for the complete trust model and vulnerability reporting guidance.

  • Private credentials: no MCP tool exposes access-info. Terminal connections resolve credentials internally from the selected private definition.

  • Local CLI visibility: show configuration and show running-config can display access-info passwords in plaintext for human lab use. Do not share that output.

  • Raw device output: terminal results and logs are not universal secret-redaction mechanisms. Remote device echoes and output can contain sensitive information.

  • SSH/Telnet: SSH key/agent and password authentication are supported; classic IOS-style Telnet authentication is lab-only because Telnet is unencrypted.

  • Jump hosts: one OpenSSH ProxyJump hop is supported; multi-hop chains are not.

  • Change control: candidate/commit applies to local definition editing. Sending a configuration command to a real device through a terminal is a separate operation governed by the AI client's permissions and your lab procedures.

  • Repository hygiene: .gitignore excludes common local operational data but is not a substitute for reviewing every change before publishing.

Current limitations

  • Discovery supports IOS XR, IOS XE, and classic IOS, but not NX-OS.

  • No SNMP, NETCONF, RESTCONF, or generic discovery-plugin framework.

  • No automatic stale-link pruning outside a Discovery run; Discovery itself rebuilds the candidate from current observations.

  • L3 enrichment records directly observed IPv4 address and VRF information, not an inferred routed topology.

  • Editable checkout required; no standard non-editable/wheel installation.

  • access-info is edited through structured CLI commands, not the external YAML editor.

  • OpenSSH ProxyJump is limited to a single hop.

  • Scenario/Reference schemas are intentionally flexible; some identifier classes do not yet protect against case-only collisions.

  • Full cross-vendor operation and all forms of autonomous deployment are not claimed or validated.

Project structure

network-lab-mcp/
├── README.md
├── SECURITY.md
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
├── AGENTS.md
├── LICENSE
├── pyproject.toml
├── run_cli.sh
├── src/network_lab_mcp/     # MCP server, terminal, discovery, human CLI
├── lab/                     # Local selections, principles, definitions
│   ├── settings.example.yaml
│   ├── principles.yaml
│   ├── access-info/
│   ├── topologies/
│   ├── scenarios/
│   └── references/
├── docs/
│   ├── images/
│   │   ├── network-lab-mcp-concept.webp
│   │   ├── vibe-coding-vs-vibe-networking.webp
│   │   └── network-lab-mcp-configuration-model.webp
│   ├── architecture.md
│   ├── mcp_tools.md
│   ├── cli_reference.md
│   └── scenario_format.md
└── tests/

Testing

Real-lab tests are opt-in and should be used only against approved lab infrastructure:

NETWORK_LAB_REAL_TESTS=1 pytest tests/test_real_lab_iosxr.py -v --tb=line

Avoid --showlocals when tests could access real credentials.

Documentation

Contributing, feedback, and license

Issues, bug reports, and suggestions are welcome through GitHub Issues. See CONTRIBUTING.md for how to contribute and CODE_OF_CONDUCT.md for community standards. Report security issues as described in SECURITY.md, not through public issues. Guidance for AI coding agents working on this repository is in AGENTS.md.

Run show version in the human CLI to inspect the local version, release date, Git revision, platform, MCP SDK version, and license information.

Licensed under the Apache License, Version 2.0 (SPDX: Apache-2.0). See LICENSE.

License history: earlier revisions of this repository's history were published under the GNU General Public License v3.0. Those revisions are not relicensed retroactively by this change; the Apache License, Version 2.0 applies to the project going forward.

Available Tools

7 tools
get_active_topologyA

Return the currently active lab topology: where the work is performed and which devices and links exist. Settings and the topology YAML are reloaded from disk on every call, so editing lab/settings.yaml takes effect immediately without restarting this server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context by noting that settings and YAML are reloaded from disk on every call, so edits take effect immediately. This reveals the tool's fresh-read behavior and implies it is non-mutating, though it does not explicitly state side-effect safety.

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 two sentences with no filler. The main purpose is front-loaded in the first sentence, and the second sentence adds a single, relevant behavioral note about reloading. Every word earns its place.

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 simple retrieval tool with no parameters and no output schema, the description covers the key points: what it returns and a notable behavioral characteristic. It does not specify the exact return format (e.g., JSON structure), but the mention of 'topology YAML' gives a hint. Overall, it is sufficiently complete for an agent to invoke 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?

The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics since none exist, and it correctly omits any param-related details.

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 clearly states the specific verb 'Return' and the resource 'currently active lab topology', and explains what it contains (where work is performed, devices, links). It distinguishes itself from sibling tools like terminal operations by being the only topology-fetching tool, so an agent can easily identify its purpose.

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?

The description implies when to use it (when you need the active topology) but does not explicitly contrast with alternatives or state exclusions. Siblings are unrelated to topology, so the lack of explicit routing is less critical, but the guidance remains implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_execution_instructionsA

Return the operating principles, the active scenario, and the active reference knowledge for the current task: how to behave, what to accomplish, and what reusable knowledge is available. Also returns metadata-only catalogs (name + description) of every stored scenario and reference, so existing knowledge can be discovered and reused. Optional inspect_scenarios / inspect_references (lists of stored definition names from those catalogs) additionally return the full content of those definitions, read-only: inspecting never activates or changes anything, and unknown names fail the call. Definition changes are not made through MCP; propose them and a human reviews and commits them in the CLI. Reloaded from disk on every call.

ParametersJSON Schema
NameRequiredDescriptionDefault
inspect_scenariosNo
inspect_referencesNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it declares read-only behavior ('inspecting never activates or changes anything'), the failure mode for unknown names, disk-reload freshness on every call, and that catalogs are metadata-only. These are exactly the behavioral traits an agent needs before calling.

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 primary return is front-loaded and every sentence carries information, but the opening sentence is dense and the parenthetical gloss ('how to behave, what to accomplish...') adds length without new information. Slightly tighter phrasing would earn a 5.

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?

There is no output schema and no annotations, so the description must cover the return contract — and it does, distinguishing the default catalogs from the full-content inspection mode, noting read-only semantics and failure behavior. Nothing essential for a correct call 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?

Schema description coverage is 0%, so the description must supply parameter meaning, and it does: both inspect params are lists of stored definition names drawn from the returned catalogs, and bad names fail the call. It stops short of specifying name formatting or duplicate handling, keeping it at a 4.

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 names a concrete verb and resource — returning operating principles, the active scenario, active reference knowledge, and metadata catalogs — and its scope is clearly distinct from the terminal/topology siblings. An agent can tell exactly what comes back 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?

It explains the optional inspect parameters' effect and explicitly routes definition changes away from MCP ('propose them and a human reviews and commits them in the CLI'), which acts as a when-not signal. It does not name alternatives for retrieving active state, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_closeA

Close a device's managed production terminal session. Only ever targets the production session namespace; cannot affect validation sessions. Deliberately does not require the device to still be present in the active topology, so a stale session left over from before the active topology changed can always be closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It reveals non-obvious behavior: it only targets the production session namespaceĺ and deliberately works even when the device is absent from the active topology. It does not mention result/error behavior, but the key operational limits are disclosed.

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?

Three sentences with no filler: the action is stated first, followed by a critical exclusion and a useful stale-session edge case. Slightly wordy in the third sentence, but every sentence contributes meaningful information.

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 one-parameter tool with no output schema incl, the description covers target, scope, and an important edge case. It does not explain success/error responses or whether an open session must exist, but an agent can generally invoke the tool correctly with the provided information.

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?

The only parameter, device, is minimally described by the schema. The description clarifies that the device owns the session being closed, but it does not specify the identifier format or where to source it. With 0% schema coverage, this is only partial compensation, though reasonable for a single string parameter.

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 opens with a specific verb and resource: 'Close a device's managed production terminal session.' It also immediately distinguishes itself from related terminal tools by scoping to the production session namespace and explicitly stating it cannot affect validation sessions.

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?

The description gives clear context for when to use the tool: closing production terminal sessions, including stale sessions from before a topology change. It also states what it cannot do (affect validation sessions), which helps an agent avoid misusing it, though it does not explicitly name a sibling alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_listA

List every currently managed production terminal session, regardless of whether each device is still present in the active topology -- including a stale session left over from before the active topology changed, so it remains visible and closeable via terminal_close() even though terminal_send()/terminal_read() will refuse to use it. Local validation sessions are never included, regardless of whether a device happens to be named similarly to a validation identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses important edge-case behavior: stale sessions remain visible and closeable, terminal_send()/terminal_read() will refuse them, and validation sessions are always excluded. This is substantial behavior disclosure, though it does not mention output format or error behavior.

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 description is front-loaded with the core action and then expands on meaningful edge cases. It is somewhat dense and long-winded, but each clause adds essential selection and invocation context, so the length is justified.

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-parameter listing tool with no output schema, the description is nearly complete: it defines what is included, what is excluded, and how results relate to sibling operations. It could be more complete by stating the return shape, but the core semantics are fully covered.

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?

The tool has zero parameters and an empty input schema, so there is no parameter semantics to clarify. The description correctly focuses on behavior rather than parameters, and the baseline of 4 applies because no argument documentation is needed.

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 opens with a specific verb and resource: 'List every currently managed production terminal session.' It clearly differentiates itself from get_active_topology by noting it includes sessions regardless of active topology, and from terminal_send/read/close by specifying stale sessions are closeable but not usable for I/O.

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?

The description gives strong contextual cues: use it to see stale sessions and close them via terminal_close(), and it confirms local validation sessions are excluded. However, it never explicitly states when to choose this over get_active_topology or when not to use it, so the guidance remains implied rather than direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_openA

Open (or reuse) a terminal session for a device in the active topology, launching ssh or telnet inside a dedicated tmux environment. The active topology is reloaded from disk before opening the session. An interactive login prompt from the device itself is answered automatically using the active access-info definition's own private credentials, once it can be safely confirmed to belong to the target device (never a jump host) -- credentials are never returned by this tool or any other. This works for SSH (the client's own password prompt) and for Telnet (a classic-IOS-style Username:/Password: sequence); which one applies depends on the device's own configured transport. A host-key confirmation prompt, or any other situation this cannot safely resolve on its own, is still left for terminal_read()/terminal_send() to handle interactively.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosing behavior. It reveals that credentials are never returned, that topology is reloaded, that login prompts are auto-answered with private credentials, that it avoids jump hosts, and that it handles both SSH and Telnet. This is exceptionally transparent, leaving no critical ambiguity about what the tool does.

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 description is lengthy but each sentence adds essential detail about security, transport handling, and fallback behavior. The core purpose is front-loaded, and the complexity justifies the length. It avoids redundancy, though it could be slightly tightened without losing substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the opening behavior, authentication, and fallback handling, but does not mention what the tool returns (e.g., a session identifier or status) and does not explain error conditions or what happens if the device is not found. With no output schema, this information is missing, leaving the agent uncertain about the tool's result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'device' has no schema description (0% coverage), and the description only says 'for a device in the active topology' without specifying how the device is identified (e.g., by name, ID, or IP). It does not add format or value guidance beyond what the schema already provides. Given the low schema coverage, the description should compensate but does not sufficiently clarify the parameter's semantics.

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 clearly states the tool's purpose: open or reuse a terminal session for a device in the active topology, launching ssh or telnet in tmux. It distinguishes itself from sibling tools like terminal_send and terminal_read by focusing on session opening rather than interactive I/O. The verb and resource are specific and unambiguous.

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?

The description gives clear context on when to use this tool (to establish a session) and explicitly routes interactive prompts that the tool cannot safely resolve (host-key confirmations) to terminal_read()/terminal_send(). However, it does not explicitly state when not to use this tool, such as for simply sending a command without opening a session, though this is implied by sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_readA

Capture recent terminal output for a device, so the caller can inspect the current prompt, command output, a password/interactive prompt, paging state, or unexpected errors. lines limits how much recent scrollback is returned (default 100); the underlying tmux session retains a much larger history buffer. The device must still be present in the active topology, reloaded from disk on every call -- an already-open session does not stay readable if the active topology changes to no longer include this device.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
deviceYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly states that the device must be present in the active topology, that sessions are reloaded from disk on every call, and that an open session becomes unreadable if the topology changes. This is significant behavioral context that helps the agent avoid stale-state mistakes. However, it does not mention what happens if the device is not present (error type), nor whether this operation has side effects (it appears read-only, but not explicitly stated). Thus a 4, not 5.

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 description is concise but packs significant information. It opens with a clear purpose statement, then details the 'lines' parameter, and ends with a critical caveat about topology. The sentences are purposeful and front-load the most important info. The caveat is placed at the end, which is acceptable. No filler. A 4 because it is slightly long and could be more concise, but each sentence earns its place.

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?

Given the tool's complexity (a read operation on a terminal session with a topology dependency), the description covers the key usage and behavioral aspects. It doesn't have an output schema, so it doesn't explain the return format, but that might be inferable. The description is complete enough for an agent to call it correctly: it knows the tool reads output, the 'lines' limit, and the topology dependency. The only missing piece is what happens when the device is absent, which could be inferred as an error. Thus a 4.

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?

The schema has 0% description coverage (no parameter descriptions in the schema), so the description must compensate. It explains the 'lines' parameter: 'limits how much recent scrollback is returned (default 100)'. It does not explain 'device' beyond the tool's purpose, but the purpose makes it clear that 'device' identifies which device's output to capture. This adds some meaning beyond the schema's raw type and default, but not exhaustive – e.g., no information about acceptable formats for device IDs. Thus a 3.

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 clearly states the tool's purpose: capturing recent terminal output for a device, and explicitly enumerates the kinds of output it can capture (prompt, command output, interactive prompts, paging, errors). This distinguishes it from sibling tools like terminal_send (which sends input) and terminal_open (which opens a session). The verb 'Capture' is specific and the resource is 'terminal output'.

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?

The description provides explicit guidance on when to use the tool: to inspect terminal output for a device during interactive sessions or after commands. It also gives a crucial exclusion: the device must be in the active topology, and the session does not remain readable if topology changes. This helps the agent choose this tool over alternatives like terminal_list (which lists sessions) and terminal_open (which creates a session).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_sendA

Send input to a device's open terminal session. The device must still be present in the active topology, reloaded from disk on every call -- an already-open session does not stay usable if the active topology changes to no longer include this device.

Execution order is fixed and deterministic: if text is given it is sent literally first, then any keys (e.g. "C-c", "Tab", "Up") are sent in the supplied order, then Enter is sent last if enter is true. Nothing is deduplicated: passing keys=["Enter"] together with enter=true sends Enter twice. text is delivered to the pane without ever passing through a subprocess's own argv or appearing in an error message, and this MCP server does not separately log or echo it back in any tool result. It is not hidden from the device's own terminal transcript, though: this project intentionally records the raw pane output via tmux pipe-pane (see show logging), and if the remote endpoint echoes back what it received, that echo may naturally appear in that transcript like any other terminal output.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysNo
textNo
enterNo
deviceYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and excels at it. It discloses fixed execution order, no deduplication, that text bypasses argv and error messages, that the server does not log or echo input, and that tmux pipe-pane still records raw pane output. This is unusually transparent for a side-effecting 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 long but dense, with no filler. It front-loads the primary purpose and then adds necessary behavioral, ordering, and logging caveats. Every sentence earns its place.

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?

The description covers prerequisites, ordering, logging, and privacy nuances almost completely. The only notable gap is return-value semantics: there is no output schema, and the description references 'tool result' only in passing without explaining what the agent receives on success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates fully by explaining the semantics of device, text, keys, and enter, including ordering and the duplicate-Enter edge case. It adds meaning well beyond the bare parameter names in the input 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?

The description states a specific verb and resource ('Send input to a device's open terminal session') and clearly differentiates the tool from siblings such as terminal_read, terminal_list, and terminal_open by focusing on sending input. It also narrows the scope to open sessions within the active topology.

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?

It provides strong operational context: the device must still be present in the active topology and the session is reloaded from disk on every call. However, it does not explicitly name sibling alternatives or state when not to use this tool, so the guidance is clear but not fully explicit.

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. 7 tool updatesv0.2.0
    • First observedget_active_topology
    • First observedget_execution_instructions
    • First observedterminal_close
    • First observedterminal_list
    • First observedterminal_open
    • First observedterminal_read
    • First observedterminal_send

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation4/5

The five terminal_* tools have crisp, non-overlapping roles (open/send/read/list/close), and the list-vs-send/read distinction around stale sessions is explicitly documented. The main soft spot is the pair get_active_topology vs get_execution_instructions, which both 'return current context' and could be conflated at a glance, though the descriptions do draw a clear line between topology/settings and operating principles/scenarios.

Naming Consistency5/5

All names are snake_case verb_noun with predictable prefix grouping: get_* for context reads and terminal_* for the session lifecycle. No mixing of conventions or vague verbs.

Tool Count5/5

Seven tools is well-scoped for a lab-interaction server: two context readers plus a complete five-verb terminal session surface. Every tool earns its place with no filler.

Completeness4/5

The terminal lifecycle is fully covered (open, send, read, list, close), including stale-session visibility and cleanup, and topology/instruction reads cover the context side. Gaps are minor and intentional: definitions/scenarios are read-only by design and there are no terminal resize or validation-session management tools, but core agent workflows are not blocked.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP-capable AI agents to observe, troubleshoot, and configure Aruba CX (AOS-CX) switches through REST and SSH, with safety controls, inventory management, and verification workflows.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to understand lab topologies, follow operational principles, and interact with real network devices through observable terminals while keeping private access information hidden.
    7
    GPL 3.0
  • A
    license
    B
    quality
    A
    maintenance
    Enables AI agents to open persistent interactive terminal sessions with network devices over SSH, Telnet, TCP console, or serial, write raw commands including nested ssh/telnet transitions, and read full output without requiring a particular prompt format. It supports multiple concurrent sessions and keeps credentials/secrets out of MCP arguments or audit logs.
    7
    MIT