Network Diagram Mcp

io.github.den-indance由 GitHub 帳號 den-indance 發布v1.0.7更新於 Oct 27, 2026

Network topology editor — Claude builds diagrams via MCP. nmap/CSV import, one-click SSH.

發布方自己的服務:Diagram

概覽

AI 產生的概覽

本機橋接服務,讓 AI 助理在 NetMap 瀏覽器應用中建立與編輯網路拓撲圖,並支援 nmap 與 CSV 匯入。

可以做什麼
  • 讀取與修改地圖狀態:節點、連線、便條、工作表備註與應用程式設定
  • 跨節點、連接埠、便條與連線標籤搜尋,或依類型列出節點
  • 新增、重新命名、切換與刪除工作表,並可鎖定工作表禁止修改
  • 以格狀、圓形、力導向或叢集方式自動排列節點,並控制縮放與平移
  • 匯入 nmap XML 或 CSV 清單,或以 JSON 取代工作表內容
  • 將工作表匯出為 JSON、PNG 或 PDF
適用情境
適合在 NetMap 中維護網路拓撲圖,並希望助理依掃描結果或資產表格草擬、調整與補充說明,而不必手動拖曳節點時使用。
執行需求
透過 npx 在本機執行(需 Node.js)。需要開啟 map.den.dance 的 NetMap 瀏覽器分頁並啟用 WebSocket 橋接,否則工具呼叫會逾時。選用環境變數 NETMAP_MCP_PORT(預設 47821)須與 NetMap 設定中的連接埠一致。無需登入或 API 金鑰。
安裝前請注意
多數工具會寫入地圖:新增、修改、刪除節點、連線與便條,清空地圖,刪除工作表,以及以匯入資料取代工作表內容。map_clear、map_delete_sheet 等破壞性操作需傳 confirm: true。地圖資料存於瀏覽器 localStorage,PNG/PDF 匯出回傳 base64,需由助理自行儲存。此套件也可註冊 ssh、postgres、redis 連結的系統層處理程式,並執行具權杖驗證 exec 端點的本機常駐程式。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Network Diagram Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

@den.dance/network-diagram-mcp

[npm] [smithery badge]

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/

[NetMap workspace]

What makes it different

  • One-click ops dashboard. Click any web port (80 / 443 / 8080 / …) on a node card to open the 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.
  • AI agents edit the map. 44 MCP tools — your Claude / Cursor / Claude Desktop session can build a diagram for you, search across nodes / ports / notes, run smart auto-layouts, export PNG / PDF — all by talking to the open browser tab.
  • nmap -oX import. Run a network scan, hand the XML to the agent, get a map with nodes auto-typed from OS fingerprint + port profile (router / switch / firewall / server / printer / …).
  • CSV inventory import. Drop in your asset spreadsheet — auto-detects columns (name / ip / type / ports / notes; aliases like hostname / description accepted).
  • Operator-grade node cards. Per-node: open ports with service names, Docker services, DNS domains, free-form notes. All searchable cross-entity via the agent.
  • 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, no cloud. Export JSON / PNG / PDF.

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 claude_desktop_config.json:

json
{  "mcpServers": {    "netmap": {      "command": "npx",      "args": ["@den.dance/network-diagram-mcp"]    }  }}

Claude Code

bash
claude mcp add netmap -- npx @den.dance/network-diagram-mcp

With a custom port:

bash
claude mcp add netmap -e NETMAP_MCP_PORT=12345 -- npx @den.dance/network-diagram-mcp

Then 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:

bash
claude mcp list

You should see netmap in the list.

Environment variables

VarDefaultDescription
NETMAP_MCP_PORT47821Local WebSocket port the bridge listens on. Must match the URL configured in NetMap's Settings → Integrations → AI Agent (MCP).

URL Protocol Handlers + in-app client picker (v1.1+, picker since v1.2)

This package also ships an OS-level agent that registers handlers for ssh://, postgres://, and redis:// URLs. Click any such link in a browser or terminal and the agent spawns your installed client (psql / redis-cli / iTerm / Windows Terminal / kitty / DBeaver / TablePlus / RedisInsight / …).

Inside NetMap (v1.2+): when the serve daemon is running, clicking an SSH / Postgres / Redis port button on a node card opens an in-app picker of installed clients on your machine and launches the one you pick — every click re-detects, so newly installed clients show up immediately. Without the daemon, port-clicks fall back to the OS default URL handler.

Install once per machine:

bash
# Linux:   ~/.local/share/applications/netmap-<scheme>-handler.desktop + xdg-mime# macOS:   ~/Library/Application Support/NetMap/handlers/NetMap<Scheme>Handler.app + lsregister# Windows: HKCU\Software\Classes\<scheme>  (per-user, no admin)npx @den.dance/network-diagram-mcp install --all

