nodus (sorenwacker/nodus) is an MCP server listed on the M8ven Trust Index. It scores 74 out of 100, grade C. It declares 60 tools. No publisher has claimed this listing.

C
Emerging
74/100

nodus

Knowledge graph on a canvas. Notes are Markdown files in Open Knowledge Format, with Typst math, PDF-to-graph import with citation verification, and storylines that read and export as documents. Local-first, no account.

Emerging. No concerning findings. Grades remain capped until the project builds reputation through adoption. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

sorenwacker

Source: github_repo_search

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
// tools this server exposes60 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

get_graph_summary

Get a compact summary of the graph: node count, edge count, node types, and most connected nodes. Use this first to understand the graph before fetching details.

list_nodes

List nodes in the current workspace. Returns compact node metadata (id, title, type). Use limit/offset for large graphs.

get_node

Get a specific node by ID, including its full content.

get_node_neighbors

Get a node and all its direct connections. Returns the node, its neighbors, and the edges between them. Best way to explore graph structure.

get_graph_structure

Get a compact adjacency list showing how nodes connect. Returns {nodeId: {title, connections: [neighborTitles]}}. Best for understanding overall topology.

search_nodes

Search nodes by title or content.

get_orphan_nodes

Find nodes with no connections. Useful for finding isolated content.

get_connected_components

Report how many separate groups the graph falls into, and which nodes are in each. Call this before claiming the graph is connected.

get_leaf_nodes

Find leaf nodes (nodes with no outgoing edges/children). These are endpoints in the graph.

get_root_nodes

Find root nodes (nodes with no incoming edges/parents). These are starting points in the graph.

get_hub_nodes

Find nodes with most connections. Useful for finding central concepts.

get_nodes_by_color

Find all nodes with a specific color.

get_edges

Get edges (connections) between nodes. Use limit/offset for large graphs, or filter by node_id.

list_workspaces

List all workspaces; the current one (open in the app) is marked.

set_workspace

Scope this connection to a workspace by id or name. All further reads and writes target that workspace, independent of what is open in the app - multiple connections can work different workspaces in parallel.

get_workspace

Show which workspace this connection is scoped to, if any.

create_node

Create a new node in the workspace.

update_node

Update an existing node.

resize_node

Resize a single node.

batch_resize_nodes

Resize multiple nodes at once. Useful for normalizing node sizes.

batch_move_nodes

Move multiple nodes at once. Positions are absolute canvas coordinates, not offsets from where a node is now.

batch_update_nodes

Update several nodes at once: title, content or position. Each entry names the node by id and carries only the fields to change.

get_duplicate_edges

List edges that connect the same pair of nodes more than once, grouped by pair. Reports only; removes nothing.

cleanup_duplicate_edges

Remove duplicate edges, keeping one edge per connected pair. Use get_duplicate_edges first to see what would go.

set_node_color

Set the color theme of a node.

batch_set_node_colors

Set colors for multiple nodes at once.

delete_node

Delete a node from the workspace.

create_edge

Create an edge (connection) between two nodes.

update_edge

Update an existing edge.

delete_edge

Delete an edge from the workspace.

batch_create_edges

Create multiple edges at once. Efficient for connecting many nodes.

batch_delete_edges

Delete multiple edges at once.

delete_edges_for_node

Delete all edges connected to a node. Useful for breaking up hub nodes before reorganizing.

arrange_radial

Arrange nodes in a circle around a center node. Great for creating category layouts.

list_frames

List all frames in the workspace. Frames are visual containers for grouping related nodes spatially on the canvas (e.g., by topic, project, or category).

get_frame

Get a specific frame by ID, including its position, size, and color.

create_frame

Create a frame to visually group nodes. Frames are rectangular containers that help organize the canvas spatially. Use them to create topic areas, project sections, or category groups.

update_frame

Update frame properties (title, position, size, or color).

delete_frame

Delete a frame. Nodes inside are not deleted, they just become unframed.

get_nodes_in_frame

Get all nodes assigned to a frame.

assign_node_to_frame

Assign a node to a frame and move it inside the frame bounds. The node will move with the frame when dragged.

remove_node_from_frame

Remove a node from its frame. The node stays in place but is no longer grouped.

batch_assign_nodes_to_frame

Assign multiple nodes to a frame at once. Nodes outside the frame are moved inside and stacked vertically.

batch_move_frames

Move multiple frames at once. Nodes assigned to each frame move with it.

batch_resize_frames

Resize multiple frames at once. Nodes are pulled inside if they would be outside.

fit_frame_to_contents

Resize a frame to fit all its assigned nodes with padding. Resolves overlaps with other frames.

fit_all_frames

Resize all frames to fit their contents and resolve overlaps.

check_frame_overlaps

Check if any frames overlap with each other. Returns pairs of overlapping frames.

resolve_frame_overlaps

Automatically resolve frame overlaps by pushing frames apart horizontally.

list_storylines

List all storylines. Storylines are ordered sequences of nodes that form a narrative path or reading order through the graph (e.g., argument flow, timeline, chapter order).

get_storyline

Get a storyline by ID, including its title, description, and color.

get_storyline_nodes

Get the ordered list of nodes in a storyline.

create_storyline

Create a storyline to define an ordered path through nodes. Use storylines for reading orders, argument progressions, timelines, or any linear narrative. Nodes are connected by edges automatically.

update_storyline

Update storyline properties (title, description, or color). Color changes apply to all edges in the storyline.

delete_storyline

Delete a storyline. Nodes are not deleted, but the storyline edges are removed.

add_node_to_storyline

Add a node to a storyline. By default, adds to the end. Use position to insert at a specific index. Edges are created automatically.

remove_node_from_storyline

Remove a node from a storyline. Adjacent nodes are reconnected automatically.

reorder_storyline_nodes

Reorder all nodes in a storyline. Provide the complete list in the desired order. Edges are recreated automatically.

get_viewport

Get the current canvas viewport position and zoom level.

focus_node

Focus the canvas on a specific node.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configNODUS_MCP_PORTWebSocket port (default: 9742)
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

60/60 tools missing one or more hints — get_graph_summary (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_nodes (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_node (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +57 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tests exist

No test files found

Add tests that exercise each declared tool.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 3 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Score](https://m8ven.ai/badge/mcp/sorenwacker/nodus)](https://m8ven.ai/mcp/sorenwacker/nodus)
Shows your grade and updates automatically. Prefer no grade? Append ?variant=verified to the badge URL.
commit: bcccef7398e7df7a05e9f9f965ff6d3a8723e6d1
code hash: a98eff602b5fb9715e789acf5f12a40c45288e7dbb77604681b40367434a58c6
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client