{"name":"io.github.den-indance/network-diagram-mcp","slug":"den-indance-network-diagram-mcp","title":null,"description":"Network topology editor — Claude builds diagrams via MCP. nmap/CSV import, one-click SSH.","url":"https://mcp.market/server/den-indance-network-diagram-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":21,"stars":3,"forks":0,"downloads_week":76,"last_push_at":"2026-05-25T08:27:00.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/den-indance/network-diagram-mcp","website":null,"version":"1.0.7","remotes":[],"packages":[{"registryType":"npm","identifier":"@den.dance/network-diagram-mcp","version":"1.0.7","transport":{"type":"stdio"},"environmentVariables":[{"description":"Local WebSocket port the bridge listens on. Defaults to 47821. Must match the URL configured in NetMap's Settings → MCP Agent Bridge.","format":"string","name":"NETMAP_MCP_PORT"}]}],"tools":[{"name":"map_add_connection","description":"Add a manual connection between two nodes. Returns the new connection id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_add_node","description":"Add a new node to the map. Returns the new node id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_add_sticky","description":"Add a sticky note to the map. Returns the new sticky id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_arrange","description":"Auto-arrange all nodes in a grid or circle layout.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_bulk_add_connections","description":"Add multiple connections in a single call. Returns array of created ids.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_bulk_add_nodes","description":"Add 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_clear","description":"Remove all nodes, connections and stickies from the current sheet.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_create_sheet","description":"Create a new empty sheet and switch to it. Returns new sheet id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_delete_connection","description":"Delete a connection by id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_delete_node","description":"Delete a node and all its connections.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_delete_sheet","description":"Delete a sheet. Cannot delete the last remaining sheet.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_delete_sticky","description":"Delete a sticky note by id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_duplicate_node","description":"Clone a node with all its properties (ports, services, domains, etc.). Returns new node id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_export","description":"Export 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_export_sheet","description":"Export sheet data as JSON including auto-connections. Defaults to active sheet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_find_node","description":"Search 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_all_connections","description":"Return 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_nodes_by_type","description":"Return 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_notes","description":"Return the sheet-level notes text.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_selection","description":"Return currently selected node/sticky ids and connection id. Result shape: { nodeIds: string[], nodeId: string|null (= nodeIds[0], legacy single-id), connId: string|null }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_settings","description":"Return current app settings (sshMode, dblClickAction, perfMode, showGrid, showZoomSlider).","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_sheet_data","description":"Return nodes/connections/stickies/notes for a specific sheet (defaults to active sheet).","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_state","description":"Return 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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_get_view","description":"Return current canvas zoom level and pan offset.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_import_csv","description":"Import 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}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_import_nmap","description":"Parse 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}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_import_sheet","description":"Replace active sheet content with provided JSON data. Useful for loading a prepared topology in one call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_list_sheets","description":"List all sheets with their id, name, createdAt, updatedAt and which is active.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_lock_sheet","description":"Lock or unlock a sheet. A locked sheet rejects all MCP mutations and disables manual editing in the UI. Pass locked: false to unlock.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_move_node","description":"Move a node to new canvas coordinates without changing any other fields.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_move_sticky","description":"Move a sticky note to new canvas coordinates without changing its text or color.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_rename_sheet","description":"Rename a sheet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_search","description":"Full-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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_select","description":"Programmatically 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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_set_canvas_offset","description":"Pan canvas to an absolute pixel offset.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_set_notes","description":"Set the sheet-level notes text.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_set_zoom","description":"Set canvas zoom level (0.1–3.0).","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_suggest_layout","description":"Smart 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_switch_sheet","description":"Switch the active sheet. Saves current sheet state first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"map_update_connection","description":"Update label or color of an existing connection.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_update_node","description":"Update 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","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_update_settings","description":"Update one or more app settings.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_update_sticky","description":"Update text, color or size of a sticky note.","write_action":true,"price_micros":0,"input_schema":null},{"name":"map_zoom_to_fit","description":"Auto-fit all nodes into the viewport by adjusting zoom and pan.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-27T17:07:52.682Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T17:07:52.686Z","components":{"code":{"score":25,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":8,"max":15,"notes":["last push 125 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@den.dance/network-diagram-mcp","version":"1.0.7","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-05-22T03:49:13.538Z","repositoryUrl":"git+https://github.com/den-indance/network-diagram-mcp.git","weeklyDownloads":76}],"repo":{"found":true,"owner":"den-indance","repo":"network-diagram-mcp","archived":false,"pushedAt":"2026-05-25T08:27:00Z","stars":3,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/174848523?v=4","ownerCreatedAt":"2024-07-06T03:13:53Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":3,"forks":0,"downloadsWeek":76,"license":"MIT","lastPushAt":"2026-05-25T08:27:00.000Z","score":21}}}},"grade_history":[],"reviews":[]}