GNS3 lab automation MCP server with AI agent integration
Project description
GNS3 MCP Server
Model Context Protocol (MCP) server for GNS3 network lab automation. Control GNS3 projects, nodes, and device consoles through Claude Desktop or any MCP-compatible client.
Version: 0.46.0
Features
- 32 Tools: Complete GNS3 lab automation + resource query tools for Claude Desktop
- 25 Resources: Read-only data access (projects, nodes, links, sessions, topology reports)
- Project Management: Create, open, close GNS3 projects
- Node Control: Start/stop/restart nodes with wildcard patterns (
*,Router*) - Console Access: Telnet console automation with pattern matching and grep filtering
- SSH Automation: Network device automation via Netmiko (200+ device types)
- Network Topology: Batch connect/disconnect links, create drawings, export diagrams
- Docker Integration: Configure container networks, read/write files
- Claude Desktop Support: All resources accessible via tools (
query_resource,list_projects,list_nodes,get_topology) - Security: API key authentication (HTTP mode), service privilege isolation, HTTPS support
Installation
Supported Platform: Windows only
Quick Start (Claude Code - Recommended)
Prerequisites:
- Windows 10/11
- GNS3 server running and accessible
- Claude Code installed
- uv package manager (for uvx): Install with
pip install uvor download from https://github.com/astral-sh/uv
Option 1: Using uvx (Recommended - Faster)
# Single command - no .env file needed!
claude mcp add --transport stdio gns3-mcp `
--env GNS3_HOST=192.168.1.20 `
--env GNS3_PORT=80 `
--env GNS3_USER=admin `
--env GNS3_PASSWORD=your-password `
-- uvx gns3-mcp@latest
# Verify installation
claude mcp get gns3-mcp
# Should show: Status: ✓ Connected
Option 2: Using pip (Traditional)
# Step 1: Install package
pip install gns3-mcp
# Step 2: Add to Claude Code with credentials
claude mcp add --transport stdio gns3-mcp `
--env GNS3_HOST=192.168.1.20 `
--env GNS3_PORT=80 `
--env GNS3_USER=admin `
--env GNS3_PASSWORD=your-password `
-- gns3-mcp
# Step 3: Verify installation
claude mcp get gns3-mcp
# Should show: Status: ✓ Connected
Why uvx? 10-100× faster than pip, automatic dependency isolation, no venv management needed.
Installation by Editor
Claude Code (Detailed Setup)
Claude Code Setup
STDIO Mode (Recommended)
STDIO mode is more secure - no HTTP service, no authentication needed, runs only when Claude Code is active.
Using uvx (Recommended):
# 1. Install uv (one-time setup)
pip install uv
# 2. Create .env file
@"
GNS3_HOST=192.168.1.20
GNS3_PORT=80
GNS3_USER=admin
GNS3_PASSWORD=your-password
"@ | Out-File -FilePath .env -Encoding ASCII
# 3. Add to Claude Code
claude mcp add --transport stdio gns3-mcp -- uvx gns3-mcp@latest
# 4. Verify
claude mcp get gns3-mcp
Using pip:
# 1. Install package globally
pip install gns3-mcp
# 2. Create .env file in project directory
@"
GNS3_HOST=192.168.1.20
GNS3_PORT=80
GNS3_USER=admin
GNS3_PASSWORD=your-password
"@ | Out-File -FilePath .env -Encoding ASCII
# 3. Add to Claude Code
claude mcp add --transport stdio gns3-mcp -- gns3-mcp
# 4. Verify
claude mcp get gns3-mcp
# Should show: Status: ✓ Connected
Environment Variables:
| Variable | Required | Description | Example |
|---|---|---|---|
GNS3_HOST |
Yes | GNS3 server IP/hostname | 192.168.1.20 |
GNS3_PORT |
Yes | GNS3 server port | 80 or 3080 |
GNS3_USER |
Yes | GNS3 username | admin |
GNS3_PASSWORD |
Yes | GNS3 password | your-password |
Claude Desktop (.mcpb Package)
Claude Desktop Setup
Installation:
-
Download the latest
.mcpbpackage:- From Releases
- Or build locally:
just build(createsmcp-server\mcp-server.mcpb)
-
Install by double-clicking the
.mcpbfile -
Configure credentials in Claude Desktop:
- Open Claude Desktop
- Go to Settings > Developer > Edit Config
- Find
gns3-mcpserver - Add environment variables:
{ "GNS3_HOST": "192.168.1.20", "GNS3_PORT": "80", "GNS3_USER": "admin", "GNS3_PASSWORD": "your-password" }
-
Restart Claude Desktop
-
Check logs if issues occur:
C:\Users\<username>\AppData\Roaming\Claude\logs\mcp-server-GNS3 Lab Controller.log
Cursor & Windsurf (JSON Configuration)
Cursor Setup
Configuration File Location:
- Project-specific:
.cursor\mcp.json(in project directory) - Global:
%USERPROFILE%\.cursor\mcp.json
Using uvx (Recommended):
-
Install uv:
pip install uv -
Create/edit
.cursor\mcp.json:
{
"mcpServers": {
"gns3-mcp": {
"command": "uvx",
"args": ["gns3-mcp@latest"],
"env": {
"GNS3_HOST": "192.168.1.20",
"GNS3_PORT": "80",
"GNS3_USER": "admin",
"GNS3_PASSWORD": "your-password"
}
}
}
}
Using pip:
-
Install package:
pip install gns3-mcp -
Create/edit
.cursor\mcp.json:
{
"mcpServers": {
"gns3-mcp": {
"command": "gns3-mcp",
"args": [],
"env": {
"GNS3_HOST": "192.168.1.20",
"GNS3_PORT": "80",
"GNS3_USER": "admin",
"GNS3_PASSWORD": "your-password"
}
}
}
}
- Restart Cursor
Windsurf Setup
Configuration File Location: %USERPROFILE%\.codeium\windsurf\mcp_config.json
Using uvx (Recommended):
-
Install uv:
pip install uv -
Create/edit
mcp_config.json:
{
"mcpServers": {
"gns3-mcp": {
"command": "uvx",
"args": ["gns3-mcp@latest"],
"env": {
"GNS3_HOST": "192.168.1.20",
"GNS3_PORT": "80",
"GNS3_USER": "admin",
"GNS3_PASSWORD": "your-password"
}
}
}
}
Using pip:
-
Install package:
pip install gns3-mcp -
Create/edit
mcp_config.json:
{
"mcpServers": {
"gns3-mcp": {
"command": "gns3-mcp",
"args": [],
"env": {
"GNS3_HOST": "192.168.1.20",
"GNS3_PORT": "80",
"GNS3_USER": "admin",
"GNS3_PASSWORD": "your-password"
}
}
}
}
- Restart Windsurf
Note: Cursor and Windsurf use identical configuration formats.
Troubleshooting
Connection Issues:
# Test GNS3 server connectivity
curl http://192.168.1.20:80/v3/projects
# Check Claude Code MCP status
claude mcp get gns3-mcp
# View detailed logs (Claude Code)
# Check console output when running commands
Common Issues:
- "gns3-mcp not found": Ensure package is installed (
pip list | findstr gns3-mcp) - "Connection refused": Verify GNS3 server is running and accessible
- "Authentication failed": Check credentials in
.envfile - "Socket is closed": SSH session expired, reconnect automatically on next command
For Claude Desktop issues: Check logs at:
C:\Users\<username>\AppData\Roaming\Claude\logs\mcp-server-GNS3 Lab Controller.log
Advanced Setup
HTTP Mode (Always-Running Service)
HTTP Mode Configuration
HTTP mode requires a persistent service and API key authentication. Only use if you need the service always running or network access from other machines.
Prerequisites:
.envfile with GNS3 credentials- API key for authentication
Setup:
-
Add to
.env:# Generate with: python -c "import secrets; print(secrets.token_urlsafe(32))" MCP_API_KEY=your-random-token-here
-
Configure Claude Code:
claude mcp add --transport http gns3-mcp ` http://127.0.0.1:8100/mcp/ ` --header "MCP_API_KEY: your-random-token-here"
-
Start server (in separate terminal):
gns3-mcp --transport http --http-port 8100
Note: If MCP_API_KEY is missing from .env, it will be auto-generated on first start and automatically saved to .env for persistence.
Windows Service (Production Deployment)
Windows Service Deployment
Run MCP server as a Windows service with WinSW (for HTTP mode):
Setup (one-time):
# 1. Recreate venv with all dependencies (including FastAPI)
.\server.cmd venv-recreate
# 2. Create service user account (requires Administrator)
.\server.cmd create-user
# 3. Install and start service
.\server.cmd install
Service Management:
# Check status
.\server.cmd status
# Start/stop/restart
.\server.cmd start
.\server.cmd stop
.\server.cmd restart
# After code updates
.\server.cmd venv-recreate # Rebuild dependencies
.\server.cmd reinstall # Reinstall service
# Remove service
.\server.cmd uninstall
Service Details:
- User: GNS3MCPService (low privilege, not LocalSystem)
- Startup: Automatic
- Logs:
mcp-http-server.logandGNS3-MCP-HTTP.wrapper.log - Commands: All integrated into server.cmd
Development Setup (Contributors)
Manual Installation from Source
Requirements:
- Python ≥ 3.10
- GNS3 Server v3.x running and accessible
Setup:
# Install dependencies
pip install -r requirements.txt
# Create .env file
@"
GNS3_HOST=192.168.1.20
GNS3_PORT=80
GNS3_USER=admin
GNS3_PASSWORD=your-password
"@ | Out-File -FilePath .env -Encoding ASCII
# Run directly (STDIO mode - no authentication)
python gns3_mcp\cli.py --host 192.168.1.20 --port 80 --username admin --password your-password
# Or add to Claude Code (project-scoped)
claude mcp add --transport stdio gns3-mcp --scope project -- python "C:\full\path\to\gns3_mcp\cli.py"
Build .mcpb package:
just build
# Creates: mcp-server\mcp-server.mcpb
Documentation
- CHANGELOG.md - Version history and release notes
- DEPLOYMENT.md - SSH proxy deployment instructions
- docs/architecture/ - Architecture documentation and C4 diagrams
License
MIT License
Author
Sergei Chistokhin (Sergei@Chistokhin.com)
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 gns3_mcp-0.46.2.tar.gz.
File metadata
- Download URL: gns3_mcp-0.46.2.tar.gz
- Upload date:
- Size: 132.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93b9b91ca9cc0401f8c61d4f976e800c9d0401f8b76d9116f7d4c0c43c085fec
|
|
| MD5 |
ed3c4be53c437cf2217686240ac12b03
|
|
| BLAKE2b-256 |
6ab137cb39d41f4f957d4b34d250f46fd2ed50b9a26fd804419197a700711f84
|
File details
Details for the file gns3_mcp-0.46.2-py3-none-any.whl.
File metadata
- Download URL: gns3_mcp-0.46.2-py3-none-any.whl
- Upload date:
- Size: 139.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8d75c18da246570691bc98fe602d5dfb8124d445b139c222312be7ce99f8e0f
|
|
| MD5 |
fa97d34158e8c553e9c0d0fcea7c2e35
|
|
| BLAKE2b-256 |
b969061be7f100068994a0451070e802a2ac92a324ee2bd47440fcee31b8d203
|