EVE-NG MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EVE-NG MCP ServerCreate a lab with two routers connected via Ethernet."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EVE-NG MCP Server
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 runningQuick Start
1. Install
pip install eveng-mcp-server2. Configure
Set your EVE-NG connection details:
export EVENG_HOST=http://your-eve-ng-server
export EVENG_USERNAME=admin
export EVENG_PASSWORD=eve3. 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 all labs on the server |
| Get lab details — nodes, networks, links, status |
| Create a new empty lab |
| Delete a lab and all its resources |
Node Operations
Tool | Description |
| Browse all installed QEMU and Docker images |
| Add a node to a lab — specify image, name, RAM, CPU, interface count |
| Start a single node |
| Stop a single node |
| Start all nodes in a lab |
| Stop all nodes in a lab |
| Get a node's current status and configuration |
Configuration
Tool | Description |
| Push startup configuration to a node (must be stopped) |
| Retrieve a node's current startup configuration |
Networking
Tool | Description |
| 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 |
|
Local network |
|
Via Tailscale |
|
Via SSH tunnel |
|
Configuration Reference
Variable | Default | Description |
|
| EVE-NG API base URL |
|
| API username |
|
| API password |
Troubleshooting
"Connection refused" or timeout
Verify EVE-NG is running and the API is accessible:
curl http://your-server/api/statusCheck 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/eveEVE-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_imagesto see what's installedEVE-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_statusto 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-importsEVE-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= runningPush startup configs while nodes are stopped — they apply at next boot
connect_nodesis a compound operation: creates a network, then attaches both interfaces
License
Author
Built by Axiom Works AI — AI-powered tools for network engineers.
Available Tools
14 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| template | Yes | ||
| name | No | ||
| node_type | No | qemu | |
| ram | No | ||
| cpu | No | ||
| ethernet | No | ||
| serial | No | ||
| image | No | ||
| console | No | telnet | |
| left | No | ||
| top | No | ||
| config | No | 0 | |
| delay | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| node1_id | Yes | ||
| node1_interface | Yes | ||
| node2_id | Yes | ||
| node2_interface | Yes | ||
| network_name | No | ||
| network_type | No | bridge |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| path | No | / | |
| author | No | ||
| version | No | 1 | |
| body | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | / |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| node_id | Yes | ||
| config | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_path | Yes | ||
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v0.1.0- First observed
add_node - First observed
connect_nodes - First observed
create_lab - First observed
delete_lab - First observed
get_lab - First observed
get_node_config - First observed
get_node_status - First observed
list_images - First observed
list_labs - First observed
push_config - First observed
start_all - First observed
start_node - First observed
stop_all - First observed
stop_node
TDQS
Scored across 14 tools
Each tool targets a distinct operation (creating labs, adding nodes, connecting, starting/stopping, configuration), with no overlap or ambiguity.
All tool names follow a consistent verb_noun snake_case pattern (e.g., create_lab, get_lab, start_node), making them predictable.
14 tools appropriately cover lab, node, connectivity, and configuration management without being excessive or sparse.
Core workflows (create lab, add nodes, connect, configure, start/stop) are covered; missing operations like delete node or remove connection are minor gaps.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables LLMs to manage network topologies, labs, nodes, and configurations in the EVE-NG network emulation platform through a standardized interface.2614-
- AlicenseNot gradedqualityAmaintenanceAn MCP server that allows LLMs to create, configure, validate, and explain Cisco Packet Tracer network topologies. It provides a comprehensive suite of tools for generating deployment scripts, CLI configurations, and automated network troubleshooting.256 PyPI178MIT
- FlicenseAqualityFmaintenanceAn MCP server that integrates Nornir with NAPALM and Netmiko, enabling LLMs to orchestrate multi-vendor network infrastructure through natural language.52-
- AlicenseAqualityBmaintenanceMCP server for controlling PNETLab v6 network labs via natural language, enabling topology creation, node management, config push, console interaction, and link fault injection.241Apache 2.0