decisionnode/DecisionNode
OfficialThe DecisionNode server is a structured memory store for technical decisions, enabling AI agents and developers to semantically search, record, and manage project-specific or global conventions.
Search decisions (
search_decisions) — Query with natural language to find relevant decisions before making changes, ranked by semantic similarity.List decisions (
list_decisions) — Retrieve all recorded decisions for a project, optionally filtered by scope (UI, Backend, API, etc.).Get a specific decision (
get_decision) — Fetch full details of a decision by ID, including rationale and constraints.Add new decisions (
add_decision) — Capture technical choices with scope, rationale, and constraints; supports conflict detection and global decisions across all projects.Update decisions (
update_decision) — Modify text, rationale, or constraints as requirements evolve; can also deprecate or reactivate decisions.Delete decisions (
delete_decision) — Permanently remove a decision (prefer deprecation for outdated ones to preserve historical context).View activity history (
get_history) — Audit trail of recent changes, including which tool or client made each change.Get project status (
get_status) — Overview showing total decision count and last activity.List projects (
list_projects) — Discover all projects with decision stores, useful in monorepo or multi-project workspaces.
Not a markdown file — structured decisions with semantic search, exposed over MCP.
Install
npm install -g decisionnode
cd your-project
decide init # creates project store
decide setup # configure Gemini API key (free tier)
# Connect to Claude Code (run once)
claude mcp add decisionnode -s user decide-mcpWhat a decision looks like
{
"id": "backend-007",
"scope": "Backend",
"decision": "Skipped connection pooling for the embeddings DB — single writer, revisit if we add a sync daemon",
"status": "active",
"rationale": "Only one process writes at a time in the current architecture. Pooling added complexity with no measurable benefit. If we add a background sync process this will need to change.",
"constraints": [
"Do not add concurrent writers without revisiting this first"
],
"createdAt": "2024-11-14T09:22:00Z"
}Stored as JSON, embedded as a vector, searchable by meaning. Decisions are not exactly "Rules" that the AI should have in it's context window the entire time (those are better suited for CLAUDE.md or memory.md). Decisions are thought of to be more like "Memories" that the AI can pull in when it's actually relevant through semantic search.
How it works
A decision is made — via
decide addor the AI callsadd_decisionthrough MCPEmbedded as a vector — using Gemini's
gemini-embedding-001, stored locally invectors.jsonAI retrieves it later — calls
search_decisionsvia MCP, gets back relevant decisions ranked by cosine similarity
The retrieval is explicit — the AI calls search decisions tool via MCP passing a query and getting back the top N decisions ranked by cosine similarity. Nothing is pre-injected into the system prompt.
Two interfaces
CLI ( | MCP Server ( | |
For | You (and your AI) | Your AI (and you) |
How | Terminal commands | Structured JSON over MCP |
Does | Setup, add, search, edit, deprecate, export, import, config | Search, add, update, delete, list, history |
Both read and write to the same local store (~/.decisionnode/).
Quick reference
decide add # interactive add
decide add -s Backend -d "Skipped connection pooling for the embeddings DB — single writer, revisit if we add a sync daemon"
decide add --global # applies to all projects
decide search "connection pooling" # semantic search
decide list # list all (includes global)
decide deprecate ui-003 # soft-delete (reversible)
decide activate ui-003 # bring it back
decide check # embedding health
decide embed # fix missing embeddings
decide export json > decisions.json # export to file
decide ui # launch local web UI (graph + vector space + list)
decide ui -d # run UI in background, return the terminal
decide ui stop # stop the background UIFeatures
decide ui — visual interface
A local web UI that gives you three live perspectives on your decisions:
Graph — force-directed view where nodes are decisions, edges are cosine similarity. Hover to highlight a decision's neighborhood, drag the threshold slider to tighten/loosen the connections.
Vector Space — UMAP projection of the 3072-dim Gemini embeddings into 2D, drawn as actual vectors radiating from the origin. Lets you literally see semantic clusters form.
List — searchable, filterable, sortable cards grouped by scope. The boring-but-essential view for actually reading what you've stored.
Live MCP pulse: when Claude Code, Cursor, Windsurf, or any MCP client searches your decisions, the matched nodes pulse in real time in the matching tool's color. You're literally watching the AI think.
decide ui # foreground (Ctrl+C to stop)
decide ui -d # background (terminal returns immediately)
decide ui status # check whether the background server is running
decide ui stop # stop the background serverLocal-only HTTP server on localhost:7788 (falls back to a random port). Read-only — the CLI and MCP remain the write paths.
Other features
Documentation
Full docs at decisionnode.dev/docs
CLI Reference — all commands
MCP Server — 9 tools, setup for Claude/Cursor/Windsurf
Decision Nodes — structure, fields, lifecycle
Context Engine — embedding, search, conflict detection
Configuration — storage, agent behavior, search threshold, global decisions
Workflows — common patterns
For LLM consumption: decisionnode.dev/decisionnode-docs.md
Contributing
See ROADMAP.md for what's coming next. Bug fixes, features, docs improvements, or just ideas are all welcome. See CONTRIBUTING.md for how to get started.
License
MIT — see LICENSE.
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/decisionnode/DecisionNode'
If you have feedback or need assistance with the MCP directory API, please join our Discord server