Skip to main content
Glama

EVE-NG MCP Server

PyPI CI Python License

An MCP (Model Context Protocol) server that gives Claude and other LLM agents programmatic access to EVE-NG network labs.

Create, configure, and manage virtual network topologies through natural language — no manual clicking required.

You: "Create a lab with two Arista switches running OSPF, connected to each other"

Claude: ✓ Created lab "OSPF Demo"
        ✓ Added vEOS-1 (Arista vEOS 4.28)
        ✓ Added vEOS-2 (Arista vEOS 4.28)
        ✓ Connected e0/0 ↔ e0/0
        ✓ Pushed OSPF configs
        ✓ Started all nodes — lab is running

Quick Start

1. Install

pip install eveng-mcp-server

2. Configure

Set your EVE-NG connection details:

export EVENG_HOST=http://your-eve-ng-server
export EVENG_USERNAME=admin
export EVENG_PASSWORD=eve

3. Add to Claude

Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "eveng": {
      "command": "eveng-mcp-server",
      "env": {
        "EVENG_HOST": "http://your-eve-ng-server",
        "EVENG_USERNAME": "admin",
        "EVENG_PASSWORD": "eve"
      }
    }
  }
}

Claude Code — add to .claude/settings.json:

{
  "mcpServers": {
    "eveng": {
      "command": "eveng-mcp-server",
      "env": {
        "EVENG_HOST": "http://your-eve-ng-server",
        "EVENG_USERNAME": "admin",
        "EVENG_PASSWORD": "eve"
      }
    }
  }
}

4. Use

Ask Claude to build you a network lab. That's it.

Related MCP server: Packet Tracer MCP

How It Works

┌─────────────┐     MCP Protocol      ┌──────────────────┐     REST API     ┌─────────────┐
│   Claude /   │◄──────────────────────►│  EVE-NG MCP      │◄───────────────►│   EVE-NG    │
│   LLM Agent  │   (stdio transport)   │  Server           │  (HTTP + cookies)│   Server    │
└─────────────┘                        └──────────────────┘                  └─────────────┘
                                              │
                                       14 MCP Tools:
                                       create_lab, add_node,
                                       connect_nodes, push_config,
                                       start_all, etc.

The MCP server translates natural language requests from Claude into EVE-NG REST API calls. It handles authentication (session cookies), lab lifecycle, node management, configuration push, and network connectivity.

Available Tools

Lab Management

Tool

Description

list_labs

List all labs on the server

get_lab

Get lab details — nodes, networks, links, status

create_lab

Create a new empty lab

delete_lab

Delete a lab and all its resources

Node Operations

Tool

Description

list_images

Browse all installed QEMU and Docker images

add_node

Add a node to a lab — specify image, name, RAM, CPU, interface count

start_node

Start a single node

stop_node

Stop a single node

start_all

Start all nodes in a lab

stop_all

Stop all nodes in a lab

get_node_status

Get a node's current status and configuration

Configuration

Tool

Description

push_config

Push startup configuration to a node (must be stopped)

get_node_config

Retrieve a node's current startup configuration

Networking

Tool

Description

connect_nodes

Connect two node interfaces — creates a shared network and wires both endpoints

Usage Examples

Build a Multi-Vendor Lab

"Create a lab called 'Data Center Fabric' with 2 VOSS spine switches and 4 EXOS leaf switches. Connect each leaf to both spines."

Claude will use list_images to find your installed Extreme images, create the lab, add 6 nodes, and wire the spine-leaf fabric.

Push Configs Before Boot

"Push OSPF configuration to all routers in the lab, then start everything."

Claude will call push_config on each node with vendor-appropriate configuration, then start_all to boot the lab.

Inspect Lab State

"Show me what's running in the BGP lab — which nodes are up, which are still booting?"

Claude calls get_lab to retrieve the full topology with per-node status.

Tear Down and Rebuild

"Destroy the current lab and build a new one with 3 Cisco IOSv routers in a triangle topology."

