Featured

Deploy OpenClaw in 60 seconds β€” 20% off logoDeploy OpenClaw in 60 seconds β€” 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger β†’
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger β†’
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free β†’
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now β†’
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data β€” no proxies, no parsers, no maintenance.

Start building free β†’
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it β€” secured from day one.

Get it set up for you β†’
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free β†’
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here β†’

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

decisionnode/DecisionNode MCP server](https://glama.ai/mcp/servers/decisionnode/DecisionNode/badges/score.svg)](https://glama.ai/mcp/servers/decisionnode/DecisionNode) πŸ“‡ 🏠 🍎 πŸͺŸ 🐧 - Record development decisions as structured JSON, embed as vectors via...

README.md

<p align="center"> <img src="website/src/assets/images/DecisionNode-transparent.png" width="150" /> </p>

<h1 align="center">DecisionNode</h1>

<p align="center"> CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. </p>

<p align="center"> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a> <a href="https://www.npmjs.com/package/decisionnode"><img src="https://img.shields.io/npm/v/decisionnode.svg" alt="npm version" /></a> <img src="https://github.com/decisionnode/DecisionNode/actions/workflows/ci.yml/badge.svg" alt="CI" /> <a href="https://glama.ai/mcp/servers/decisionnode/DecisionNode"><img src="https://glama.ai/mcp/servers/decisionnode/DecisionNode/badges/score.svg?v=1" alt="Glama" /></a> </p>

---

<p align="center"> <img src="website/public/recordings/demo.gif" alt="DecisionNode Demo" width="800" /> </p>

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-mcp

What 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

  1. A decision is made β€” via decide add or the AI calls add_decision through MCP
  2. Embedded as a vector β€” using Gemini's gemini-embedding-001, stored locally in vectors.json
  3. AI retrieves it later β€” calls search_decisions via 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 (decide) | MCP Server (decide-mcp) | |---|---|---| | 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 UI

Features

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 server

Local-only HTTP server on localhost:7788 (falls back to a random port). Read-only β€” the CLI and MCP remain the write paths.

Other features

<details> <summary><strong>History tracking</strong> β€” full audit trail with source tracking</summary> <br/> Every add, edit, deprecation, and delete is logged. The history shows which tool made each change β€” <code>cli</code> for terminal commands, or the MCP client name (<code>claude-code</code>, <code>cursor</code>, <code>windsurf</code>) for AI-initiated changes.

<img src="website/public/recordings/history.gif" alt="decide history" width="700" /> </details>

<details> <summary><strong>Conflict detection</strong> β€” catch duplicates before they're saved</summary> <br/> When adding a decision, existing decisions are checked at 75% similarity. The CLI warns you and asks to confirm. The MCP server returns the conflicts so the AI can decide whether to update, deprecate, or force-add.

<img src="website/public/recordings/conflict.gif" alt="conflict detection" width="700" /> </details>

<details> <summary><strong>Deprecate / Activate</strong> β€” soft-delete without losing embeddings</summary> <br/> Deprecated decisions are hidden from search but their embeddings are preserved. Reactivate them later and they're immediately searchable again β€” no re-embedding needed.

<img src="website/public/recordings/deprecate.gif" alt="deprecate and activate" width="700" /> </details>

<details> <summary><strong>Global decisions</strong> β€” shared across all projects</summary> <br/> Decisions like "never commit .env files" or "always use TypeScript strict mode" can be marked as global. They're stored separately and automatically included in every project's search results.

<img src="website/public/recordings/global.gif" alt="global decisions in search" width="700" /> </details>

<details> <summary><strong>Agent behavior</strong> β€” control how aggressively the AI searches</summary> <br/> This setting changes the <code>search_decisions</code> tool description sent to the AI. <strong>Strict</strong> (default) tells the AI searching is mandatory before any code change. <strong>Relaxed</strong> lets the AI decide when searching is relevant.

<img src="website/public/recordings/behavior.gif" alt="agent behavior strict vs relaxed" width="700" /> </details>

<details> <summary><strong>Configurable threshold</strong> β€” filter out weak matches</summary> <br/> Set the minimum similarity score (0.0–1.0) for search results. The default is 0.3. Raise it to reduce noise, lower it to surface more loosely related decisions. Applies to both CLI and MCP searches.

<img src="website/public/recordings/threshold.gif" alt="configurable search threshold" width="700" /> </details>

<details> <summary><strong>Embedding health</strong> β€” check and fix missing vectors</summary> <br/> <code>decide check</code> shows which decisions are missing embeddings. <code>decide embed</code> generates them. <code>decide clean</code> removes orphaned vectors from deleted decisions.

<img src="website/public/recordings/embed.gif" alt="decide check and decide embed" width="700" /> </details>

Documentation

Full docs at decisionnode.dev/docs

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.

See related servers & alternatives β†’

Related MCP servers

Browse all β†’

Related guides

Hand-picked reading to help you choose and use Vector & Memory servers.