MCP server providing Claude/LLM agents with programmatic access to EVE-NG network labs
Project description
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 in the EVE-NG web UI required.
Features
- Lab management — Create, list, get details, and delete labs
- Node operations — Add nodes from any installed template, start/stop individually or all at once
- Configuration push — Push startup configs to nodes before boot
- Network connectivity — Create networks and connect node interfaces
- Image discovery — List all available QEMU/Docker images on the server
Requirements
- Python >= 3.10
- An EVE-NG server (Community or Professional) with API access
- An MCP-compatible client (Claude Desktop, Claude Code, etc.)
Installation
# From source
git clone https://github.com/axiom-works-ai/eveng-mcp-server.git
cd eveng-mcp-server
pip install -e .
# With dev dependencies (for testing)
pip install -e ".[dev]"
Configuration
The server reads connection details from environment variables:
| 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 |
Usage
Claude Desktop
Add to your Claude Desktop MCP configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"eveng": {
"command": "eveng-mcp-server",
"env": {
"EVENG_HOST": "http://192.168.122.10",
"EVENG_USERNAME": "admin",
"EVENG_PASSWORD": "eve"
}
}
}
}
Claude Code
Add to your Claude Code settings (.claude/settings.json):
{
"mcpServers": {
"eveng": {
"command": "eveng-mcp-server",
"env": {
"EVENG_HOST": "http://192.168.122.10",
"EVENG_USERNAME": "admin",
"EVENG_PASSWORD": "eve"
}
}
}
}
Direct (stdio)
export EVENG_HOST=http://192.168.122.10
export EVENG_USERNAME=admin
export EVENG_PASSWORD=eve
eveng-mcp-server
Or run as a Python module:
python -m eveng_mcp_server
Available Tools
Lab Management
| Tool | Description |
|---|---|
list_labs |
List all labs on the server |
get_lab |
Get lab details with nodes, networks, and topology |
create_lab |
Create a new lab |
delete_lab |
Delete a lab |
Node Operations
| Tool | Description |
|---|---|
add_node |
Add a node to a lab (specify template, RAM, CPU, interfaces) |
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 node status and details |
Configuration
| Tool | Description |
|---|---|
push_config |
Push startup configuration to a node |
get_node_config |
Get a node's current startup configuration |
Network Connectivity
| Tool | Description |
|---|---|
connect_nodes |
Connect two node interfaces via a shared network |
Discovery
| Tool | Description |
|---|---|
list_images |
List all installed QEMU/Docker images |
Example Conversation
You: Create a lab called "OSPF Demo" with two Arista vEOS switches connected together, then push basic OSPF configs to both.
The agent will:
- Call
create_labto create "OSPF Demo" - Call
list_imagesto find the vEOS template - Call
add_nodetwice to add two vEOS switches - Call
connect_nodesto link their interfaces - Call
push_configon each node with OSPF configuration - Call
start_allto boot the lab
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linter
ruff check src/ tests/
EVE-NG API Notes
- The EVE-NG API uses session cookies (not bearer tokens) — the client authenticates once and reuses the session.
- Lab paths use URL-encoded filesystem paths (e.g.,
/api/labs/My%20Lab.unl). - Node status codes:
0= stopped,1= building,2= running. - Startup configs should be pushed while the node is stopped.
License
Apache-2.0 — see LICENSE for details.
Author
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eveng_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: eveng_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
317c81e89261819a7e02784fb00afd5df383070cf8c1346aacf4358f76ffe2ed
|
|
| MD5 |
c4fee83bd5820fad1ce12c771eebb206
|
|
| BLAKE2b-256 |
fdd24377b1bb43a516b3e3f113506edc7d15c10ce480403ecc03c3be47e41499
|
File details
Details for the file eveng_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: eveng_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d937a8622b6c9802d67f3089e3e92486b66438465e49b250e5b3041fdd36637b
|
|
| MD5 |
c4d7f4dc6d64650d9d2ac4f96946ac73
|
|
| BLAKE2b-256 |
d30e9dd9e09ddd641b6e46a3228ae2a4f4af879f53a86c1f6ccda2b159102b11
|