Other CLI subcommands:

bash
npx @den.dance/network-diagram-mcp install ssh        # single schemenpx @den.dance/network-diagram-mcp uninstall postgres # remove registrationnpx @den.dance/network-diagram-mcp list               # what's registered (JSON)npx @den.dance/network-diagram-mcp detect ssh         # which clients are availablenpx @den.dance/network-diagram-mcp serve              # daemon: WS + HTTP on :47821

Click handling is daemon-less — OS routes the link to a short-lived bin/handler.js process which parses the URL, picks the first installed client (priority order: CLI → popular GUI → cross-platform power), and spawns it. The optional serve daemon adds HTTP endpoints (/status, /detect, /exec) for browser-side integration with a Bearer-token-gated /exec.

npx @den.dance/network-diagram-mcp with no args still runs the original stdio MCP server (back-compat — Smithery / Claude Desktop probes are unaffected).

Top-5 clients per scheme (priority order, first-installed wins):

SchemeClients
sshiTerm2 → Windows Terminal → GNOME Terminal → Terminal.app → kitty
postgrespsql → TablePlus → DBeaver → Beekeeper Studio → pgAdmin 4
redisredis-cli → RedisInsight → Another Redis DM → Medis → RDM (legacy)

postgresql:// aliases to postgres; rediss:// is preserved and triggers redis-cli --tls.

Available tools

State & layout

ToolDescription
map_get_stateReturn all nodes, connections, stickies, notes
map_clearClear the entire map (requires confirm: true)
map_arrangeNaive auto-arrange (grid or circle layout — ignores connections)
map_suggest_layoutSmart auto-layout: force (force-directed, deterministic via seed), cluster-by-type (lanes per type), or cluster-by-connection (BFS components into zones)

Nodes

ToolDescription
map_add_nodeAdd a node (type, name, ip, x, y)
map_update_nodeUpdate node fields by id
map_delete_nodeDelete a node and its connections
map_move_nodeMove node to new coordinates

Connections

ToolDescription
map_add_connectionAdd connection (from_id, to_id, label?, color?)
map_update_connectionUpdate label or color of a connection
map_delete_connectionDelete a connection by id

Sticky notes

ToolDescription
map_add_stickyAdd a sticky note (text, x?, y?, color?)
map_update_stickyUpdate text, color, x, y, w, h
map_delete_stickyDelete a sticky note by id
map_move_stickyMove sticky to new coordinates

Sheets (multi-sheet)

