neural-memory
Provides Cloud Sync for the memory brain by allowing users to deploy a sync hub on their own Cloudflare account (Workers and D1 database), enabling private multi-device synchronization of memory data.
Supports offsite backup by sending the brain database (.db) file to Telegram, allowing users to store and retrieve memory snapshots remotely.
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., "@neural-memoryrecall why Tuesday's outage happened"
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.
NeuralMemory
Your AI agent forgets everything between sessions. Neural Memory gives it a brain.
Memories are stored as interconnected neurons and recalled through spreading activation — the same way the human brain works. No vector database. No API calls. No monthly embedding bill.
pip install neural-memoryRestart your AI tool. Your agent now remembers — no init needed, the MCP server auto-initializes on first use.
Already installed? nmem update upgrades in place and detects whether you installed via pip or from source. nmem update --check only reports what is available.
The CLI is
nmem(or the longerneural-memory). There is nonmbinary.
3 Tools. That's It.
63 MCP tools are available, but you only need three:
Tool | What it does |
| Store a memory — auto-detects type, tags, and connections |
| Recall through spreading activation — related memories surface naturally |
| Brain health score (A–F) with actionable fix suggestions |
Everything else — sessions, context loading, habit tracking, maintenance — works transparently in the background.
Related MCP server: dejaview-mcp
What Makes This Different
Most memory tools are search engines. Neural Memory is a graph that thinks.
When you ask "Why did Tuesday's outage happen?", a vector database returns the most similar sentence. Neural Memory traces the chain:
outage ← CAUSED_BY ← JWT expiry ← SUGGESTED_BY ← Alice's reviewRelationships are explicit — CAUSED_BY, LEADS_TO, RESOLVED_BY, CONTRADICTS — so your agent doesn't just find memories, it reasons through them.
Search-based (RAG) | Neural Memory | |
Retrieval | Similarity score | Graph traversal |
Relationships | None | 24 explicit types |
LLM required | Yes (embedding) | No — fully offline |
Multi-hop reasoning | Multiple queries | One traversal |
Memory lifecycle | Static | Decay, reinforcement, consolidation |
Cost per 1K queries | ~$0.02 | $0.00 |
Cloud Sync — Your Data, Your Infrastructure
Sync your brain across every machine. Unlike other memory tools, we never store your data.
Laptop ←→ Your Cloudflare Worker ←→ Desktop
↕
Your PhoneYou deploy the sync hub to your own Cloudflare account (free tier). Your D1 database, your encryption key, your data. We provide the code — you own the infrastructure.
nmem sync # push/pull changes
nmem sync --auto # auto-sync after every remember/recallSync uses Merkle delta — only diffs travel, not the full brain. Fast, efficient, private.
Features
Memory & Recall
14 memory types — fact, decision, error, insight, preference, workflow, instruction, and more
Spreading activation — memories surface by association, not keyword match
Cognitive reasoning — hypothesize, submit evidence, make predictions, verify with Bayesian confidence
Workload presets —
nmem config preset {balanced,safe-cost,max-recall,chat-heavy}tune the brain for SaaS, frugal mode, deep retention, or conversational agentsTemporal recall —
nmem_causalexposestemporal_rangeandtemporal_neighborhoodactions; see the Temporal Recall Recipes guide
Knowledge Ingestion
Train from documents — PDF, DOCX, PPTX, HTML, JSON, XLSX, CSV ingested into permanent brain knowledge
Import adapters — migrate from ChromaDB, Mem0, Cognee, Graphiti, LlamaIndex in one command
Lifecycle & Storage
Memory consolidation — episodic memories mature into semantic knowledge over time
Compression tiers — full → summary → essence → ghost → metadata (reclaim storage, keep meaning)
Brain versioning — snapshot, rollback, diff, transplant memories between brains
Community
Brain Store — browse, import, and publish pre-built brains to the community marketplace
3 seed brains — Python Best Practices, Git Workflows, Docker Essentials (ready to import)
Ecosystem
Web dashboard — 7-page React UI with graph visualization, health radar, timeline, mindmap, Brain Store
VS Code extension — memory tree, graph explorer, CodeLens, WebSocket sync (Marketplace →)
Safety — Fernet encryption, sensitive content auto-detection, parameterized SQL, path validation
Telegram backup — send brain
.dbfiles to Telegram for offsite backup
Quick Examples
# Store memories (type auto-detected)
nmem remember "Fixed auth bug with null check in login.py:42"
nmem remember "We decided to use PostgreSQL" --type decision
nmem todo "Review PR #123" --priority 7
# Recall
nmem recall "auth bug"
nmem recall "database decision" --depth 2
# Brain management
nmem brain list && nmem brain health
nmem brain export -o backup.json
# Sync across devices
nmem sync --full
# Web dashboard
nmem serve # http://localhost:8000/dashboardimport asyncio
from neural_memory import Brain
from neural_memory.storage import InMemoryStorage
from neural_memory.engine.encoder import MemoryEncoder
from neural_memory.engine.retrieval import ReflexPipeline
async def main():
storage = InMemoryStorage()
brain = Brain.create("my_brain")
await storage.save_brain(brain)
storage.set_brain(brain.id)
encoder = MemoryEncoder(storage, brain.config)
await encoder.encode("Met Alice to discuss API design")
await encoder.encode("Decided to use FastAPI for backend")
pipeline = ReflexPipeline(storage, brain.config)
result = await pipeline.query("What did we decide about backend?")
print(result.context) # "Decided to use FastAPI for backend"
asyncio.run(main())Neural Memory Pro
Free Neural Memory is complete — 63 tools, unlimited memories, fully offline. You never have to pay.
But past 10K memories, things change. Keyword matching misses semantically related content. Consolidation slows to minutes. Storage grows unbounded. If your agent's brain is getting big, Pro makes it smart.
Free recalls by keyword. Pro recalls by meaning.
Query: "authentication improvements"
Free (FTS5): 2 results — exact matches only
Pro (HNSW): 7 results — includes "JWT rotation", "session hardening", "OAuth migration"What Pro adds
Free (SQLite) | Pro (InfinityDB) | |
Recall | Keyword match (FTS5) | Semantic similarity (HNSW) |
Speed at 1M neurons | ~500ms | <5ms |
Scale tested | ~50K neurons | 2M+ neurons |
Compression | Text-level trimming | 5-tier vector compression (97% savings) |
Consolidation | O(N²) brute-force | O(N×k) HNSW clustering |
Storage per 1M | ~5 GB | ~1 GB |
Cloud sync | Manual push/pull | Merkle delta (auto, diffs only) |
Pro-exclusive features
Cone Queries — adjustable semantic recall. Narrow the cone for precision, widen for exploration
Smart Merge — consolidation that scales to 1M+ neurons using HNSW neighbor clustering
Directional Compression — compress along multiple semantic axes while preserving meaning
5-Tier Auto Lifecycle — memories flow from float32 → float16 → int8 → binary → metadata. Auto-promote on access
Get Pro
pip install neural-memory # Pro features included
nmem shared activate --key NM-PRO-XXXX-XXXX-XXXX # activate license
nmem shared status # verify: Pro: Active$9/mo — 30-day money-back guarantee. All free tools keep working. Downgrade anytime, keep your data.
Setup by Tool
/plugin marketplace add nhadaututtheky/neural-memory
/plugin install neural-memory@neural-memory-marketplacepip install neural-memoryAdd to your editor's MCP config:
{
"mcpServers": {
"neural-memory": { "command": "nmem-mcp" }
}
}Skill — one click via ClawHub. Published on every release:
clawhub.ai/skills/neural-memory
Plugin — memory slot replacement. Use this if you want NeuralMemory to be OpenClaw's memory provider rather than a skill it calls:
pip install neural-memory && npm install -g neuralmemorySet memory slot in ~/.openclaw/openclaw.json:
{ "plugins": { "slots": { "memory": "neuralmemory" } } }Already using Neural Memory? Just activate your key:
nmem shared activate --key NM-PRO-XXXX-XXXX-XXXX # activate licenseThen enable InfinityDB (semantic search engine):
# ~/.neuralmemory/config.toml
storage_backend = "infinitydb"Restart your MCP server. Existing memories are auto-migrated from SQLite to InfinityDB on first startup.
pip install neural-memory[server] # FastAPI server + dashboard
pip install neural-memory[extract] # PDF/DOCX/PPTX/HTML/XLSX extraction
pip install neural-memory[nlp-vi] # Vietnamese NLP
pip install neural-memory[embeddings] # Local embedding models
pip install neural-memory[embeddings-openai] # OpenAI embeddings
pip install neural-memory[all] # EverythingMetric | NeuralMemory | Mem0 | Cognee |
Write 50 memories | 1.2s | 148.2s (121x slower) | 290.6s (80x slower) |
Read 20 queries | 1.8s | 2.9s | 34.6s |
API calls | 0 | 70 | 149 |
Zero LLM calls, zero API cost. Full benchmarks → · Cognitive Efficiency release evidence →
Documentation
Guide | Description |
Interactive guide with animated demos | |
Get started with Pro features | |
All 82 CLI commands | |
All 63 MCP tools with parameters | |
Multi-device sync setup | |
Understanding and improving brain health | |
Configure embedding providers | |
Technical design deep-dive |
Development
git clone https://github.com/nhadaututtheky/neural-memory
cd neural-memory && pip install -e ".[dev]"
nmem doctor --dev # Verify contributor setup
pytest tests/ -v # 7800+ tests
ruff check src/ tests/ # LintSee CONTRIBUTING.md for guidelines.
Support
If Neural Memory helps your AI agent remember, please consider giving it a star — it helps others discover the project and keeps development going.
You can also sponsor the project.
License
MIT — see LICENSE.
Available Tools
10 toolsnmem_autoA
Auto-extract memories from text. 'process'=analyze+save, 'flush'=emergency capture before compaction. Use at session end or when processing large text blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | Force save even if auto-capture disabled (for 'analyze') | |
| text | No | Text to analyze (required for 'analyze' and 'process') | |
| action | Yes | Action: 'process' analyzes and saves, 'analyze' only detects, 'flush' emergency capture before compaction (skips dedup, lower threshold) | |
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does reveal that 'process' saves (mutation) and that 'flush' is an emergency capture skipping dedup with a lower threshold, but says nothing about what gets overwritten, idempotency, or permission requirements for a write-capable tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, action semantics front-loaded before the usage note. Minor redundancy with the action enum descriptions, but no filler or preamble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-capable tool with no annotations and no output schema, the description covers triggers and the two key actions but omits what the caller gets back and the safety profile. Adequate as a minimum viable entry point, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters including the action enum are already documented in the schema, and the description's enum glosses largely restate it. Baseline 3 applies; the description adds little parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: auto-extract memories from text, and sketches the two most consequential actions ('process'=analyze+save, 'flush'=emergency capture). It does not differentiate itself from close siblings like nmem_remember or nmem_remember_batch, so the agent cannot fully tell which entry point to prefer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete context: 'Use at session end or when processing large text blocks,' and ties 'flush' to the pre-compaction emergency case. It offers no explicit exclusions (e.g., when to fall back to nmem_remember instead), so the routing is implied rather than closed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_contextA
Get recent memories as auto-injected context. Use for broad task context. For specific queries use nmem_recall. For project-level context use nmem_recap.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent memories (default: 10) | |
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| fresh_only | No | Only include memories < 30 days old | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. | |
| include_ghosts | No | Include faded ghost memories at bottom of context with recall keys (default: true). Set false to suppress. | |
| warn_expiry_days | No | If set, warn about memories expiring within this many days. Adds expiry_warnings to response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' plus 'auto-injected context' implies a read-only, non-mutating operation and hints that the content feeds automatic injection, but it says nothing about ordering, freshness defaults, or what happens when the token budget is exceeded. The richer behavioral details (token stripping, compact mode, ghost memories, expiry warnings) live only in the parameter descriptions, not the tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the core scoping statement is front-loaded ahead of the alternative routing. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter read tool with no output schema and no annotations, the description plus the rich parameter descriptions cover enough to invoke it correctly. The only remaining gap is the shape of the returned context, which is partly compensated by parameters like compact, token_budget, and warn_expiry_days that describe response behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all six parameters carry clear, substantive descriptions (defaults, ranges, and effects like 'strip metadata hints' or 'calls_expiry_warnings'). The tool description adds no parameter-level meaning at all, so the baseline 3 for full schema coverage is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get recent memories') and immediately frames the output as 'auto-injected context', which tells the agent what kind of payload to expect. It explicitly distinguishes itself from two siblings (nmem_recall, nmem_recap), so the agent can select it without opening any other schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('broad task context') and routes two alternatives by condition: specific queries to nmem_recall, project-level context to nmem_recap. This is a clean when-to-use / which-alternative mapping with nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_eternalA
SAVE project context, decisions, instructions that persist across sessions. Pair with nmem_recap to LOAD. Use for project-level facts, not task-specific memories.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | status=view memory counts and session state, save=store project context/decisions/instructions | |
| reason | No | Reason for the decision | |
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| decision | No | Add a key decision (saved as DECISION) | |
| tech_stack | No | Set tech stack (saved as FACT) | |
| instruction | No | Add a persistent instruction (saved as INSTRUCTION) | |
| project_name | No | Set project name (saved as FACT) | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It mentions persistence across sessions, which is a key behavioral trait, but doesn't describe whether saving is reversible, what permissions are required, or what happens to existing memories when new ones are added. For a mutation tool with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the core action and purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, mutation operation, no annotations, no output schema), the description covers the basic purpose and a key usage distinction, but leaves significant gaps regarding behavioral traits like reversibility, permissions, and interaction with existing memories. It is adequate but not complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description doesn't add any parameter-specific meaning beyond what the schema provides. Baseline 3 is appropriate when the schema does all the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: it SAVES project context, decisions, and instructions that persist across sessions. It distinguishes itself somewhat from siblings by scoping to project-level facts rather than task-specific memories, which helps differentiate it from nmem_remember.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use for project-level facts, not task-specific memories, and pairs it with nmem_recap for loading. It doesn't name all relevant alternatives like nmem_remember, but the primary when-to-use condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_recallA
Query memories via spreading activation. Use when you need past context, decisions, or knowledge. Depth: 0=instant lookup, 1=context (default), 2=cross-time patterns, 3=deep graph. Add tags for precision. Use nmem_context instead for broad recent context.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Recall mode: 'associative' (default) returns formatted context, 'exact' returns raw neuron contents verbatim without truncation or summarization. | |
| tags | No | Filter by tags. Checks tags, auto_tags, and agent_tags columns. | |
| tier | No | Filter results by memory tier. Only return memories matching this tier. | |
| as_of | No | ISO datetime for time-travel recall. Returns only memories that existed at that point in time (created_at <= as_of) and reconstructs their maturation stage. Example: '2026-03-01T00:00:00' recalls memory state as of March 1st. | |
| depth | No | Search depth: 0=instant (direct lookup, 1 hop), 1=context (spreading activation, 3 hops), 2=habit (cross-time patterns, 4 hops), 3=deep (full graph traversal). Auto-detected if unset. | |
| layer | No | Layer scope: 'auto' (default) merges project + global brains, 'project' restricts to current brain only, 'global' queries only the global brain. | |
| query | Yes | The query to search memories | |
| brains | No | Optional list of brain names to query across (max 5). When provided, runs parallel recall across all specified brains and merges results. | |
| domain | No | Domain scope filter. When set, HOT context injection only includes boundaries tagged with this domain (plus unscoped global boundaries). Example: domain='financial' filters out security boundaries from context. | |
| compact | No | Compact mode: return only core answer + confidence, skip all optional metadata (thought_chains, sources, cognitive_chunks, etc). Saves 200-800 tokens. Default: true. Set false for full metadata. | |
| valence | No | Filter: only return memories with this emotional valence. Valence is detected at encoding via sentiment analysis. Use to find e.g. only frustrations (negative) or breakthroughs (positive). | |
| tag_mode | No | Tag matching mode: 'and' (default, all tags must match) or 'or' (any tag matches). | |
| valid_at | No | ISO datetime string to filter memories valid at that point in time (e.g. '2026-02-01T12:00:00') | |
| min_trust | No | Filter: only return memories with trust_score >= this value. Unscored memories (NULL) are always included. | |
| max_tokens | No | Maximum tokens in response (default: 500) | |
| min_arousal | No | Filter: only return memories with arousal (emotional intensity) >= this value. Arousal is detected at encoding time (0.0=neutral, 1.0=maximum intensity). Use to find emotionally significant memories (e.g. incidents, breakthroughs). | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. | |
| include_paths | No | Include activation paths (thought chains) showing how each neuron was reached. Returns top-5 paths with neuron content and hop distance. Default: false. | |
| prefer_recent | No | Re-rank matched fibers newest-first (by time_end, fallback created_at). Use for queries about current state ('what's the current version', 'today's status'). Do NOT use for historical questions ('how did we design X') — recency bias will mislead. Default: false. | |
| include_status | No | Lifecycle status filter. Default surfaces only 'active' neurons. Pass ['active', 'superseded'] to also see auto-superseded memories (Reflex Arc winners), or ['expired'] for past-validity-window history queries. | |
| min_confidence | No | Minimum confidence threshold | |
| permanent_only | No | Exclude ephemeral (session-scoped) memories from results. Default: false (include all). | |
| show_provenance | No | Append a one-line provenance footer (`[src=… · YYYY-MM-DD · conf=…]`) to each related neuron in recall output. Default: true. Set false to save ~5-8% tokens when caller does not need attribution. | |
| clean_for_prompt | No | Return clean bullet-point text without section headers or neuron-type tags. Default: true. | |
| exclude_reflexes | No | Exclude reflex (always-on) neurons from this recall. Default: false. | |
| warn_expiry_days | No | If set, warn about memories expiring within this many days. Adds expiry_warnings to response. | |
| include_citations | No | Include citation and audit trail in exact recall results (default: true). | |
| include_conflicts | No | Include full conflict details in response (default: false). When false, only has_conflicts flag and conflict_count are returned. | |
| simhash_threshold | No | SimHash pre-filter Hamming distance cutoff. Neurons with content_hash farther than this threshold from the query hash are excluded before spreading activation. 0 = disabled (default). Lower values = stricter filtering. Overrides brain config for this query. | |
| recall_token_budget | No | When set, activates budget-aware fiber selection: ranks fibers by value-per-token and selects the most efficient ones to fit within this budget. Adds budget_stats to the response. Default: not set (uses standard sequential truncation). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the retrieval mechanism (spreading activation) and the depth ladder, but says nothing about cost (token budgets, compact default), the read-only nature, or what the response looks like. The depth explanation largely duplicates the schema rather than adding behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short, front-loaded sentences with the core purpose first and the sibling redirect last; nothing is padded. The depth enumeration is the only segment that restates structured data rather than adding new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 30-parameter tool with no output schema and no annotations, the description is thin: it never mentions the rich filter surface (tier, as_of, valence, trust/arousal thresholds) or the shape of what comes back, even though the absent output schema means the description could reasonably carry some of that. The schema's 100% coverage keeps this from being inadequate, but it is only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 30 parameters are already documented in the schema, and the description's depth ladder repeats what the schema's depth property already says. It adds no syntax, defaults, or interactions beyond the structured fields, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Query memories') and the mechanism ('spreading activation'), then explicitly distinguishes itself from the sibling nmem_context for broad recent context. An agent can pick this tool over its 9 siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when you need past context, decisions, or knowledge'), a refinement hint ('Add tags for precision'), and names the alternative tool with the condition that selects it ('Use nmem_context instead for broad recent context'). This is when-to-use plus when-to-use-something-else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_recapA
LOAD project context saved by nmem_eternal. Call at SESSION START to restore cross-session state. Level 1=quick (~500 tokens), 2=detailed, 3=full.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Detail level: 1=quick (~500 tokens), 2=detailed (~1300 tokens), 3=full (~3300 tokens). Default: 1 | |
| topic | No | Search for a specific topic in context (e.g., 'auth', 'database') | |
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It usefully discloses per-level token costs and that it restores cross-session state, but never states read-only semantics, what happens when no saved context exists, or whether the level/token_budget interplay can drop content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, imperative verb front-loaded, and the highest-value instruction (session-start trigger) immediately follows the purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, timing, and the primary level parameter for a 4-parameter tool with no output schema and no annotations. It is slightly thin on the interaction between level, compact, and token_budget and on the empty-context case, but the essentials for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (level, topic, compact, token_budget) is already documented in the schema, including level's token estimates. The description's level restatement adds nothing beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('LOAD project context') and names the upstream writer (nmem_eternal), so an agent can tell it restores rather than saves. However, it does not distinguish itself from close siblings like nmem_recall, nmem_context, or nmem_situation, all of which plausibly read stored state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Call at SESSION START to restore cross-session state.' That is a clear when-to-use condition. It stops short of naming alternatives or exclusions (e.g., when to prefer nmem_recall or nmem_context instead), so it lacks the full when/when-not guidance a 5 requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_rememberA
Store a memory. Auto-detects type, auto-resolves contradicted errors (RESOLVED_BY synapse). Use after completing a task, fixing a bug, or making a decision. Don't use for temporary notes (use ephemeral=true) or project context (use nmem_eternal).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for categorization | |
| tier | No | Memory tier: hot (always in context, slow decay), warm (default, semantic match), cold (explicit recall only, fast decay). Boundary type auto-promotes to hot. | |
| type | No | Memory type (auto-detected if not specified) | |
| domain | No | Domain scope for boundary memories (e.g. 'financial', 'security', 'code-review'). Adds a domain:{value} tag. Boundaries without domain are global (apply everywhere). Only meaningful for type=boundary; ignored for other types. | |
| compact | No | Compact response: return only success + fiber_id + memory_type, skip verbose metadata. Saves 200-400 tokens. Default: true. Set false for full response. | |
| content | Yes | The content to remember | |
| context | No | Structured context dict merged into content server-side using type-specific templates. Keys like 'reason', 'alternatives', 'cause', 'fix', 'steps' are auto-expanded. For type='decision': 'chosen', 'alternatives'/'rejected', 'confidence' enable decision intelligence (overlap detection, evolution tracking). Any agent can send structured data instead of crafting perfect prose. | |
| event_at | No | ISO datetime of when the event originally occurred (e.g. '2026-03-02T08:00:00'). Defaults to current time if not provided. Useful for batch-importing past events with correct timestamps. | |
| priority | No | Priority 0-10 (5=normal, 10=critical) | |
| encrypted | No | Force encrypt this memory's neuron content (default: false). When true, content is encrypted with the brain's Fernet key regardless of sensitive content detection. | |
| ephemeral | No | Session-scoped memory: auto-expires after TTL (default 24h), never synced to cloud, excluded from consolidation. Use for scratch notes, debugging context, temporary reasoning. | |
| source_id | No | Link this memory to a registered source. Creates a SOURCE_OF synapse for provenance tracking. | |
| valid_from | No | Inclusive lower bound of the memory's validity window (ISO 8601). Recall before this moment heavily penalizes the score. Use for scheduled rules, sprint goals, time-bounded API keys, etc. | |
| trust_score | No | Trust level 0.0-1.0. Capped by source ceiling (user_input max 0.9, ai_inference max 0.7). NULL = unscored. | |
| valid_until | No | Inclusive upper bound of the memory's validity window (ISO 8601). After this cliff, recall scores drop 10x and the lifecycle sweep eventually flips status to 'expired'. Complements gradual decay. | |
| expires_days | No | Days until memory expires | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. | |
| verbose_extraction | No | Surface concept-extraction observability stats (dropped_short, dropped_noise, dropped_duplicate_entity). Default: false. Useful for debugging noise filter or measuring memory hygiene. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully reveals automatic behaviors (type auto-detection, automatic contradiction resolution creating a RESOLVED_BY synapse), but says nothing about idempotency, dedup, permissions, or what a call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then behavior, then usage. Every clause earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation tool with no annotations and no output schema, the description covers intent and routing well but omits the return shape (e.g., fiber_id) and mutations side-effects, leaving the agent to infer output from parameter docs like 'compact'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across 18 parameters, so the schema already documents tier, domain, trust_score, validity windows, encryption, etc. The description only echoes 'ephemeral' and the auto-detected 'type' without adding syntax or defaults beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Store a memory') and adds distinguishing behaviors (auto-detects type, auto-resolves contradicted errors via RESOLVED_BY synapse). It names the sibling it is not for project context (nmem_eternal), though it does not distinguish itself from nmem_remember_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering conditions ('after completing a task, fixing a bug, or making a decision') and explicit exclusions with remedies ('temporary notes -> ephemeral=true', 'project context -> nmem_eternal'). Clear when/when-not guidance; the batch sibling is not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_remember_batchA
Store multiple memories at once (max 20). Use when saving 3+ memories together. Partial success — one bad item won't block the rest.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| memories | Yes | Array of memories to store (max 20) | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers a genuinely non-obvious trait: partial success, where one bad item won't block the rest. It also notes the max-20 cap, though it says nothing about persistence, permissions, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, each carrying a distinct fact (scope, threshold, failure mode), with the core capability front-loaded. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch write tool with no annotations and no output schema, the description covers purpose, when-to-use, and failure semantics well. It lacks any mention of what a successful call returns or its persistence guarantees, which would round out the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three top-level parameters and nested memory fields are documented in the schema itself. The description's 'max 20' merely repeats maxItems already present, adding no new parameter meaning. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Store multiple memories at once') plus a hard constraint (max 20). The plural scope implicitly contrasts with the singular nmem_remember sibling, though it never names it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use when saving 3+ memories together.' This routes the agent away from the single-item tool, but it does not name nmem_remember directly nor state when to prefer it explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_sessionA
Track current session state (task, feature, progress). Single-session only. For cross-session persistence use nmem_eternal.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Current specific task | |
| notes | No | Additional context notes | |
| action | Yes | get=load current session, set=update session state, end=close session | |
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| feature | No | Current feature being worked on | |
| progress | No | Progress 0.0 to 1.0 | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden; it does disclose the important scope trait that state lives only for the current session and is not persisted across sessions. However, it says nothing about mutation semantics — whether 'set' replaces or merges existing state, or whether 'end' destroys it — which matters for a stateful tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero waste, with the core purpose front-loaded ahead of the scoping caveat and the alternative routing. Nothing needs to be trimmed and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter stateful tool with no annotations and no output schema, the description covers scope and routing but omits what a call actually returns (e.g., what 'get' yields, what 'end' reports) and the interaction between compact/token_budget and the response. Adequate but with real gaps given there is no output schema to lean on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (including action enums and token_budget/compact behavior) are already documented in the schema, making 3 the correct baseline. The description's parenthetical '(task, feature, progress)' merely echoes a subset of fields and adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Track current session state') and immediately scopes it with the listed fields (task, feature, progress). It also distinguishes itself from the sibling nmem_eternal by naming what it is not (cross-session persistence), so an agent can pick it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not ('Single-session only') paired with a named alternative ('For cross-session persistence use nmem_eternal'), which is exactly the routing signal an agent needs against a crowded sibling set. The condition that selects the alternative is stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_situationA
One-shot snapshot of the current working situation: active session task, top 3 recent decisions, open blockers, gap detection. Replaces nmem_recap + multiple nmem_recall calls when resuming a session. Pure read — never mutates state.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the safety profile ('Pure read — never mutates state') plus the bounded output shape (top 3 decisions, active task, blockers). It stops short of explaining what 'gap detection' actually surfaces or whether results are scoped to a session/user, which would be useful for a read tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler; the content enumeration is front-loaded and the behavioral guarantee comes last as a natural closing caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only snapshot tool with no output schema, the description adequately covers what is returned, how it relates to sibling tools, and its non-mutating nature. Minor gaps remain around the semantics of 'gap detection' and result scoping, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (compact, token_budget) are already documented with their token-saving behavior. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('one-shot snapshot of the current working situation') and enumerates exactly what it returns: active session task, top 3 recent decisions, open blockers, gap detection. It explicitly distinguishes itself from siblings nmem_recap and nmem_recall, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives it supersedes (nmem_recap + multiple nmem_recall calls) and the condition that selects it ('when resuming a session'). It is a clear when-to-use with alternatives, but omits any when-not guidance (e.g. for narrow single-topic lookups where nmem_recall is cheaper).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmem_todoA
Quick TODO memory (auto-expires in 30 days). Use nmem_forget to close when done.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task to remember | |
| compact | No | Return compact response (strip metadata hints, truncate lists). Saves 60-80% tokens. | |
| priority | No | Priority 0-10 (default: 5) | |
| token_budget | No | Max tokens for response. Progressively strips content to fit budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it does disclose the key behavioral trait: automatic 30-day expiration. It also names the disposal path (nmem_forget). It omits other relevant behavior such as what the call returns (an ID is presumably needed to later forget the item) and whether the write is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the defining trait (quick, auto-expiring) is front-loaded before the disposal instruction. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter write tool with no output schema and no annotations, the description covers lifetime and teardown adequately. It falls short on the return/identifier behavior needed to actually invoke nmem_forget later, and on how it differs from the other memory-writing siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so task, compact, priority, and token_budget are all already documented in the schema, including the 0-10 range and default. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource ('TODO memory') and its transient nature ('auto-expires in 30 days'), which implicitly distinguishes it from the persistent siblings nmem_eternal and nmem_remember. However, it never uses an explicit verb like 'create' or 'store', so the write action must be inferred from the required 'task' parameter. Clear but no direct sibling comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one lifecycle instruction — 'Use nmem_forget to close when done' — which tells the agent how to dispose of the item. It does not say when to prefer nmem_todo over nmem_remember or nmem_eternal (e.g., 'for short-lived tasks only'), so the selection guidance against alternatives is left to inference from the 30-day expiry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v4.62.0- First observed
nmem_auto - First observed
nmem_context - First observed
nmem_eternal - First observed
nmem_recall - First observed
nmem_recap - First observed
nmem_remember - First observed
nmem_remember_batch - First observed
nmem_session - First observed
nmem_situation - First observed
nmem_todo
TDQS
Scored across 10 tools
The retrieval tools (nmem_situation, nmem_recap, nmem_recall, nmem_context) and the storage tools (nmem_remember, nmem_remember_batch, nmem_todo, nmem_auto, nmem_eternal) heavily overlap, and the descriptions spend significant effort cross-referencing each other ('use nmem_context instead', 'for specific queries use nmem_recall') to compensate. The guidance is helpful but signals genuine boundary blur, so an agent can still misselect among the four recall-style tools.
All names share a uniform nmem_ prefix with lowercase snake_case, which is highly predictable. The only minor deviation is mixing action verbs (remember, recall) with noun-style names (situation, context, eternal, session), but the conventions themselves are consistent.
Ten tools is a reasonable scope for a memory server with distinct storage and retrieval concerns. It is slightly on the heavy side given the functional overlap between recall/situation/context/recap, but each still earns a roughly distinct place.
nmem_todo's description instructs the agent to 'use nmem_forget to close when done,' but no nmem_forget tool exists, creating a real dead end. There is also no delete or update/contradict-resolution tool exposed despite the surface emphasizing memory lifecycle management.
Maintenance
Related MCP Connectors
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
- GoMindOAuthcom.gominddb
Persistent knowledge graph for AI agents. Remember, recall, and forget facts.
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Graph memory for AI agents: entities, cause-effect links, cross-session recall, time travel.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables LLM agents to use associative memory with key/value graph-based retrieval, supporting multi-hop traversal and human-like associative leaps beyond embedding similarity.10MIT
- AlicenseNot gradedqualityDmaintenanceProvides persistent knowledge graph memory for AI agents, enabling them to store, recall, and query facts about people, projects, and relationships across sessions.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to maintain persistent, local memory with retrieval-augmented search, knowledge graphs, and context surfacing, without any cloud dependencies.52 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables persistent, graph-based memory for AI agents, allowing them to store, traverse, and recall relationships between facts, decisions, and context across sessions for efficient reasoning and reduced token usage.MIT