Mandrel
OfficialAllows using local models via Ollama for supersession adjudication, enabling record supersession checks without relying on external LLM APIs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mandrelrecall why we chose React Query over SWR last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Mandrel
Structured, persistent memory for AI coding agents — a typed knowledge graph that remembers the story of your work, not just its text.
Most "AI memory" is a vector store: dump text, retrieve by similarity. Mandrel is different. It gives AI agents a typed-edge knowledge graph over everything they learn — decisions, context, tasks, lessons — automatically threaded into the story of how a project actually evolved, and replayable on demand. When an agent comes back tomorrow, it doesn't just find relevant snippets; it can walk the causal chain: what was decided, why, what it superseded, what broke, and what fixed it.
Mandrel connects to any MCP-compatible agent (Claude, and others) and runs in production today across isolated multi-tenant deployments.
The problem
Every AI-assisted development session starts from zero. Your AI assistant doesn't remember:
Why you chose React Query over SWR last week
That you already debugged this exact error three days ago
The architectural decisions that shaped your codebase
The conventions your team established
So you re-explain context, re-justify decisions, and re-solve problems. Worse: the context window fills with repetitive background instead of forward progress — and with agent swarms running in parallel, that lost thread compounds across every session.
Bolting a vector database onto an agent helps a little — you can retrieve similar text. But similarity isn't memory. It can't tell you that decision B superseded decision A, that this bug was caused by that change, or replay the sequence of moves that got you here. That structure is what agents actually need to stay coherent across time.
Related MCP server: Mnemograph
What makes Mandrel different — Treewalker
Treewalker is the core: a memory model built as a graph, not a bucket. Three things no vector store gives you:
1. A typed-edge knowledge graph.
Records link with real, queryable relationships — decided_by, caused, supersedes,
learned_from, informs, related_to, … — not just cosine proximity. You can traverse
why, not just what's nearby. Contexts, decisions, and tasks are all first-class nodes
in one graph.
2. Deterministic auto-threading — honesty-gated. Set an active task or decision as the "thread," and every new capture is automatically wired onto it — but only when it genuinely belongs (an embedding-similarity floor plus an anchor TTL). Below the bar, Mandrel surfaces a skip with the reason instead of silently mis-filing. The guarantee is no silent orphan and no silent mis-thread: every record ends with either a real edge or a stated reason. Memory you can trust is memory that refuses to lie about its own structure.
3. Story recall with trust signals.
recall_thread replays the full narrative of any piece of work — the decisions, the
context, the fixes, in order. Each node carries a trust signal (proven vs. unproven),
so an agent knows which memories to lean on and which to re-verify. This is how a
cold-started agent resumes exactly where the last one left off — lossless, not lossy.
This is the moat. Semantic retrieval is a commodity; a disciplined, self-honest, replayable project graph is not.
Context is the scarce resource
Exposing a large tool surface to an agent is expensive — every tool schema costs tokens on
every connection. Mandrel's gateway collapses its full tool surface behind a single
discover entrypoint plus a handful of action-discriminated gateways, so an agent loads
the capabilities it needs on demand instead of paying for all of them up front.
Result: the 11-tool gateway serves its
tools/listin ~1,330 tokens, versus ~22,800 for the equivalent 57-tool flat surface — a ~94% reduction (measured with our own token meter,o200k_base; still ~90% even if you strip output schemas from the flat baseline). First-call parity with the flat surface is verified.
Combined with local embeddings (below), the practical effect is: more of the agent's context window spent on your problem, less on plumbing.
Proven in production
Multi-tenant, isolated. Each tenant runs its own containerized deployment (own database, own MCP server) behind a reverse proxy — not a shared multi-tenant table.
Dogfooded end-to-end. Mandrel is built using Mandrel. Every decision, lesson, and handoff in its own development lives in its graph — including the rebuild that produced the gateway above.
Local embeddings, zero API cost. Semantic search runs on-device; no data leaves the box for embedding, and there's no per-query bill.
Fail-closed operations. Health-gated rolling deploys, per-tenant secret isolation, and canary-first change management.
Architecture
┌──────────────────────────────────────────────────────────────────┐
│ Client Layer │
├───────────────────────────────┬──────────────────────────────────┤
│ MCP Agents (Claude, …) │ Web Dashboard │
│ streamable HTTP / STDIO │ (React + Vite) │
└───────────────┬────────────────┴───────────────┬──────────────────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────────────────┐
│ MCP Server (TypeScript) │
│ • Gateway surface — `discover` + action gateways (token-lean) │
│ • Flat surface — per-tool endpoints (full, direct) │
│ • Treewalker — typed-edge graph, auto-threading, recall_thread │
└───────────────┬──────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Services: Embeddings (Transformers.js, 384D, local) │
│ Session tracking · resilience · analytics │
└───────────────┬──────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ PostgreSQL + pgvector │
│ contexts · technical_decisions · tasks · projects · sessions │
│ + typed-edge graph over contexts / decisions / tasks │
└──────────────────────────────────────────────────────────────────┘Key technical decisions
Local embeddings — Transformers.js with
all-MiniLM-L6-v2(384-dimensional vectors) runs inference locally: zero API cost, data stays on-box, works offline.Two tool surfaces, one server — a token-lean gateway (
discover+ action gateways) for MCP-protocol clients, and a flat per-tool surface for direct/tooling use. Same server, same data.Graph-native memory — the typed-edge graph, auto-threading, and
recall_threadare first-class, not a plugin. Trust signals and threading are enforced at write time.
Quick start
Prerequisite: a container runtime with compose —
Linux: Docker Engine;
macOS: Docker Desktop. On Linux, also complete the
post-install step that adds your user
to the docker group (sudo usermod -aG docker "$USER", then log out and back in). The stack runs
its own PostgreSQL 15 (with pgvector) in a container — nothing to install on the host.
git clone https://github.com/RidgetopAi/mandrel-oss.git
cd mandrel-oss
./install.shinstall.sh creates .env (mode 600) with a generated database password and MCP bearer
token, builds and starts the whole stack (PostgreSQL + pgvector, Redis, the MCP server and the
dashboard), waits until every service is healthy, validates the install, and prints the MCP
endpoint, the dashboard URL with a generated admin login (username and password, kept in .env),
and copy-pasteable MCP client configs carrying your token and an X-Actor-ID header (your login
name by default; override with MANDREL_ACTOR_ID). The MCP server advertises the small gateway
tool surface by default (MANDREL_TOOL_SURFACE=gateway). Re-running keeps your existing .env
values, including the admin password.
The full user manual covers install, connecting an agent, concepts,
everyday use, supersession and operations. Developing Mandrel itself (host npm run dev:*)? See
CONTRIBUTING.md.
Supersession (optional)
Mandrel can adjudicate whether a newly stored record supersedes or contests an older one
(it adds a soft possibly_supersedes edge and the old record's trust drops, so retrieval prefers what is true now). It calls an LLM, so it is
off when no key is set — a fresh install runs fine without it and logs one info line at
startup naming the variable that turns it on.
Container stack: supersession is off until you enable it. Exact, copy-pasteable settings for the recommended Snap + Anthropic tiered setup (Snap is a public-preview API; its pricing may change before general availability), Snap only, Anthropic only, a local or smaller model (openai-compat, Ollama) and the daily spend cap (
MANDREL_BELIEF_DAILY_SPEND_CAP_USD, default2) are in docs/manual/supersession.md; every setting is in the configuration reference.Explicit control:
MANDREL_BELIEF_ENABLED=falseforces it off even with a key.MANDREL_BELIEF_ENABLED=truewith no credential logs oneDISARMEDerror and stays off.
See the commented block in .env.example.
Verify
install.sh already runs this; run it again any time:
./scripts/validate-install.sh # runs inside the containers — no host psql needed
curl http://localhost:8080/health
# -> {"status":"healthy","timestamp":"...","uptime":12.3,"pid":1,"version":"<semver>+<revision>","embeddings":"real"}embeddings is real for a working install; mock means the server is serving meaningless
vectors and the validator fails.
Connect your agent to the MCP endpoint and start with mandrel_help (flat) or
discover({action:'catalog'}) (gateway) to see the full tool catalog.
MCP tools
Mandrel exposes a broad tool surface organized by category — system health, navigation,
projects, semantic context storage, architectural decisions, tasks,
smart search, and the linking & graph tools that power Treewalker (link,
get_links, recall_thread, thread_set/thread_current/thread_clear).
Protocol clients navigate the token-lean gateway: discover({action:'catalog'}) to list,
discover({action:'explain', tool}) for a tool's contract, then call the relevant gateway
(e.g. context({action:'store', …})).
Example — store a learning
context_store({
content: "pgbouncer dropped idle connections after 30s under load; fixed with " +
"client_idle_timeout=600. Symptom was 'connection reset' errors.",
type: "error",
tags: ["postgresql", "pgbouncer", "connection-pooling"]
})
// With an active thread set, this auto-links onto the current task/decision —
// or surfaces a 'skip' with a reason if it doesn't belong. No silent mis-filing.Example — replay the story
recall_thread({ /* task or decision */ })
// Returns the ordered narrative: the decision, what informed it, what it
// superseded, the lessons learned — each node with its trust signal.Technology stack
Component | Technology | Purpose |
MCP Server | TypeScript, Node.js | Protocol + graph engine |
Database | PostgreSQL 15 + pgvector | Storage + vector search + typed-edge graph |
Embeddings | Transformers.js ( | 384D semantic vectors, local inference |
Dashboard | React, Vite | Developer UI |
API | Express.js | REST + session analytics |
Validation | Zod | Runtime schema validation |
Testing | Vitest | Unit + integration |
The Punch List loop
Mandrel ships a reference loop that works the punches on your board with a coding agent and an independent critic. To install and run it, see loop/README.md.
Status
Mandrel is production-deployed with health-gated rolling deploys and per-tenant isolation. It is under active development toward general availability.
License
See LICENSE.
Built by RidgetopAI to make AI-assisted development sustainable across sessions, agents, and time.
This server cannot be deployed
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to maintain persistent, cross-session memory of codebase architecture, naming conventions, and decisions through MCP tools. Eliminates repetitive project re-explanation by automatically injecting stored context into every session with local-first SQLite storage and optional team sharing capabilities.4MIT
- AlicenseAqualityDmaintenanceA persistent, event-sourced knowledge graph MCP server for AI coding agents that enables semantic search, tiered context retrieval, and git-based version control of AI memory.31105 PyPI2MIT
- AlicenseNot gradedqualityAmaintenanceProvides local-first persistent memory with a typed knowledge graph and bounded multi-hop retrieval via MCP, letting coding agents and local LLM systems store, search, and recall facts across sessions without hosted services or model dependencies.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI coding agents and IDEs to capture conversations, extract structured knowledge into a queryable graph database, and recall past decisions, patterns, files, and errors across all projects and workspaces. Provides persistent memory tools for saving, searching, and cleaning up knowledge via MCP.2-