Claude calls delete_lab, then create_lab, add_node x3, and connect_nodes x3.

Common Use Cases

Certification Lab Prep (CCNA/CCNP/CCIE)

"Build me a lab for practicing OSPF multi-area with 5 routers — one ABR connecting area 0 and area 1, with stub and NSSA areas."

The MCP server handles the tedious setup: creating the lab, adding nodes, wiring interfaces, and pushing base configs so you can focus on the protocol practice.

Pre-Change Validation

"I need to test adding a new VLAN to our spine-leaf fabric before doing it in production. Build a lab that mirrors our 2-spine 4-leaf topology with VOSS switches."

Build a lab topology matching production, test your change, verify traffic flow — all through conversation with Claude.

Vendor Comparison / PoC

"Create two identical 3-router triangle topologies — one with Arista vEOS and one with Cisco IOSv. Push BGP configs to both so I can compare convergence behavior."

Side-by-side vendor comparison without manually building two separate labs.

Training and Demos

"Set up a classroom lab with 5 separate student topologies, each with 2 routers and 1 switch, all pre-configured with basic connectivity."

Quickly spin up multiple isolated lab instances for training sessions.

Network Automation Development

"Create a 4-router lab and start all nodes. I need to test my Ansible playbooks against real network devices."

Use the MCP server to provision labs for testing Ansible, Nornir, Terraform, or any network automation tooling.

Troubleshooting Practice

"Build a lab with intentional misconfigurations — wrong OSPF area IDs, mismatched BGP AS numbers, or broken VLAN trunks — and don't tell me what's wrong."

AI-generated fault injection for network troubleshooting practice.

Prerequisites

  • Python 3.10+

  • EVE-NG server (Community or Professional) with API access enabled

    • The server must be reachable from where the MCP server runs

    • Default EVE-NG API port is 80 (HTTP) or 443 (HTTPS)

    • Default credentials: admin / eve

  • MCP-compatible client — Claude Desktop, Claude Code, or any MCP client

EVE-NG Network Access

The MCP server connects to EVE-NG's REST API over HTTP. Your EVE-NG server must be reachable:

Setup

EVENG_HOST Value

Same machine

http://localhost

Local network

http://192.168.1.100

Via Tailscale

http://100.x.y.z:8080

Via SSH tunnel

http://localhost:8080 (after ssh -L 8080:192.168.122.10:80 jump-host)

Configuration Reference

Variable

Default

Description

EVENG_HOST

http://192.168.122.10

EVE-NG API base URL

EVENG_USERNAME

admin

API username

EVENG_PASSWORD

eve

API password

Troubleshooting

"Connection refused" or timeout

  • Verify EVE-NG is running and the API is accessible: curl http://your-server/api/status

  • Check firewall rules — EVE-NG API runs on port 80 by default

  • If using a jump host, set up an SSH tunnel first

"Authentication failed"

  • Default credentials are admin / eve

  • EVE-NG Community Edition limits to 2 admin accounts

  • Check if another session is active (EVE-NG allows one session per user)

"Image not found" when adding nodes

  • Run list_images to see what's installed

  • EVE-NG image folder names must follow exact naming conventions

  • QEMU images go in /opt/unetlab/addons/qemu/

Node starts but no console access

  • Nodes need 30-120 seconds to fully boot (vendor dependent)

  • Use get_node_status to check if the node is still building (status=1) or running (status=2)

Development

# Clone and install
git clone https://github.com/axiom-works-ai/eveng-mcp-server.git
cd eveng-mcp-server
pip install -e ".[dev]"

# Run tests (69 tests, mocked — no EVE-NG server needed)
pytest

# Run with verbose output
pytest -v

# Type check
mypy src/eveng_mcp_server/ --ignore-missing-imports

EVE-NG API Notes

  • Uses session cookies for authentication (not bearer tokens)

  • Lab paths are URL-encoded filesystem paths (e.g., /api/labs/My%20Lab.unl)

  • Node status codes: 0 = stopped, 1 = building/booting, 2 = running

  • Push startup configs while nodes are stopped — they apply at next boot

  • connect_nodes is a compound operation: creates a network, then attaches both interfaces

