# 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.49.0 ## Features - **15 Tools**: CRUD-style GNS3 automation (v0.47.0: 53% consolidation from 32 tools) - **25 Resources**: Read-only data access (projects, nodes, links, sessions, topology reports) - **CRUD Pattern**: Consolidated tools with `action` parameters (`project(action="open")`, `node(action="create")`, etc.) - **Batch Operations**: Console and SSH operations use batch-only APIs for atomic execution - **Wildcard Support**: Node operations support patterns (`*`, `Router*`, `R[123]`, JSON arrays) - **Project Management**: Create, open, close GNS3 projects - **Node Control**: Start/stop/restart nodes with wildcard patterns and parallel execution - **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 - **Tool Discovery**: `search_tools()` with category/capability/resource filtering - **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 uv` or download from https://github.com/astral-sh/uv **Option 1: Using uvx (Recommended - Faster)** ```powershell # 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 ` --scope user ` -- uvx gns3-mcp@latest # Verify installation claude mcp get gns3-mcp # Should show: Status: ✓ Connected ``` **Option 2: Using pip (Traditional)** ```powershell # 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 ` --scope user ` -- 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):** ```powershell # 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 --scope user -- uvx gns3-mcp@latest # 4. Verify claude mcp get gns3-mcp ``` **Using pip:** ```powershell # 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 --scope user -- 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:** 1. Download the latest `.mcpb` package: - From [Releases](https://github.com/ChistokhinSV/gns3-mcp/releases) - Or build locally: `just build` (creates `mcp-server\mcp-server.mcpb`) 2. **Install by double-clicking** the `.mcpb` file 3. **Configure credentials** in Claude Desktop: - Open Claude Desktop - Go to Settings > Developer > Edit Config - Find `gns3-mcp` server - Add environment variables: ```json { "GNS3_HOST": "192.168.1.20", "GNS3_PORT": "80", "GNS3_USER": "admin", "GNS3_PASSWORD": "your-password" } ``` 4. **Restart Claude Desktop** 5. **Check logs** if issues occur: ``` C:\Users\\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):** 1. Install uv: `pip install uv` 2. Create/edit `.cursor\mcp.json`: ```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:** 1. Install package: `pip install gns3-mcp` 2. Create/edit `.cursor\mcp.json`: ```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" } } } } ``` 3. Restart Cursor --- ### Windsurf Setup **Configuration File Location:** `%USERPROFILE%\.codeium\windsurf\mcp_config.json` **Using uvx (Recommended):** 1. Install uv: `pip install uv` 2. Create/edit `mcp_config.json`: ```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:** 1. Install package: `pip install gns3-mcp` 2. Create/edit `mcp_config.json`: ```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" } } } } ``` 3. Restart Windsurf > **Note:** Cursor and Windsurf use identical configuration formats.
--- ### Troubleshooting **Connection Issues:** ```powershell # 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 `.env` file - **"Socket is closed"**: SSH session expired, reconnect automatically on next command **For Claude Desktop issues:** Check logs at: ``` C:\Users\\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:** - `.env` file with GNS3 credentials - API key for authentication **Setup:** 1. Add to `.env`: ```powershell # Generate with: python -c "import secrets; print(secrets.token_urlsafe(32))" MCP_API_KEY=your-random-token-here ``` 2. Configure Claude Code: ```powershell claude mcp add --transport http gns3-mcp http://127.0.0.1:8100/mcp/ --scope user` --header "MCP_API_KEY: your-random-token-here" ``` 3. Start server (in separate terminal): ```powershell 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 and uvx (for HTTP mode). **📖 See [PORTABLE_SETUP.md](PORTABLE_SETUP.md) for detailed instructions.** **Quick Setup:** ```batch # 1. Install uv (if not already installed) pip install uv # 2. Set environment variables from .env (requires Administrator) .\set-env-vars.ps1 # 3. Install and start service (requires Administrator) .\server.cmd install ``` **Service Management:** ```batch # Check status .\server.cmd status # Start/stop/restart .\server.cmd start .\server.cmd stop .\server.cmd restart # After code updates .\server.cmd reinstall # Reinstall service # Remove service .\server.cmd uninstall # Development mode (direct run, no service) .\server.cmd run ``` **Key Features:** - ✅ **Portable**: Works from any folder location (no hardcoded paths) - ✅ **No venv**: Uses uvx for automatic isolation - ✅ **Secure**: Credentials in Windows environment variables - ✅ **Simple**: Automated setup with PowerShell script - **User**: GNS3MCPService (low privilege, optional) - **Startup**: Automatic - **Logs**: `mcp-http-server.log` and `GNS3-MCP-HTTP.wrapper.log`
Development Setup (Contributors) ### Manual Installation from Source **Requirements:** - Python ≥ 3.10 - GNS3 Server v3.x running and accessible **Setup:** ```powershell # 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:** ```powershell just build # Creates: mcp-server\mcp-server.mcpb ```
--- ## Docker Deployment [![Docker Image Version](https://img.shields.io/docker/v/chistokhinsv/gns3-mcp)](https://hub.docker.com/r/chistokhinsv/gns3-mcp) [![Docker Pulls](https://img.shields.io/docker/pulls/chistokhinsv/gns3-mcp)](https://hub.docker.com/r/chistokhinsv/gns3-mcp) Run GNS3 MCP Server in Docker for isolated deployment, easier management, and multi-platform support. ### Quick Start with Docker Compose **Prerequisites:** - Docker Desktop installed - GNS3 server running and accessible - Network access to GNS3 server **Step 1: Download docker-compose.yml** ```bash curl -O https://raw.githubusercontent.com/ChistokhinSV/gns3-mcp/master/docker-compose.yml ``` **Step 2: Create .env file** ```bash cat > .env <