Magnemo
OfficialMagnemo is a local, governed memory MCP server: agents can look up approved memory, stage drafts for human review, read a deterministic boot pack, and record session handoffs.
retrieve— search canonical, keyholder-approved memory by query, with optional result count, partition scope, and byte budget; returns cited snippets/pointers only.stage— draft a memory candidate into staging with mandatory provenance; it never reaches canonical memory until a person reviews and promotes it.bootpack— read the wake-up context: charter, gate map, autonomy/trust levels, canon digest, open threads, review queue, last handoff, and ledger tail.handoff— record a session boundary with usage/trigger telemetry and stage a provenance-complete handoff note for the next bootpack.
Can be run alongside an existing Obsidian vault as a governed memory layer, complementing current notes without replacing them.
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., "@Magnemostage a note: the API base URL is https://api.example.com"
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.
Magnemo
The Memory MCP. Your AI remembers. You keep what matters.
Magnemo is Memory for your AI, kept on your computer in plain files. Your AI writes down what it learns as it works; nothing becomes Memory until you approve it, and every Memory shows who wrote it and who approved it.
When your agent writes something down, Magnemo asks you in the chat. One click.
Site · Manual · Changelog · X @Magnemo_AI · Known limits
Install in one paste
In three lines:
pip install magnemo # Python 3.11 or newer
magnemo init # makes the vault: a folder of plain files
magnemo mount # writes .mcp.json, the file Claude Code readsOr let your agent do it. Open Claude Code in any of your project folders, and paste this. (Its magnemo mount step writes .mcp.json, the file Claude Code reads. In Cursor, Windsurf or another client, use the block for your client under "Install in your client".)
Set up Magnemo in this project:
1. Install it: pip install magnemo. It needs Python 3.11 or newer. If pip can't find it, install uv (curl -LsSf https://astral.sh/uv/install.sh | sh) and then run: uv tool install magnemo
2. Initialize the vault: magnemo init
3. Register the MCP server: run magnemo mount — it adds Magnemo to this project's MCP config and keeps any servers already there.
4. Verify: run magnemo doctor and confirm everything passes.
5. Then ask me to restart you, so Magnemo's tools load, and to say this when you are back: "Use Magnemo to remember what this project is."
If anything fails, show me what went wrong and fix it if you can.Plant the seed: one paste, and your agent grows a Memory.
After the restart, say it: Use Magnemo to remember what this project is. Your agent writes one line down, and Magnemo asks you in the chat to approve it. One click. Then ask what it remembers.
Related MCP server: Engram
Works with
One server, the same in every client. Tested where it says so; the rest follow each client's own docs.
Client | Tested | How |
Claude Code | yes: Oct 12, 2026, Claude Code 2.1.296. The four tools, and the question in the chat: one click approved a note. |
|
Claude Desktop | untested | open |
Cursor | untested | the Add to Cursor link below, or |
VS Code | untested |
|
Windsurf | untested |
|
Cline | untested |
|
Continue | untested |
|
Gemini CLI | untested |
|
Codex CLI | untested |
|
Zed | untested |
|
Each client's exact block is under "Install in your client".
How it compares
Five questions, answered from each project's own docs (read Oct 12, 2026, checked again Oct 22; the pages are linked under the table).
Magnemo | Mem0 | Zep | Letta | Basic Memory | |
Where the memory lives | Plain markdown files in a folder on your computer | A hosted platform run by Mem0; open source: a local Qdrant store and a SQLite history file | Zep: a managed cloud service, or in your own VPC. Graphiti, its open-source engine: a graph database you run | Markdown files in a git repository that belongs to the agent: hosted by Letta, or on your device in local mode | Markdown files on your disk with a local SQLite index; an optional cloud |
Who approves a write | You. An agent's write waits in staging until your yes | An LLM extracts facts from the messages and stores them; their docs describe no approval step | Messages are ingested into the graph as they arrive; their docs describe no approval step | The agent updates its own memory; the background review "does not ask you for approval" | The assistant writes notes directly; the cloud has suggested edits that can be accepted or rejected |
Author and approver on every entry | Both, in each file's header ( | User, agent, app and run ids, timestamps, and a change history per memory; their docs name no approver field | When a fact was true and when it stopped, traced to its source episode; their docs name no approver field | Every memory edit is a git commit; their docs do not say what the commit records | Title, type, tags and dates; |
Network calls of its own | None. No model call and no embedding call; | OpenAI by default for the model and the embeddings; other providers are listed, Ollama among them | Zep is a cloud API. Graphiti defaults to OpenAI; local model servers are documented | Local mode keeps state on your device; inference goes to the provider you choose, which can be a local one | Runs locally; the default embeddings run on your machine with no API key |
What you can take back | A no is kept with its reason; a replaced note is archived with a forward link; nothing deletes; the files are yours to edit | Delete, update, and a history per memory; export is on the hosted platform | Delete nodes, edges and episodes; a replaced fact is invalidated, not deleted | The git history of every memory edit; the files can be read and edited | Plain files you edit and can track with git; a delete tool; the cloud keeps every saved version |
Where each of them is ahead. Mem0 extracts memories for you, searches them by meaning, and has Python and JavaScript SDKs, a REST API and a hosted platform. Zep keeps a knowledge graph that knows when each fact was true, as a managed service with SDKs in three languages. Letta is a whole agent platform, with an SDK, a CLI and background agents that tend the memory. Basic Memory searches by keyword and by meaning with embeddings that run on your machine, links notes into a graph, and syncs through its cloud. Magnemo has none of that: its search is keyword search (KNOWN_LIMITS.md), there is no graph and no hosted service. What it has is the approval and the record.
Their pages: Mem0 overview, platform and open source, add, history, quickstart, delete, export · Zep concepts, facts, security, deleting data, Graphiti · Letta MemFS, memory settings, local mode · Basic Memory README, what it is, tools, note format, semantic search, suggestions, file history. A cell that is wrong or out of date: open an issue and it is fixed.
Listed on the official MCP registry (ai.magnemo/magnemo) · PyPI · mcpservers.org · Glama · awesome-mcp-servers.
Tested on every push, on Python 3.9, 3.11 and 3.12: 300 tests, as of Oct 12, 2026 (the runs).
What's new
0.6.9 · Oct 22, 2026 · A seat's report files itself as a receipt and asks nothing; a yes is for Memory. Sentinel reads a seat's quote as a quote.
0.6.8 · Oct 13, 2026 · The yes is asked in the chat, one click. A yes that an agent or a script runs is refused.
0.6.7 · Oct 2, 2026 ·
magnemo reviewlabels held and flagged notes. A note Sentinel caught earns its author no trust.
Every release: CHANGELOG.md.
For builders. Magnemo is an MCP server with four tools — retrieve, stage,
bootpack, handoff — and a CLI for your side: review, promote, reject.
It runs on your machine, in plain markdown files you own. The package imports no network
module (magnemo doctor scans for one on every run); the only traffic is git push to a
backup destination, if you add one. Every promotion is recorded with who wrote the entry,
the name given for the yes, when, and through which gate. Trust is computed from that
record, never asserted. It mounts beside any memory you already
run (a folder of notes, Obsidian, a RAG stack). Python 3.11+, zero dependencies,
Apache-2.0.
Fresh vault? THE CHARTER section will say it isn't promoted yet — that is the
governance speaking: Magnemo never fabricates canon. Stage a charter, review it,
promote it, and every boot thereafter serves it back verbatim.
(magnemo not found after install? pip's script folder isn't on PATH —
python3 -m magnemo always works.)
Open beta — read KNOWN_LIMITS.md before trusting it with anything you can't lose. Honest caveats, no fine print.
Install in your client
One server, said ten ways. Every block below is the same thing: uvx magnemo-mcp with MAGNEMO_VAULT pointing at
the folder your Memory lives in (make one with magnemo init ./vault). Tested on this Mac where it says so;
the rest is from each client's own docs and marked untested — corrections welcome, open an issue.
Claude Code — tested: a Claude Code session mounts the server, lists the four tools and calls them, and draws the question in the chat (last run Oct 12, 2026: Claude Code 2.1.296, the 0.6.8 server).
claude mcp add magnemo -e MAGNEMO_VAULT=/absolute/path/to/vault -- uvx magnemo-mcp(claude mcp list shows magnemo … ✔ Connected. Add -s project to write it into the repo's .mcp.json for your team.)
Only have the desktop app? claude may not be a command in your shell. On a Mac the app keeps its own copy at
~/Library/Application Support/Claude/claude-code/<version>/claude.app/Contents/MacOS/claude; run that in place of claude.
Claude Desktop — untested end to end here. Download the extension from the latest release — magnemo-0.6.9.mcpb — and open it; Claude Desktop asks for the vault folder and does the rest. (The connectors directory listing follows once it is accepted.)
Cursor — untested here (not installed on this Mac); the link and the block follow Cursor's docs.
Or
~/.cursor/mcp.json (or .cursor/mcp.json in the project):
{
"mcpServers": {
"magnemo": {
"command": "uvx",
"args": ["magnemo-mcp"],
"env": { "MAGNEMO_VAULT": "/absolute/path/to/vault" }
}
}
}VS Code / Copilot — untested here; per VS Code's docs.
Or
.vscode/mcp.json in the workspace:
{
"servers": {
"magnemo": {
"type": "stdio",
"command": "uvx",
"args": ["magnemo-mcp"],
"env": { "MAGNEMO_VAULT": "/absolute/path/to/vault" }
}
}
}Windsurf — untested; ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"magnemo": {
"command": "uvx",
"args": ["magnemo-mcp"],
"env": { "MAGNEMO_VAULT": "/absolute/path/to/vault" }
}
}
}Cline — untested; Cline → MCP Servers → Configure → cline_mcp_settings.json:
{
"mcpServers": {
"magnemo": {
"command": "uvx",
"args": ["magnemo-mcp"],
"env": { "MAGNEMO_VAULT": "/absolute/path/to/vault" },
"disabled": false
}
}
}Continue — untested; ~/.continue/config.yaml (or a file in .continue/mcpServers/):
mcpServers:
- name: magnemo
command: uvx
args: ["magnemo-mcp"]
env:
MAGNEMO_VAULT: /absolute/path/to/vaultGemini CLI — untested; ~/.gemini/settings.json:
{
"mcpServers": {
"magnemo": {
"command": "uvx",
"args": ["magnemo-mcp"],
"env": { "MAGNEMO_VAULT": "/absolute/path/to/vault" }
}
}
}Codex CLI — untested; ~/.codex/config.toml:
[mcp_servers.magnemo]
command = "uvx"
args = ["magnemo-mcp"]
env = { MAGNEMO_VAULT = "/absolute/path/to/vault" }Zed — untested; settings.json → context_servers:
{
"context_servers": {
"magnemo": {
"source": "custom",
"command": "uvx",
"args": ["magnemo-mcp"],
"env": { "MAGNEMO_VAULT": "/absolute/path/to/vault" }
}
}
}After the install, the loop is the same everywhere: your agent writes to staging, you review.
magnemo yes # promote the top of the queue (yes <id-fragment> · yes --all)
magnemo no <id> --reason "…" # reject one — the reason is required; rejections teach
magnemo review # the interactive queue, when you want to read first
magnemo doctor # python, vault, config, ledger, and the mount — scans the package for network modules tooAnything that speaks MCP over stdio mounts the same way. The remote door (ChatGPT and hosted clients) is on its way in 0.7.0.
How it works
The yes is checked: nothing becomes Memory without a yes, and the engine can tell a person's yes from an agent's.
Magnemo is Memory with a constitution: every fact carries provenance, every agent write waits in your review queue before it becomes Memory, and every decision lands in a Trust Ledger.
Your agent gets four verbs. Approving is not one of them. The yes is yours: Magnemo asks you in the chat, and your answer never passes through the agent. KNOWN_LIMITS.md says what that does and does not stop; docs/MCP.md has the clients it works in.
Actor | Door | Can do |
Agents | MCP server (stdio) |
|
You | CLI + git (any editor) | review the queue · promote / reject · edit anything · own everything |
Zero dependencies. Pure Python standard library, 3.11 or newer. Nothing else to install, nothing to trust but this code.
The vault
vault/
dev/ knowledge/ playbooks/ decisions/ debt/ ← example: a dev team's partition
ops/ knowledge/ playbooks/ clients/ decisions/ style/ ← example: an ops team's partition
shared/ tickets/ changelog/ ← interop bus (gated)
_staging/ agent writes await review here
_index/ machine-managed
_ledger/ trust_ledger.jsonl — append-only, never forgetsEvery note is markdown with provenance frontmatter (author, written, source, status, reviewed_by, supersedes, strength). Provenance is the file format.
Privacy
Your Memory lives on your computer, in plain files you can open. No network calls of its own. Add a backup remote and it pushes there, nowhere else.
The precise version: the package imports no network module, and magnemo doctor scans for one every time it runs. If you add a backup destination, the engine runs git push to it. The full page: https://magnemo.ai/privacy
Guarantees (Phase 1 — Governed Recall)
Through the MCP server, agent writes NEVER reach canonical stores directly — staging only, always.
Search returns canonical (promoted) notes only. Staged notes are not searched. The boot pack shows staged material marked as staged: the titles of open threads and of the top staged notes, and the last handoff's cut line with a pointer to its note.
Partition walls enforced per agent (
MAGNEMO_PARTITIONS); cross-partition = DENIED.Supersession is explicit: old notes archive with a forward link. Nothing deletes.
Rejections are kept and recorded — rejections teach.
Every promote/reject lands in the append-only Trust Ledger with actor + reason.
Tests
python -m unittest discover -s tests -v # incl. full MCP round-trips (legacy + four-verb)
# or: pip install -e ".[test]" && pytestThe same suite runs on every push, on Python 3.9, 3.11 and 3.12: the runs.
Everything that shipped
Release by release, with the design notes that used to live here: CHANGELOG.md.
— Silver Valley Technologies Inc. · Phase 1 of 3 · The memory that learns is the memory that is governed.
Available Tools
4 toolsbootpackRead what this agent wakes up knowingARead-onlyIdempotent
The boot pack: Charter first (verbatim, never fabricated), then the Gate Map, YOUR AUTONOMY (this agent's own trust levels), canon digest, open threads, salience-ranked review queue, last handoff, ledger tail. Read it FIRST on every wake. Deterministic: same vault state, same bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| class | No | worker = lean; partner = adds the relationship layer when a codex exists | worker |
| scope | No | partition to orient on (must be inside MAGNEMO_SCOPE) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive, so the bar is lower. The description goes further by disclosing the deterministic output property ('same vault state, same bytes'), the strict ordering requirement, and the anti-fabrication rule ('Charter first, verbatim, never fabricated'). This adds meaningful behavioral context beyond the structured annotations.
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?
The description is two dense sentences with no filler. It front-loads the core object and rule, lists contents in a natural reading order, and closes with a deterministic guarantee. 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 read-only boot tool with no required parameters and no output schema, this is complete. It tells the agent what will be read, in what order, when to call it, and what property to expect. Nothing essential is missing.
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%, with both parameters (class and scope) having enums and descriptions. The tool description adds no parameter-specific details, but it doesn't need to because the schema fully documents them. Baseline 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?
The description clearly identifies the resource ('boot pack'), specifies the action (read it FIRST), and enumerates the exact ordered contents. It also adds the deterministic property ('same vault state, same bytes'), which makes the tool's purpose unambiguous and distinct from generic retrieval.
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 explicitly prescribes when to use the tool: 'Read it FIRST on every wake.' This is clear contextual guidance. It doesn't explicitly contrast with siblings like retrieve or handoff, but the every-wake-first instruction is strong enough that an agent can infer this is the mandatory entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
handoffRecord where this session stoppedA
Record a session boundary: appends telemetry (usage %, trigger, what was cut) to the append-only handoffs ledger AND stages a provenance-complete handoff note. The next bootpack inherits it. Doctrine: hand off at ~88-90%, do not ride to the wall.
| Name | Required | Description | Default |
|---|---|---|---|
| cut | No | what was cut / deferred at the boundary | |
| usage | Yes | context usage percent at the boundary | |
| trigger | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal that this is not read-only, not idempotent, and not destructive. The description adds valuable behavioral context: it appends to an append-only ledger, stages a note, and has a downstream effect (next bootpack inherits it). It does not fully detail all side effects or return behavior, but it goes beyond the annotations.
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 sentences, front-loaded with the core action, then side effects, then policy. Every clause earns its place and the doctrine is memorable guidance rather than 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 three-parameter tool with no output schema, the description is nearly complete: it covers what happens, the downstream effect, and the recommended usage threshold. The only notable gaps are naming sibling tools for disambiguation and explaining the trigger enum values, neither of which is critical.
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?
With only 67% schema description coverage and trigger lacking a description, the description compensates by mapping telemetry to usage %, trigger, and what was cut. usage and cut are already documented in the schema, and the description adds the unifying telemetry framing, though it adds little detail to the trigger enum.
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 opens with a specific verb and resource ('Record a session boundary') and details exactly what the tool does: appends telemetry to the append-only handoffs ledger and stages a handoff note that the next bootpack inherits. This clearly separates it from siblings like retrieve and bootpack by focusing on the boundary-recording action.
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 doctrine line gives concrete when-to-use guidance: hand off at ~88-90% and do not ride to the wall, so an agent knows the intended invocation point. It does not name alternative tools or explicitly say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieveLook something up in memoryARead-onlyIdempotent
Retrieve canonical (keyholder-approved) memory relevant to a query. Returns a scored, BUDGETED payload: mn:// pointers plus snippet renditions, never raw dumps. Scope is partition-walled; payload size is logged to the Foresight counters. Cite the returned rid when the action resolves.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| query | Yes | what you need to remember | |
| scope | No | partition to search (must be inside this agent's MAGNEMO_SCOPE) | |
| budget | No | max payload bytes; results are truncated/downgraded to fit and the truncation is logged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, idempotentHint=true, and destructiveHint=false Score. The description goes beyond annotations by disclosing that the payload is budgeted and truncated/downgraded to fit, that scope is partition-walled, that payload size is logged to Foresight counters, and that results are never raw dumps. This materially enriches the agent's understanding of side effects and constraints.
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?
The description is two dense sentences that front-load the core purpose and then add essential behavioral details. Every clause adds value, and there is no filler or 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 absence of an output schema, the description reasonably explains the return shape: mn:// pointers plus snippet renditions, never raw dumps. It also covers budget truncation, scope constraints, and logging. It stops short of explaining edge cases like empty results or what rid means, but for a retrieval tool with rich annotations and schema, it is largely complete.
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 75%, so the schema documents most parameters. The description adds meaning by explaining that budget controls payload truncation/downgrade and that scope is partition-walled. It also clarifies that results are scored and budgeted, which relates to the budget parameter. The k parameter is not explicitly addressed, but the schema provides range and default context.
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 and resource: retrieve canonical, keyholder-approved memory relevant to a query. It also distinguishes the tool's behavior from a general memory lookup by specifying scored, budgeted payloads with mn:// pointers and snippet renditions. This clearly separates it from the unrelated sibling tools.
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 gives clear context for when to use this tool: when canonical memory relevant to a query is needed segments. It also provides a usage instruction ('Cite the returned rid when the action resolves'). However, it does not explicitly state when not to use it or name alternatives, missing the top tier of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stageDraft an entry for a person to reviewA
Stage a memory candidate for KEYHOLDER review. This is the only write verb: the note lands in _staging/ with mandatory provenance and never touches canon. Returns the staged id, its salience, and a duplicate flag. Malformed or paperless (no provenance) notes are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | ||
| provenance | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: the note lands in _staging/, never touches canon, requires provenance, returns the staged id/salience/duplicate flag, and refuses malformed or paperless notes. This is consistent with readOnlyHint=false and no contradiction exists.
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?
The description is three tight sentences with no filler. The core purpose is front-loaded, followed by location/side-effect constraints and return/refusal behavior. 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?
Given there is no output schema, the description usefully lists the return values and refusal conditions. The nested input schema carries the parameter detail. It could more fully explain what a duplicate flag or salience means, but the agent has enough to invoke the tool correctly.
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 0%, so the description must compensate, but it only repeats that provenance is required and that paperless notes are refused—both already implied by the schema. It adds no meaningful guidance about the note object, required fields, partitions, or staged-output semantics.
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 opens with a specific verb and resource: 'Stage a memory candidate for KEYHOLDER review.' It also clarifies scope by stating this is 'the only write verb' and that the note 'lands in _staging/' and 'never touches canon,' clearly distinguishing it from its read-related siblings.
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 provides clear context: use this when you need to stage a memory candidate for review, and it is the only write verb among the siblings. It does not explicitly name alternatives or state when not to use it, but the 'only write verb' framing gives strong routing guidance.
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.
4 tool updates
v0.6.4- First observed
bootpack - First observed
handoff - First observed
retrieve - First observed
stage
TDQS
Scored across 4 tools
Each tool maps to a distinct lifecycle action: querying approved memory, proposing new memory, loading the boot context, and closing a session. There is no real overlap, since bootpack is a deterministic startup read while retrieve is on-demand canonical lookup.
All four names are lowercase single-word commands, forming a consistent imperative style. They do not follow a verb_noun scheme, but the naming convention is uniform and predictable across the set.
Four tools is tight but appropriate for the server's narrow, well-defined purpose. Each tool has a distinct role and none feels redundant or extraneous.
The toolset covers the full agent-facing memory lifecycle: wake with bootpack, read with retrieve, propose with stage, and close with handoff. Keyholder review appears intentionally external, and the deterministic bootpack plus append-only handoff ledger leaves no obvious dead end.
Maintenance
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
An MCP memory server. One memory your agents share — across models, devices and apps.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Cloud-hosted MCP server for durable AI memory
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.5 npmMIT
- AlicenseAqualityBmaintenanceA self-hosted MCP server that gives AI agents shared, long-term memory over a git-backed folder of markdown, enabling persistent knowledge search, read, and write without a database.1624 npm17MIT
- AlicenseAqualityBmaintenanceA local-first MCP server that provides a shared Markdown-based memory for AI coding agents, enabling cross-agent context persistence via tools like memory_search and memory_capture.161MIT
- AlicenseAqualityAmaintenanceAn MCP server that gives AI agents durable, temporal memory over local markdown vaults, with tools for searching, asserting facts, querying point-in-time state, and reinforcing useful knowledge.15169 npmMIT