License

Apache-2.0

Author

Built by Axiom Works AI — AI-powered tools for network engineers.

Available Tools

14 tools
add_nodeB

Add a node (virtual device) to a lab. Specify the template (image name), name, RAM, CPU, and number of interfaces. Use 'list_images' first to see available templates.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
templateYes
nameNo
node_typeNoqemu
ramNo
cpuNo
ethernetNo
serialNo
imageNo
consoleNotelnet
leftNo
topNo
configNo0
delayNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits. It only says 'add a node' without mentioning side effects, authentication needs, or return value. Minimal behavioral context provided.

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?

Very concise, two sentences, front-loaded with the purpose, each sentence adds value. No wasted words.

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

Completeness2/5

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

Given 14 parameters and an output schema, the description is incomplete: it omits many parameter meanings, does not describe return value, and lacks behavioral details. Needs more 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?

Schema coverage is 0%, so description must compensate. It explains template, name, RAM, CPU, and 'number of interfaces' (ethernet), but does not clarify the other 9 parameters. Partial but inadequate.

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?

Clearly states it adds a node (virtual device) to a lab, which is a specific verb+resource. However, it does not explicitly differentiate from sibling tools like create_lab, though the action is distinct enough.

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?

Provides a useful prerequisite: use list_images first to see available templates. It also lists which parameters to specify. Lacks when-not-to-use or alternatives, but the context is clear.

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

connect_nodesB

Connect two nodes by creating a network and attaching their interfaces to it. Specify the node IDs and interface IDs to connect. Use 'get_lab' first to see available nodes and their interface IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
node1_idYes
node1_interfaceYes
node2_idYes
node2_interfaceYes
network_nameNo
network_typeNobridge

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It states it creates a network and attaches interfaces, but lacks details on side effects (e.g., if network already exists, if interfaces are already connected, idempotency, or response format). Output schema exists but description does not leverage it.

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?

Two sentences, both meaningful. The first defines the action, the second provides prerequisite. No wasted words, but could be slightly more structured with separation of action and prerequisite.

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

Completeness2/5

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

Given 7 parameters (5 required), no annotations, and a potentially complex operation (network creation and interface attachment), the description is too sparse. It does not explain the output schema, constraints (e.g., nodes must exist, interfaces must be free), or error conditions.

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?

Schema description coverage is 0% so description must compensate. It mentions 'node IDs and interface IDs' but does not explain the optional parameters network_name and network_type or their defaults. It does not clarify what happens when network_name is empty or the meaning of network_type values.

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?

Description clearly states the verb 'connect' and the resources (two nodes via interfaces and network). It distinguishes from sibling tools like add_node or get_lab which have different purposes.

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?

Explicitly advises to use 'get_lab' first to see available nodes and interfaces, providing clear prerequisite context. No explicit when-not-to-use or alternatives, but sufficient guidance for invocation.

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

create_labB

Create a new lab on the EVE-NG server. Specify a name, optional description, and folder path.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
descriptionNo
pathNo/
authorNo
versionNo1
bodyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Merely says 'create a new lab' without disclosing side effects, permissions, idempotency, or return value details.

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?

Single sentence, no wasted words. However, could be more informative while remaining concise.

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

Completeness2/5

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

Given 6 parameters, no schema descriptions, and no annotations, the description is too brief. It covers only half the parameters and omits important context like output schema implications.

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?

Schema description coverage is 0%, so description must compensate. It only mentions name, description, and path, ignoring author, version, and body. Provides partial clarity but incomplete.

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?

Clearly states verb 'Create' and resource 'a new lab on the EVE-NG server'. Distinguishes from sibling tools like delete_lab, add_node, etc., which perform different operations.

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?

Implied usage for creating a lab, but no explicit guidance on when to use versus alternatives or conditions to avoid. No mention of prerequisites or context.

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