ToolDescription
map_list_sheetsList all sheets with metadata and active sheet id
map_get_sheet_dataGet nodes / connections / stickies for a sheet (default: active)
map_create_sheetCreate a new empty sheet and switch to it
map_switch_sheetSwitch active sheet by id
map_rename_sheetRename a sheet
map_delete_sheetDelete a sheet (requires confirm: true, can't delete last)

View / canvas

ToolDescription
map_set_zoomSet zoom level (0.1–3.0)
map_set_canvas_offsetPan canvas to absolute pixel position
map_zoom_to_fitAuto-fit all nodes into viewport

Lock / protection

ToolDescription
map_lock_sheetLock (locked: true) or unlock (locked: false) a sheet. Locked sheets reject all MCP mutations and disable manual editing in the UI.

Notes & settings

ToolDescription
map_get_notesGet sheet-level notes text
map_set_notesSet sheet-level notes text
map_get_settingsGet app settings (sshMode, showGrid, etc.)
map_update_settingsUpdate app settings

Search

ToolDescription
map_find_nodeStructured node-only filter by name / ip / type / text. Returns stripped {id, name, type, ip, x, y}.
map_searchFull-text cross-entity search. Looks across nodes (name / ip / notes), stickies (text), connection labels, and ports (port number + service name). Optional types: ["nodes","stickies","connections","ports"] narrows the scope.
map_get_nodes_by_typeReturn every node of a single type with FULL field data (ports, dockerServices, domains, ips, notes, parentServer, …). Use this when you need the complete objects, not the stripped projection from map_find_node.

Example — find everything matching postgres anywhere in the map:

jsonc
// → call{ "q": "postgres" }
// → result{  "nodes":       [{ "id": "n1", "name": "db-primary", "type": "server", "ip": "10.0.0.5" }],  "stickies":    [{ "id": "s2", "text": "TODO: upgrade postgres 15 → 16" }],  "connections": [{ "id": "c4", "label": "postgres replication", "from": "n1", "to": "n2" }],  "ports":       [{ "nodeId": "n1", "nodeName": "db-primary", "port": 5432, "protocol": "tcp", "service": "postgresql" }],  "total": 4}

map_search and map_get_nodes_by_type are read-only — they work on locked sheets.

Import

ToolDescription
map_import_sheetReplace active-sheet content with a provided {nodes, connections, stickies?, notes?} JSON.
map_import_nmapParse nmap -oX output (or a pre-parsed hosts[] array) and create nodes with their open ports. Auto-infers node type from OS fingerprint + port profile (router / switch / firewall / server / printer / …). Nodes auto-arranged in a square-root grid.
map_import_csvImport nodes from CSV. Auto-detects columns from the header row (name / ip / type / ports / notes — aliases like hostname / description accepted). Ports field accepts 22/tcp,80/tcp or bare numbers. Nodes laid out in a 6-column grid.

Example — turn a 2-host nmap scan into a map in one call:

jsonc
// → call{  "xml": "<?xml version=\"1.0\"?>\n<nmaprun>\n  <host>\n    <address addr=\"10.0.0.1\" addrtype=\"ipv4\"/>\n    <hostnames><hostname name=\"web.local\" type=\"user\"/></hostnames>\n    <ports>\n      <port protocol=\"tcp\" portid=\"22\"><state state=\"open\"/><service name=\"ssh\"/></port>\n      <port protocol=\"tcp\" portid=\"80\"><state state=\"open\"/><service name=\"http\"/></port>\n    </ports>\n  </host>\n  <host>\n    <address addr=\"10.0.0.2\" addrtype=\"ipv4\"/>\n    <os><osmatch name=\"Cisco IOS router\" accuracy=\"98\"/></os>\n  </host>\n</nmaprun>"}
// → result{ "count": 2, "ids": ["…", "…"] }

Provide {"hosts": [...]} instead of xml when you already have parsed host data — hosts takes priority when both are given.

Example — turn a CSV inventory snippet into a map:

jsonc
// → call{  "csv": "name,ip,type,ports,notes\ndb-primary,10.0.0.5,server,\"22/tcp,5432/tcp\",Postgres 15\nrouter-main,10.0.0.1,router,22/tcp,Edge router"}
// → result{ "count": 2, "ids": ["…", "…"] }

For non-standard headers, pass an explicit columns mapping (-1 means "absent"):

jsonc
{  "csv":     "Host,Address\nfoo,10.0.0.99",  "columns": { "name": 0, "ip": 1, "type": -1, "ports": -1, "notes": -1 }}

map_import_nmap and map_import_csv are mutations — blocked on locked sheets.

Layout

map_suggest_layout repositions every node according to a chosen algorithm; result shape: { ok: true, algorithm, changed: <node count> }.

jsonc
// Force-directed (organic; reproducible with seed){ "algorithm": "force", "iterations": 200, "seed": 42 }
// Group nodes into horizontal lanes by type{ "algorithm": "cluster-by-type" }
// Place each connected component in its own x-zone{ "algorithm": "cluster-by-connection" }

Force-directed is O(n²) per iteration — fine up to a few hundred nodes; bring iterations down for larger scenes. map_suggest_layout is a mutation — blocked on locked sheets.

Export (JSON / PNG / PDF)

ToolDescription
map_export_sheetExport a single sheet as a JSON object (auto-connections included). Legacy entry — still works.
map_exportMulti-format export: json (object), png and pdf (base64-encoded blob + mimeType).
jsonc
// JSON{ "format": "json" }// → { format: "json", data: { nodes, connections, stickies, notes, auto_connections } }
// PNG (max 30 s; agent must persist the base64 to a file){ "format": "png" }// → { format: "png", filename: "netmap-<sheetId>.png",//      base64: "iVBORw0KGgoAAAANSUhEUg…",//      mimeType: "image/png" }
// PDF{ "format": "pdf" }// → { format: "pdf", filename: "netmap-<sheetId>.pdf",//      base64: "JVBERi0xLjQK…",//      mimeType: "application/pdf" }

PNG / PDF capture renders the live workspace via html-to-image + jsPDF, so the MCP server raises the per-command timeout to 30 s for this tool. map_export is read-only — works on locked sheets.

Connection status indicator

A badge appears next to the NetMap version in the toolbar (click it to open Settings):

BadgeMeaning
🟢 MCP onlineConnected — agent can edit the map
🟡 MCPConnecting to server
🟠 MCP retry N/10Retrying, up to 10 attempts × 30 sec
🔴 MCP errorGave up — start the server, then toggle off / on to retry
(no badge)Disabled in settings

Detailed status (with URL and hints) is shown inside Settings → Integrations → AI Agent (MCP).

Running from source (for contributors)

bash
git clone https://github.com/den-indance/network-diagram-mcp.gitcd network-diagram-mcpnpm installnode index.js

Override port: NETMAP_MCP_PORT=12345 node index.js.

Register the local build in Claude Code instead of npm:

bash
claude mcp add netmap-dev -- node /absolute/path/to/network-diagram-mcp/index.js

License

MIT — see LICENSE.

來源:README.md,提交 f9a3503

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.7最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Diagram 整合