Walk the user through connecting their Eve-ng server to Claude Code by setting up the Eve-ng MCP server. Follow these steps precisely.
Step 1 — Introduction
Greet the user and briefly explain what the Eve-ng MCP server does:
- It lets Claude directly manage Eve-ng labs: create topologies, add nodes, connect interfaces, start/stop devices
- It runs as a small Python server that bridges Claude Code to the Eve-ng REST API
Ask if they want to continue.
Step 2 — Check Prerequisites
Before anything else, verify:
- Run
python3 --version — must be 3.11+. If not, tell the user to install it and stop.
- Run
uv --version — must be present. If missing, tell user to run: curl -LsSf https://astral.sh/uv/install.sh | sh
- Check if
02-Eve-ng-Setup/eveng-mcp/ exists. If not, tell the user to clone it:
cd 02-Eve-ng-Setup
git clone https://github.com/moimran/eveng-mcp.git
cd eveng-mcp && uv sync
cp .env.example .env
Step 3 — Choose Deployment Method
Show this menu and ask the user to choose:
How do you want to run the Eve-ng MCP server?
[1] stdio — run on this machine, Claude spawns it inline (simplest)
[2] Docker — deploy as a container on a remote Docker server (always-on)
[3] Systemd — install as a service inside the Eve-ng VM (most integrated)
Wait for the user's choice before proceeding.
Step 4a — stdio Setup (if user chose [1])
Collect the following details one at a time using AskUserQuestion:
- Eve-ng server hostname or IP address
- Port (default: 80)
- Protocol: http or https (default: http)
- Username (default: admin)
- Password
Then:
- Write these values to
02-Eve-ng-Setup/eveng-mcp/.env (update EVENG_HOST, EVENG_PORT, etc.)
- Run a quick connectivity test:
cd 02-Eve-ng-Setup/eveng-mcp && uv run eveng-mcp-server run --transport stdio
Send a basic ping/test and check if it responds. If it fails, show the error and suggest fixes (wrong IP, wrong credentials, firewall).
- Write this config to
.claude/settings.json:
{
"mcpServers": {
"eveng": {
"command": "uv",
"args": ["run", "eveng-mcp-server", "run", "--transport", "stdio"],
"cwd": "./02-Eve-ng-Setup/eveng-mcp"
}
}
}
- Tell the user: Restart Claude Code to activate the Eve-ng tools.
Step 4b — Docker Setup (if user chose [2])
Collect the following details one at a time using AskUserQuestion:
- Docker server hostname or IP
- SSH username for the Docker server
- Docker context name to use (offer to create one if it doesn't exist)
- Port to expose the MCP server on (default: 8000)
- Eve-ng server hostname or IP
- Eve-ng port (default: 80), protocol, username, password
Then:
- Write Eve-ng credentials to
02-Eve-ng-Setup/eveng-mcp/.env
- Check if Docker context exists:
docker context ls
- If not, create it:
docker context create <name> --docker "host=ssh://user@host"
- Build the image:
cd 02-Eve-ng-Setup/eveng-mcp
docker --context <name> build --target production -t eveng-mcp:latest .
- Stop any existing container:
docker --context <name> rm -f eveng-mcp (ignore errors)
- Run the container:
docker --context <name> run -d \
--name eveng-mcp \
--restart unless-stopped \
-p <port>:8000 \
--env-file 02-Eve-ng-Setup/eveng-mcp/.env \
-e MCP_TRANSPORT=sse \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8000 \
eveng-mcp:latest
- Wait 5 seconds, then verify:
curl http://<docker-host>:<port>/sse -m 3
- If it returns an SSE event line → success
- If it fails → run
docker --context <name> logs eveng-mcp and show the error
- Write this config to
.claude/settings.json:
{
"mcpServers": {
"eveng": {
"url": "http://<docker-host>:<port>/sse"
}
}
}
- Tell the user: Restart Claude Code to activate the Eve-ng tools.
Step 4c — Systemd Setup (if user chose [3])
Collect the following details one at a time using AskUserQuestion:
- Eve-ng VM SSH host (IP or hostname)
- SSH username (default: root)
- Install path (default: /opt/eveng-mcp)
- Port to expose (default: 8000)
- Eve-ng credentials (if different from default admin/eve)
Then SSH into the VM and run these steps:
- Clone the repo into install path
- Run
uv sync inside the cloned directory
- Write
.env with EVENG_HOST=localhost (same machine as Eve-ng)
- Copy systemd unit:
cp deployment/systemd/eveng-mcp-server.service /etc/systemd/system/
- Enable and start:
systemctl daemon-reload && systemctl enable --now eveng-mcp-server
- Verify:
systemctl is-active eveng-mcp-server
- Test endpoint:
curl http://localhost:8000/sse
Write config to .claude/settings.json:
{
"mcpServers": {
"eveng": {
"url": "http://<eve-ng-vm-ip>:8000/sse"
}
}
}
Tell the user: Restart Claude Code to activate the Eve-ng tools.
Step 5 — Completion
After any successful setup:
- Summarize what was configured (method, host, port)
- Remind the user to restart Claude Code
- Tell them: after restart, run
/mcp to confirm the eveng server and tools are listed
- Suggest: "Try asking Claude to list your Eve-ng labs once it's connected"
Error Handling
At every step, if a command fails:
- Show the error output clearly
- Explain the most likely cause
- Offer a concrete fix or next step
- Ask if the user wants to retry or abort