delete_labC

Delete a lab from the EVE-NG server. This is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosing behavioral traits. It explicitly states irreversibility, which is a key behavioral trait beyond the input schema. However, it omits details about permissions, side effects on running processes, or error conditions.

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 extremely concise, consisting of two short sentences with no redundant information. It is front-loaded with the key action and immediately follows with the critical behavioral warning.

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

Completeness2/5

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

Given the simplicity of the tool (1 parameter) and the existence of an output schema, the description is still incomplete. It fails to explain the parameter's semantics, what happens when the lab doesn't exist, or how to confirm deletion. More context is needed for safe usage.

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

Parameters1/5

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

The input schema has one parameter (lab_path) with 0% schema description coverage, and the tool description adds no explanation of what lab_path means (e.g., format, how to obtain it). The description fails to compensate for the missing schema documentation.

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 clearly states the action ('Delete') and resource ('a lab from the EVE-NG server'), distinguishing it from sibling tools like create_lab or get_lab. However, it does not specify whether the deletion applies to running or saved labs, which could add clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description warns that the action is irreversible but provides no guidance on when to use this tool versus alternatives such as stopping a lab or removing nodes. No prerequisites or context for use are given.

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

get_labB

Get detailed information about a lab including its nodes, networks, and topology. Returns lab metadata, all nodes with their status, and all networks.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so description bears full burden. It correctly signals a read operation by stating what is returned. However, it does not disclose potential error conditions or permissions needed.

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?

Two concise sentences that front-load the purpose and enumerate return contents without superfluous text. Every sentence adds value.

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?

Despite having an output schema (so return description is adequate), the description lacks parameter guidance and behavioral flags. For a single-parameter tool, this is a notable gap but not catastrophic.

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

Parameters1/5

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

Schema coverage is 0%, yet the description adds no information about the 'lab_path' parameter—its format, examples, or valid values. The parameter is entirely undocumented in both schema and description.

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 retrieves detailed lab information including nodes, networks, and topology. It distinguishes from siblings like get_node_config, get_node_status, and list_labs by emphasizing comprehensive scope.

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?

Guidelines are minimal; the description implies use when full lab details are needed but offers no when-not-to-use or alternative selection criteria. No prerequisites or context for successful invocation are mentioned.

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

get_node_configB

Get a node's current startup configuration text.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
node_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

The description indicates a read operation ('Get'), but there are no annotations to confirm safety. It does not disclose whether the call requires specific permissions, any side effects, or limitations (e.g., returns saved vs. running config).

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?

A single, front-loaded sentence with no waste. Every word adds value, though some parameter explanations are missing.

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?

