Skip to content

Nodes

Create a new node in the knowledge graph. For every non-organization type, the call atomically creates both the node and its belongs_to -> organization edge in a single transaction.

ParameterTypeRequiredDescription
typeenumyesOne of: organization, project, process, area, principle. Strictly enforced
namestringyesHuman-readable name
organization_idstringyes for non-org typesULID of an existing organization node. The new node is atomically linked to it via belongs_to. Ignored when type='organization'
descriptionstringnoWhat this node represents
metaobjectnoType-specific JSON data
statusenumnoactive (default), completed, archived
visibilityenumnoteam (default), private

Enforcement:

  • Node types: strictly enforced at the MCP tool layer (Zod enum) and at the database layer (SQL CHECK constraint on nodes.type). There is no way to create a node with a type outside the canonical five POPP entities.
  • Organization invariant: every non-organization node belongs to exactly one organization. organization_id is validated before the write (must exist and have type='organization'). The node and its belongs_to edge are inserted in one atomic batch, so the invariant holds from the moment the node exists.

Returns: { id, type, name, status, belongs_to?, edge_id? }belongs_to and edge_id are included for non-organization nodes.

Update an existing node. Only provided fields are changed.

ParameterTypeRequiredDescription
node_idstringyesNode ID (ULID)
namestringnoNew name
descriptionstringnoNew description
statusenumnoNew status
metaobjectnoNew metadata

Returns: { id, updated: [field names] }

List nodes with optional filtering.

ParameterTypeRequiredDescription
typeenumnoFilter by node type (one of the canonical five)
statusenumnoFilter by status

Returns: Array of { id, type, name, status, description }

Get a single node with full details: edges, files, events, and local mirror path.

ParameterTypeRequiredDescription
node_idstringnoNode ID (ULID)
namestringnoNode name (case-insensitive)

At least one of node_id or name must be provided.

Returns: Full node object including:

  • Core fields (id, type, name, description, meta, status, visibility, timestamps)
  • edges — direct edges in both directions with peer details
  • files — attached files with paths and metadata
  • events — recent events (up to 50, newest first)
  • local_mirror — local workspace path if registered