nodl-collab-mcp
v1.0.28
Published
Public MCP server for Nodl collaboration via public endpoints and user-provided tokens.
Downloads
2,039
Maintainers
Readme
Nodl MCP
MCP server to let AI clients interact with Nodl collaboration through public endpoints.
This server does not contain app secrets. It only works with user-provided short-lived collaboration tokens.
What this MCP does
- Connects to a Nodl collaboration project room.
- Exposes graph mutation tools.
- Respects backend authorization (role + scopes).
Available tools:
join_projectlist_capabilitieslist_nodeslist_current_nodesdescribe_current_nodesadd_noderemove_nodemove_nodeedit_node_propertiesdescribe_node_propertiesconnect_nodesdisconnect_nodesmove_cursor
Install in your MCP client (JSON config)
Use npx so users do not need to clone anything.
Private registry and scoped package names are supported (for example @your-scope/nodl-collab-mcp).
{
"mcpServers": {
"nodl": {
"command": "npx",
"args": ["-y", "nodl-collab-mcp"]
}
}
}Notes:
- Restart your MCP client after editing config.
- No token is stored in the config.
First usage flow
- Generate an MCP agent token in Nodl app (
Share -> Collaborate -> MCP token). - In your AI client, call
join_project:token: short-lived tokenendpoint(optional): set to your production backend collaboration namespace (example:wss://api.nodl.dev/collaboration)
- Call
list_capabilitiesto confirm role/scopes/expiry. - Use dedicated tools for common graph operations (
add_node,move_node,connect_nodes, ...).
Endpoint override with .env (production)
Create a local .env file (not committed) at package root:
NODL_COLLAB_ENDPOINT=wss://api.nodl.dev/collaborationThis override is automatically loaded on startup (dotenv/config).
Set this endpoint to the unified backend Socket.IO namespace URL.
Tool contracts
join_project
Input:
{
"token": "<short-lived-token>",
"endpoint": "wss://api.nodl.dev/collaboration",
"displayName": "MCP - Claude"
}Output:
endpointUsed(effective Socket.IO endpoint used by MCP)session(projectId,mode,role,snapshotSummary)- decoded token metadata (
scopes,exp) - cursor identity metadata (
actorId,displayName) used bymove_cursor - full snapshot omitted by default (set
includeSnapshot: trueto include it) - fails fast if token is expired or token has no
projectIdclaim - ACK handling supports both Socket.IO callback shapes to avoid false
join timeout or rejectionerrors.
list_capabilities
Input:
{
"token": "<short-lived-token>"
}Output:
- role
- scopes
- expiration status
list_nodes
Input:
{}Output:
- local node catalog from
assets/node-metadata.json(type, category, ports, properties)
list_current_nodes
Input:
{}Output:
- lightweight session-scoped summary with:
initializedsessionScoped: truelastUpdatedAtcounts(nodes,connections)nodeIdsPreviewconnectionIdsPreview
Optional input:
includeFullState: trueto include fullnodesandconnectionspreviewLimitto tune preview size in summary mode (default 20, max 200)
describe_current_nodes
Input:
{
"nodeIds": ["noise-1", "edge-1"],
"includeRaw": false
}Output:
- targeted node diagnostics for only requested IDs:
nodeTypeand fallbacktype- available object
keys x/ypropertyKeys
- use this when
connect_nodescomplains about missingnodeType/typefields.
Semantics:
- this state is scoped to the active MCP process/session only,
- it starts empty on
join_project(no historical snapshot fetch), - it is updated on:
- successful local mutation ACK,
- incoming
collaboration:mutationevents from other actors.
Dedicated graph tools
add_node: validated wrapper overaddNoderemove_node: validated wrapper overdeleteNodemove_node: validated wrapper overmoveNodeedit_node_properties: validated wrapper overupdateNodePropertiesdescribe_node_properties: returns allowed property schema and current values for a node- Important: this tool returns runtime property
keyvalues (stable, non-translated) that should be used withedit_node_properties.
- Important: this tool returns runtime property
connect_nodes: validated wrapper overaddConnectiondisconnect_nodes: validated wrapper overdeleteConnectionmove_cursor: emits collaboration cursor updates
Type compatibility on connect_nodes
connect_nodes validates source output and target input compatibility against the local node catalog:
- it resolves the current node types from
list_current_nodesstate, - resolves port definitions from
list_nodescatalog, - rejects the call when output/input port types are incompatible.
Safe property editing flow
Before calling edit_node_properties, call describe_node_properties:
- resolve allowed property names for the exact node type,
- inspect expected value types (
number,boolean,select, etc.), - inspect allowed
selectoptions and numeric bounds, - inspect current value/mode to avoid invalid updates.
Security model
- Token is kept in memory only for the MCP process lifetime.
- Token is never persisted by this package.
- Token parsing errors are masked (no plaintext token emitted in errors).
- Backend is authoritative for access control.
- Expired/invalid token is rejected by backend.
Troubleshooting
All tool errors include an inline Mitigation: hint to guide next steps (token refresh, websocket mode mismatch, missing scopes, schema fixes, targeted node inspection, etc.).
Auth errors (ENEEDAUTH, E404 scope not found) during npm publish
This is CI/package publishing configuration, not MCP runtime usage.
- Runtime users only need:
npx nodl-collab-mcp- valid Nodl collaboration token
join_project fails
Check:
- token not expired
- endpoint is correct (
endpointargument has priority, thenNODL_COLLAB_ENDPOINT/COLLAB_SECURE_WS_URL) - role/scopes allow requested actions
Local development
npm install
npm run build
npm startWhen run directly (npx -y nodl-collab-mcp), the server stays waiting on stdio.
This is expected. Startup logs are printed to stderr.
Set NODL_MCP_SILENT=true to disable startup logs.