Given the tool's simplicity and presence of an output schema, the description is moderately complete. However, the lack of parameter documentation and usage guidance leaves gaps for an agent to understand invocation requirements.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no explanation for lab_path or node_id beyond the schema's titles. The tool has only 2 required parameters, but the description fails to provide any additional semantic context.

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 action (Get), the target resource (node's current startup configuration), and the output (text). It distinguishes from siblings like get_node_status (which likely returns operational status) and push_config (which writes config).

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?

No explicit guidance on when to use this tool vs alternatives. The description implies retrieving configuration text, but doesn't provide context for when this tool is preferred over other node-related tools or prerequisites.

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

get_node_statusA

Get the current status of a node — whether it is running, stopped, or building. Also returns node details like RAM, CPU, template, and console URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
node_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It clearly indicates a read operation (get status) and lists returned fields. However, it does not disclose potential side effects, auth requirements, or behavior for unknown nodes.

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 extremely concise: two sentences with no extraneous text. Every word adds value.

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 tool is simple with 2 required params and an output schema. The description covers purpose and return values but lacks parameter guidance. Given the output schema exists, the gap is the missing parameter semantics.

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?

Schema coverage is 0% and the description adds no explanation for lab_path or node_id. The agent must infer their meaning from the tool name alone. The description does not compensate for the missing schema descriptions.

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 retrieves node status (running/stopped/building) and returns details like RAM, CPU, template, and console URL. It uses a specific verb-resource pair and distinguishes itself from siblings like get_lab or get_node_config.

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 usage for checking node status but provides no explicit guidance on when to use this tool versus alternatives (e.g., get_lab or get_node_config). No when-not or prerequisites are mentioned.

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

list_imagesA

List all available QEMU/Docker node images (templates) installed on the EVE-NG server. Returns template names and descriptions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Description indicates it lists and returns data, implying read-only behavior, but does not explicitly state behavioral traits like permissions or side effects. Since annotations are absent, more clarity would improve transparency.

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?

Two sentences, direct and efficient. No extraneous information; every word adds value.

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?

Given the tool's simplicity (0 parameters, output schema exists), the description covers the essential purpose and return values adequately.

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?

No parameters, so schema coverage is 100%. Description adds nothing needed beyond schema, meeting the baseline for zero parameters.

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?

Description clearly states it lists available QEMU/Docker node images on EVE-NG server, with specific verb 'list' and resource 'images'. Distinguishes from sibling tools like add_node or create_lab.

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?

Implied usage as a precursor to adding nodes, but no explicit guidance on when to use versus alternatives or any when-not conditions.

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

list_labsA

List all labs on the EVE-NG server. Returns lab names, filenames, and paths. Optionally specify a folder path to list labs in a subfolder.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNo/

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool lists labs and returns names, filenames, and paths, but does not mention whether it is read-only or any side effects, though it is safely inferable.

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, front-loading the main purpose and return types, then adding optional usage. No unnecessary words.

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 simple list tool with one optional parameter and an existing output schema, the description sufficiently covers what the tool does and its optional filtering. No additional information is critically needed.

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?

The single parameter 'folder' is described in the description as optional for specifying a subfolder. Since schema coverage is 0% (no description in schema), the description fully compensates by explaining the parameter's meaning and default.

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 explicitly states the verb 'list' and resource 'labs' on an EVE-NG server, and mentions return values. It clearly distinguishes from sibling tools like create_lab or delete_lab.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit when-to-use or alternatives compared to siblings like get_lab or list_images. Only implicit context is given through the mention of optional folder filtering.

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

push_configA

Push a startup configuration to a node. The node should be stopped before pushing config. The configuration is stored and applied on next boot.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
node_idYes
configYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description discloses that the configuration is stored and applied on next boot, and that the node should be stopped. This gives sufficient behavioral context for a write operation.

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 tight sentences, each conveying essential information without any fluff or redundancy.

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 main action and a key precondition, but lacks details such as config format, size limits, or behavior if node is running. Given the presence of an output schema, it is minimally adequate.

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?

Schema coverage is 0% with no descriptions for parameters, and the tool description does not explain any parameter. While parameter names are somewhat self-explanatory, the description adds no value 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?

The description clearly states the verb 'push' and the resource 'startup configuration to a node', distinguishing it from sibling tools like get_node_config or start_node.

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?

Provides an explicit precondition: 'The node should be stopped before pushing config.' This helps the agent know when to use the tool, though it does not mention alternative tools for similar tasks.

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

start_allB

Start all nodes in a lab simultaneously.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It only states the basic action without disclosing effects on already running nodes, error conditions, or required prerequisites beyond the lab_path parameter.

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 a single concise sentence, front-loaded with key information, containing no extraneous words.

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?

Given the tool's simplicity (one required parameter, output schema exists), the description covers the core purpose but lacks parameter explanation, making it merely adequate.

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

Parameters1/5

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

The input schema has one parameter 'lab_path' with no description and 0% schema coverage. The description adds no further meaning, leaving the agent without guidance on what constitutes a valid lab path.

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 action 'start all nodes' and specifies the scope 'in a lab simultaneously'. It effectively distinguishes from sibling tools like start_node (single node) and stop_all.

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?

No explicit guidance on when to use this tool versus alternatives, but the purpose implies it is for starting all nodes at once. No exclusions or prerequisites are mentioned.

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

start_nodeC

Start a single node in a lab. The node must already exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
node_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only states that the tool starts a node and that the node must exist. It does not describe whether the operation is idempotent, what happens if the node is already running, any required authentication or permissions, or potential side effects. The existence of an output schema is noted but not leveraged in the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short at two sentences, with no unnecessary words. However, its brevity leads to missing critical information, making it less effective. It is concise but not sufficiently informative.

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

Completeness2/5

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

Given the tool's simplicity (2 required params, no annotations), the description should provide complete guidance. It fails to explain parameter inputs, resulting in an incomplete tool definition. The presence of an output schema reduces the need for return value explanation, but input semantics remain undocumented.

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

Parameters1/5

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

With 0% schema description coverage, the description must compensate for missing parameter semantics. However, it does not describe 'lab_path' (e.g., its format or meaning) or 'node_id' (e.g., its domain or how to obtain it). The description adds no value beyond the schema's property names and types.

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 starts a single node and adds a precondition that the node must already exist. This distinguishes it from sibling tools like 'start_all' (which starts all nodes) and 'add_node' (which creates a node). The verb 'start' and resource 'node' 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for starting a specific node that already exists, but it does not explicitly instruct when to use it versus alternatives like 'start_all' or 'stop_node'. It provides a minimal usage context (node must exist) but lacks explicit when-to-use or when-not-to-use guidance.

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

stop_allC

Stop all nodes in a lab simultaneously.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description must disclose behavioral traits. It only states the basic action without mentioning side effects, permissions, or reversibility, which is insufficient for a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, but it lacks necessary details, making it under-informative despite brevity.

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

Completeness2/5

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

Given the tool's destructive nature, the description omits preconditions, errors, or output details. The existence of an output schema does not compensate for missing usage context.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description does not explain the sole required parameter 'lab_path' (e.g., format, example). The description adds no value 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?

The description clearly states the action (stop all nodes) and the resource (a lab), distinguishing it from sibling tools like stop_node (single node) and start_all (start all nodes).

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 usage context but does not explicitly state when to use this tool vs alternatives (e.g., stop_node) or any prerequisites (e.g., lab must be running).

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

stop_nodeB

Stop a single node in a lab.

ParametersJSON Schema
NameRequiredDescriptionDefault
lab_pathYes
node_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as whether stopping a node is safe, reversible, or affects other lab components. The simple verb 'stop' leaves uncertainty.

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 very short (one sentence) with no wasted words. However, it could be improved by adding brief parameter context without becoming lengthy.

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?

For a simple stop action, the description is acceptably complete given the presence of an output schema. However, it lacks details on node status prerequisites or the effect of stopping, which would improve completeness.

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?

Schema description coverage is 0%, and the description does not explain the 'lab_path' or 'node_id' parameters beyond implicit context. The schema provides only titles, so the description adds minimal value.

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 action ('stop') and resource ('single node in a lab'), distinguishing it from siblings like 'stop_all' and 'stop_lab'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as 'stop_all' or 'stop_lab', nor any prerequisites or context about node state.

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. 14 tool updatesv0.1.0
    • First observedadd_node
    • First observedconnect_nodes
    • First observedcreate_lab
    • First observeddelete_lab
    • First observedget_lab
    • First observedget_node_config
    • First observedget_node_status
    • First observedlist_images
    • First observedlist_labs
    • First observedpush_config
    • First observedstart_all
    • First observedstart_node
    • First observedstop_all
    • First observedstop_node

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct operation (creating labs, adding nodes, connecting, starting/stopping, configuration), with no overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., create_lab, get_lab, start_node), making them predictable.

Tool Count5/5

14 tools appropriately cover lab, node, connectivity, and configuration management without being excessive or sparse.

Completeness4/5

Core workflows (create lab, add nodes, connect, configure, start/stop) are covered; missing operations like delete node or remove connection are minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers