Network Diagram MCP server
Network topology editor — Claude builds diagrams via MCP. nmap/CSV import, one-click SSH.
3 stars76 downloads/wk
Reviews
Write oneNobody has reviewed Network Diagram yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Network Diagram tools (44, 10 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
map_add_connectionAdd a manual connection between two nodes. Returns the new connection id.
map_add_nodeAdd a new node to the map. Returns the new node id.
map_add_stickyAdd a sticky note to the map. Returns the new sticky id.
map_arrangeAuto-arrange all nodes in a grid or circle layout.
map_bulk_add_connectionsAdd multiple connections in a single call. Returns array of created ids.
map_bulk_add_nodesAdd multiple nodes in a single call. Each node accepts the same fields as map_add_node plus all type-specific fields (ports, dockerServices, domains, parentServer, etc.). Returns array of created ids.
map_clearwrite actionRemove all nodes, connections and stickies from the current sheet.
map_create_sheetwrite actionCreate a new empty sheet and switch to it. Returns new sheet id.
map_delete_connectionwrite actionDelete a connection by id.
map_delete_nodewrite actionDelete a node and all its connections.
map_delete_sheetwrite actionDelete a sheet. Cannot delete the last remaining sheet.
map_delete_stickywrite actionDelete a sticky note by id.
map_duplicate_nodeClone a node with all its properties (ports, services, domains, etc.). Returns new node id.
map_exportExport current or specified sheet as JSON / PNG / PDF. PNG and PDF return base64-encoded blobs with mimeType — the client decodes and saves to a file. Server raises the response timeout to 30s for PNG/PDF since large maps can take several seconds to render.
map_export_sheetExport sheet data as JSON including auto-connections. Defaults to active sheet.
map_find_nodeSearch nodes by name, IP, type, or free-text query. Returns id, name, type, ip, x, y for each match. Use this to locate a node before updating it.
map_get_all_connectionsReturn all connections including auto-generated ones (DNS→server, project→server, service→node). Auto connections have auto:true flag. Use this instead of map_get_state.connections when you need the full topology picture.
map_get_nodes_by_typeReturn all nodes of a given type with FULL field data (ports, dockerServices, domains, ips, notes, parentServer, etc.). For stripped projection or multi-criteria filtering use map_find_node instead.
map_get_notesReturn the sheet-level notes text.
map_get_selectionReturn currently selected node/sticky ids and connection id. Result shape: { nodeIds: string[], nodeId: string|null (= nodeIds[0], legacy single-id), connId: string|null }.
map_get_settingsReturn current app settings (sshMode, dblClickAction, perfMode, showGrid, showZoomSlider).
map_get_sheet_dataReturn nodes/connections/stickies/notes for a specific sheet (defaults to active sheet).
map_get_stateReturn the current map state: all nodes, manual connections, stickies and notes. NOTE: only manual connections are included — use map_get_all_connections to also get auto-generated connections (DNS→server, project→server, service→node).
map_get_viewReturn current canvas zoom level and pan offset.
map_import_csvImport nodes from CSV. Auto-detects columns from the header row (name/ip/type/ports/notes — case-insensitive, aliases like hostname/description/host_ip accepted). Ports field accepts 'port/protocol,port/protocol' (e.g. '22/tcp,80/tcp') or bare port numbers (default tcp). Nodes laid out in a 6-column grid. Returns {count, ids}.
map_import_nmapParse nmap scan output (XML from `nmap -oX`) and create nodes with their open ports. Auto-infers node type from OS fingerprint + port profile (router/switch/firewall/server/printer/etc.). Provide either raw `xml` OR pre-parsed `hosts[]` — `hosts` takes priority when both are given. Nodes are auto-arranged in a grid. Returns {count, ids}.
map_import_sheetReplace active sheet content with provided JSON data. Useful for loading a prepared topology in one call.
map_list_sheetsList all sheets with their id, name, createdAt, updatedAt and which is active.
map_lock_sheetLock or unlock a sheet. A locked sheet rejects all MCP mutations and disables manual editing in the UI. Pass locked: false to unlock.
map_move_nodeMove a node to new canvas coordinates without changing any other fields.
map_move_stickyMove a sticky note to new canvas coordinates without changing its text or color.
map_rename_sheetRename a sheet.
map_searchFull-text search across nodes (name/ip/notes), stickies, connection labels, and ports (port-number/service). Returns categorized hits with a total count. Use map_find_node for structured node-only filtering.
map_selectProgrammatically select node(s)/sticky(s) and/or a connection. Pass node_ids (array) for multi-select; node_id (string) is legacy single-select. Empty array or null deselects. Connection selection remains single (multi-select connections out of scope v1).
map_set_canvas_offsetPan canvas to an absolute pixel offset.
map_set_notesSet the sheet-level notes text.
map_set_zoomSet canvas zoom level (0.1–3.0).
map_suggest_layoutSmart auto-layout: force-directed (organic, deterministic with seed), cluster-by-type (horizontal lanes per node type), or cluster-by-connection (BFS components → separate zones). Different from map_arrange (naive grid/circle). Mutates node positions in-place.
map_switch_sheetSwitch the active sheet. Saves current sheet state first.
map_update_connectionwrite actionUpdate label or color of an existing connection.
map_update_nodewrite actionUpdate fields of an existing node by id. FIELD SCHEMA BY NODE TYPE All types: name, ip, x, y, w, h, notes ips: [{address, label}] — extra IP addresses server / pc / nas / ap / camera / printer / router / switch / firewall / other: ports: [{port, protocol("tcp"|"udp"|"icmp"), service, url, bindIp}] dockerServices: [{name, image, hostPort, containerPort, protocol("tcp"|"udp"), url}] project: parentS
map_update_settingswrite actionUpdate one or more app settings.
map_update_stickywrite actionUpdate text, color or size of a sticky note.
map_zoom_to_fitAuto-fit all nodes into the viewport by adjusting zoom and pan.
Public scan report
scanner v0.1.9 · 2026-09-27 · same rubric, same numbers if you re-run it
- Code scan5 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 125 days ago8/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How Network Diagram compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 82/100
- higher than 63% of 48,273 servers
- Tools
- 44
- the typical server has 7
- Tools that change things
- 23%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 3
- more than 80% of 28,534 servers
- Downloads a week
- 76
- more than 58% of 11,915 servers with a package
What its tools let an agent do: 34 read · 10 change
Install Network Diagram in Claude Code, Cursor or VS Code
Runs npx -y @den.dance/network-diagram-mcp on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add network-diagram-mcp -- npx -y @den.dance/network-diagram-mcp
What the publisher says
From the Network Diagram repository's README, as published. We do not edit it. Read it on GitHub
@den.dance/network-diagram-mcp
Visual network topology editor with AI agent integration via the Model Context Protocol.
Open-source successor to netViz (netViz Inc., 1990 → CA Technologies → discontinued 2012).
Try it live → https://map.den.dance/
What makes it different
service in a new tab. Click an SSH / Postgres / Redis port → in-app picker offers your installed clients (iTerm / Windows Terminal / psql / DBeaver / redis-cli / RDM / …) and launches the one you choose. The picker re-detects every click — newly installed clients show up immediately, never a silent locked-in default.
- One-click ops dashboard. Click any web port (80 / 443 / 8080 / …) on a node card to open the
a diagram for you, search across nodes / ports / notes, run smart auto-layouts, export PNG / PDF — all by talking to the open browser tab.
- AI agents edit the map. 44 MCP tools — your Claude / Cursor / Claude Desktop session can build
auto-typed from OS fingerprint + port profile (router / switch / firewall / server / printer / …).
- nmap -oX import. Run a network scan, hand the XML to the agent, get a map with nodes
(name / ip / type / ports / notes; aliases like hostname / description accepted).
- CSV inventory import. Drop in your asset spreadsheet — auto-detects columns
free-form notes. All searchable cross-entity via the agent.
- Operator-grade node cards. Per-node: open ports with service names, Docker services, DNS domains,
no cloud. Export JSON / PNG / PDF.
- Smart auto-layout. Force-directed (deterministic via seed), cluster-by-type, cluster-by-connection.
- Multi-sheet, local-first. Multiple maps in one workspace, everything in localStorage. No login,
How it works
This package is a stdio → WebSocket bridge. It runs locally as an MCP server; the live NetMap browser tab connects to it over WebSocket. The agent talks to the bridge over MCP; the bridge forwards calls to the browser, which updates React state in real time.
LLM agent (Claude Code / Claude Desktop / Cursor)
│ MCP protocol (stdio)
▼
@den.dance/network-diagram-mcp ← this package, runs locally
│ WebSocket ws://localhost:47821
▼
NetMap in browser (https://map.den.dance/) ← React state updates live⚠️ Requires an open NetMap browser tab. Open https://map.den.dance/ — the MCP bridge is
enabled by default (v1.2+), so the connection comes up as soon as the tab is open. Without an
open tab the bridge has no peer and every tool call will time out. (To opt out:
Settings → ⚙ → Integrations → AI Agent (MCP) → Enable WebSocket connection.)
Install
Claude Desktop
Add to claudedesktopconfig.json:
{
"mcpServers": {
"netmap": {
"command": "npx",
"args": ["@den.dance/network-diagram-mcp"]
}
}
}Claude Code
claude mcp add netmap -- npx @den.dance/network-diagram-mcpWith a custom port:
claude mcp add netmap -e NETMAP_MCP_PORT=12345 -- npx @den.dance/network-diagram-mcpThen open https://map.den.dance/ — the bridge is enabled by default (v1.2+). Settings → Integrations → AI Agent (MCP) if you need to inspect or toggle the connection. The toolbar will show a 🟢 MCP online badge when the browser and server are connected.
Verify the agent side:
claude mcp listYou should see netmap in the list.
Environment variables
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Network Diagram: common questions
- Is Network Diagram MCP server safe?
- Mostly: it is graded B (82/100). Read the Network Diagram safety report
- How do I install Network Diagram?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Network Diagram need an API key?
- No secret keys are declared. It reads 1 setting from the environment.
- Is Network Diagram maintained?
- The last commit was 161 days ago (2026-05-25). The latest release is v1.0.7.
- How does Network Diagram compare with other MCP servers?
- safety score 82/100 (higher than 63% of 48,273 servers); tools 44 (the typical server has 7); tools that change things 23% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.