GNS3 MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GNS3_HOST | Yes | GNS3 server IP/hostname | |
| GNS3_PORT | Yes | GNS3 server port | 80 |
| GNS3_USER | Yes | GNS3 username | |
| HTTP_PORT | No | MCP server port for HTTP mode | 8000 |
| LOG_LEVEL | No | Logging level | INFO |
| MCP_API_KEY | No | API key for HTTP mode authentication | |
| GNS3_PASSWORD | Yes | GNS3 password | |
| GNS3_USE_HTTPS | No | Use HTTPS for GNS3 | false |
| GNS3_VERIFY_SSL | No | Verify SSL certs | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| gns3_connectionA | Manage GNS3 server connection CRUD-style connection management tool. Actions: - check: Check connection status (connection state, error details, last attempt time) - retry: Force immediate re-authentication (bypasses exponential backoff) - reconnect: Full reconnect - re-authenticate AND clear all console/SSH/notification sessions. Use after GNS3 server restart, project switch, or when sessions are stale. Args: action: Connection action to perform Returns: JSON with connection status or reconnection result Examples: # Check connection status >>> gns3_connection(action="check") {"connected": false, "server": "http://192.168.1.20:80", "error": "Connection timeout", "last_attempt": "08:15:42 30.10.2025"} |
| notificationA | Subscribe to GNS3 server event notifications and read buffered events. GNS3 streams real-time events: node state changes, link updates, log messages, etc. This tool subscribes to the stream in background and buffers events for on-demand reading. Actions: - subscribe: Start listening to notification stream (controller or project-level) - read: Read buffered events (supports diff/all/last modes with optional action filter) - unsubscribe: Stop listening and clear buffer - status: Check subscription status and buffer stats Event types (action field): Controller: compute., project., template.*, log.error, log.warning, log.info, ping Project: node.created/updated/deleted, link.created/updated/deleted, drawing.created/updated/deleted, snapshot.restored, ping Examples: # Subscribe to all events >>> notification(action="subscribe") |
| projectA | Manage GNS3 projects CRUD-style project management tool. Actions: - list: List all projects - open: Open a project by name - create: Create a new project and auto-open it - close: Close the currently opened project Args: action: Project action to perform name: Project name (required for open/create) path: Optional project directory path (create only) format: Output format for 'list' action Returns: JSON with ProjectInfo for created project, or list of projects Examples: # List all projects >>> project(action="list") >>> project(action="list", format="json") |
| nodeA | Manage GNS3 nodes (CRUD operations) v0.47.0: CRUD-style consolidation of create_node, delete_node, and set_node. v0.40.0: Enhanced with wildcard and bulk operation support. Actions: - list: List nodes in a project - create: Create new node from template at specified coordinates - delete: Delete node from project (WARNING: destructive, cannot be undone) - set: Configure node properties and/or control state (supports wildcards/bulk) Wildcard Patterns (for 'set' and 'delete'): - Single node: "Router1" - All nodes: "" - Prefix match: "Router" (matches Router1, Router2, RouterCore) - Suffix match: "*-Core" (matches Router-Core, Switch-Core) - Character class: "R[123]" (matches R1, R2, R3) - JSON array: '["Router1", "Router2", "Switch1"]' Validation Rules: - name parameter requires node to be stopped - Hardware properties (ram, cpus, hdd_disk_image, adapters) apply to QEMU/IOU/Docker/Dynamips - For IOU nodes, 'adapters' maps to 'ethernet_adapters' automatically - ports parameter applies to ethernet_switch nodes only - state_action values: start, stop, suspend, reload, restart Returns: Single node: Status message Multiple nodes: BatchOperationResult JSON with per-node success/failure Examples: # List nodes in project >>> node(action="list", project_id="abc-123") >>> node(action="list", project_id="abc-123", format="json") |
| consoleA | Execute console operations (BATCH-ONLY) v0.47.0: Batch-only console tool. Individual console tools removed (aggressive consolidation). IMPORTANT: Prefer SSH tools when available! Console tools are primarily for:
Two-phase execution:
Each operation supports all parameters from the underlying console tool:
Args: operations: List of operation dictionaries (see examples above) Returns: JSON with execution results: { "completed": [0, 1, 2], // Indices of successful operations "failed": [3], // Indices of failed operations "results": [ { "operation_index": 0, "success": true, "operation_type": "send_and_wait", "node_name": "R1", "result": {...} // Operation-specific result }, ... ], "total_operations": 4, "execution_time": 5.3 } Examples: # Multiple commands on one node: >>> console(operations=[ ... {"type": "send_and_wait", "node_name": "R1", "command": "show version\n", "wait_pattern": "Router#"}, ... {"type": "send_and_wait", "node_name": "R1", "command": "show ip route\n", "wait_pattern": "Router#"}, ... {"type": "read", "node_name": "R1", "mode": "diff"} ... ]) |
| linkA | Manage network connections (links) v0.47.0: Renamed from set_network_connections to link (CRUD consolidation). Actions: - list: List all links in a project - batch: Execute multiple connect/disconnect operations with two-phase validation Two-phase execution for batch operations prevents partial topology changes:
Connection Operations (for 'batch' action): Connect: {action: "connect", node_a, node_b, port_a, port_b, adapter_a, adapter_b} Disconnect: {action: "disconnect", link_id} Examples: # List links >>> link(action="list", project_id="abc-123") >>> link(action="list", project_id="abc-123", format="json") Returns: JSON with OperationResult (completed and failed operations) or list of links |
| node_fileA | Manage Docker node files (CRUD operations) v0.47.0: CRUD-style consolidation of get_node_file, write_node_file, and configure_node_network. Actions: - read: Read file from Docker node filesystem - write: Write file to Docker node filesystem (WARNING: does NOT restart node) - configure_network: Configure network interfaces (full workflow: write + restart) IMPORTANT: Use 'configure_network' for network configuration as it handles the complete workflow (write config → restart node → apply changes). Returns: JSON with file contents, confirmation message, or configured interfaces Examples: # Read file >>> node_file(action="read", node_name="A-PROXY", file_path="etc/network/interfaces") |
| project_docsA | Manage project documentation (CRUD operations) v0.47.0: CRUD-style consolidation of get_project_readme and update_project_readme. Actions: - get: Read project README/notes (markdown format) - update: Write project README/notes Project documentation typically includes: - IP addressing schemes and VLANs - Node credentials (usernames, password vault keys) - Architecture diagrams (text-based) - Configuration templates and snippets - Troubleshooting notes and runbooks Returns: JSON with project_id and markdown content or success confirmation Examples: # Get README >>> project_docs(action="get") >>> project_docs(action="get", project_id="a920c77d-6e9b-41b8-9311-b4b866a2fbb0") |
| export_topology_diagramA | Export topology diagram to SVG/PNG files on disk. For agents: use diagrams://{project_id}/topology resource for direct access without saving files. |
| drawingA | Manage drawings (CRUD operations) v0.47.0: CRUD-style consolidation of create_drawing, update_drawing, delete_drawing, and create_drawings_batch. Actions: - list: List all drawings in a project - create: Create new drawing (rectangle, ellipse, line, text) - update: Update existing drawing properties - delete: Delete drawing (WARNING: destructive, cannot be undone) - batch: Create multiple drawings with two-phase validation Returns: JSON with drawing info or batch operation results Examples: # List drawings >>> drawing(action="list", project_id="abc-123") >>> drawing(action="list", project_id="abc-123", format="json") |
| sshA | Execute SSH operations (BATCH-ONLY) v0.47.0: Batch-only SSH tool. Individual SSH tools removed (aggressive consolidation). v0.28.0: Local execution support with node_name="@" Local Execution Support:
SSH Proxy Services (v0.3.0):
Two-phase execution prevents partial failures:
Supported operation types:
Args: operations: List of operation dicts, each with: - type (str): Operation type (required) - node_name (str): Node name (or "@" for local execution) (required) - Additional params specific to operation type Returns: JSON with execution results including completed/failed indices Examples: # Configure session + run commands: >>> ssh(operations=[ ... {"type": "configure", "node_name": "R1", "device_dict": { ... "device_type": "cisco_ios", "host": "10.1.0.1", ... "username": "admin", "password": "cisco123" ... }}, ... {"type": "command", "node_name": "R1", "command": "show version"}, ... {"type": "command", "node_name": "R1", "command": "show ip route"} ... ]) |
| tftpA | Manage TFTP server files (CRUD-style) v0.3.0: TFTP server integration for device firmware/config file serving TFTP server runs on SSH proxy (port 69/udp) with root directory /opt/gns3-ssh-proxy/tftp. Provides read-write access for devices to upload/download files. Actions: - list: List all files in TFTP root directory - upload: Upload file to TFTP server (requires filename and content) - download: Download file from TFTP server (requires filename) - delete: Delete file from TFTP server (requires filename) - status: Check TFTP server status File Content Handling: - Upload: Provide raw bytes in content parameter (base64 encoded automatically) - Download: Returns file content as base64 encoded string Returns: JSON response with success status, action, and results Examples: # List TFTP files >>> tftp(action="list") { "success": true, "action": "list", "files": [ {"filename": "config.txt", "size": 1024, "modified": "2025-01-15 10:30:00"}, {"filename": "firmware.bin", "size": 5242880, "modified": "2025-01-14 09:15:00"} ] } |
| http_clientA | HTTP/HTTPS client for lab device web interfaces (CRUD-style) v0.3.0: HTTP client integration for accessing device APIs and web UIs Reverse HTTP/HTTPS proxy available at http://proxy:8023/http-proxy/:/ for external device web UI access without SSH tunnel. Actions: - get: Send HTTP GET request to device and return response - status: Check if device web interface is reachable (HEAD request) SSL Certificate Handling: - verify_ssl=False (default): Ignore self-signed certificates - verify_ssl=True: Verify SSL certificates (may fail for lab devices) Reverse Proxy Alternative: Instead of using this tool, you can also access device web UIs through the reverse proxy at http://proxy:8023/http-proxy/:/ Returns: JSON response with success status, action, and results Examples: # Get device web interface >>> http_client(action="get", url="http://10.1.1.1") { "success": true, "action": "get", "status_code": 200, "content": "...", "headers": {"content-type": "text/html", ...} } |
| query_resourceC | Universal resource query tool - access any GNS3 MCP resource. See tool implementation docstring for comprehensive URI pattern documentation. |
| search_toolsA | Discover GNS3 MCP tools (v0.47.0 - Tool Discovery) Search and filter available tools by category, capability, or resource URI. Returns tool metadata including description, actions, and applicable resources. Categories:
Capabilities:
Resource Mapping:
Returns: JSON with matching tools and their metadata Examples: # Find all CRUD tools >>> search_tools(capability="CRUD") |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| SSH Setup Workflow | Device-specific SSH configuration for 6 device types with multi-proxy support |
| Topology Discovery Workflow | Discover nodes, links, templates, drawings using resources - includes visual diagram guidance for agents |
| Troubleshooting Workflow | OSI model-based troubleshooting with README checks, diagnostic tools, log collection |
| Lab Setup Workflow | Create complete topologies (star/mesh/linear/ring/ospf/bgp) with nodes, links, IPs, and README documentation |
| Node Setup Workflow | End-to-end node setup: create, configure IP, document in README, establish SSH, connect to network |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Projects | List all GNS3 projects with their statuses and IDs |
| Templates | List all available GNS3 device templates (routers, switches, Docker containers, VMs) |
| Console sessions | List all console sessions (optionally filtered by ?project_id=xxx query parameter) |
| SSH sessions | List all SSH sessions (optionally filtered by ?project_id=xxx query parameter) |
| Main proxy status | Health status and version of the main SSH proxy on GNS3 host (default proxy for ssh_configure) |
| Lab proxy registry | All discovered SSH proxy containers in GNS3 lab projects - use proxy_id for routing through isolated networks |
| All proxy sessions | Aggregated list of ALL active SSH sessions from main proxy and lab proxies - global lab infrastructure view |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ChistokhinSV/gns3-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server