Renor
Renor is a local, file-backed memory server for coding agents: it stores facts and notes as Markdown in your vault and serves them back through search, keyword, entity, and temporal-fact tools over MCP.
Search memory (
search) — the default tool for natural-language and identity questions; returns current lifecycle facts first, then semantic chunks (each may carry asession_date), with an optional evidence pass that prepends a dated item table.Extract evidence (
evidence) — question-conditioned retrieval that lists every relevant item/event/amount with dates for count/how-many/aggregate questions; it never totals them for you, and gated byRENOR_EVIDENCE_MODE(override withforce: true); cached results replay free.Exact keyword lookup (
keyword) — BM25/exact-phrase matching (no OR/AND/NEAR operators), falling back to note paths and frontmatter so task ids, slugs, and filenames resolve to their note.Look up entities (
entity) — resolve a person, project, or concept by name or alias to its details.Save durable facts (
remember_fact) — ledger-backed subject/predicate/object writes that supersede the previous current value for that pair, returning a receipt.Read facts (
facts) — all current facts for an entity, optionally as-of a timestamp or including superseded history.Append daily notes (
note) — write freeform text into a dated daily note (defaults to today).Check the vault (
status) — report counts of notes, chunks, entities, facts, and relations in the index.
Memory is plain Markdown in $VAULT_PATH with a rebuildable SQLite index, runs locally with no account or key, and only sends data off-machine if you configure an embedding or evidence model.
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., "@Renorrecall what we decided about the API authentication"
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.
Português (Brasil) → README.pt-BR.md
Renor

Self-hosted Renor, real session: Claude Code saves a decision, a fresh Codex session recalls it. Waiting time sped up.
Renor is memory for coding agents: it keeps what you tell Claude Code, Codex or Cursor in a folder of Markdown files on your machine, and serves it back to any of them over MCP.
Every new agent session starts from zero: you re-explain the project, last week's decision and why, the thing you corrected twice. With Renor, one agent saves it and the next one finds it. The memory is plain files you own. It runs locally, needs no account or API key, and sends nothing off your machine unless you configure a model or send anonymous usage numbers (on by default, with a first-run notice; renor-engine telemetry off or DO_NOT_TRACK=1 turns them off). Your memory text is shared only if you say yes to that separately. A hosted version with no install is at https://renor.cloud.
Quickstart
You need Node 22 and git. The install is the only step that needs the network.
git clone https://github.com/renorai/renor-engine.git
cd renor-engine
node -v # v22.16 or newer
npm ci && npm run build
node scripts/smoke-self-hosted.mjsThe last command starts the MCP server, saves one fact (Ada favorite_color cerulean), searches for it three ways and stops. It works in a temporary folder that it deletes afterwards, so it never touches your notes. It ends with:
PASS: self-hosted stdio MCP can remember and retrieve a current fact.Downloaded a ZIP instead of cloning? It has no git history to stamp the build with, so build with RENOR_BUILD_COMMIT=0000000 npm run build instead. A wrong Node version or skipped install scripts: see Troubleshooting.
Related MCP server: agtmem-mcp
Connect your agent
Without a clone. With Node 22 installed, one line registers the published package. Your notes go to a hidden .renor folder in your home directory (~/.renor, printed on stderr at start; it never reuses an existing renor folder); to use another folder, add -e VAULT_PATH=/absolute/path to the claude line or --env VAULT_PATH=/absolute/path to the codex line. The first start downloads about 130 MB and takes about 15 seconds; if your agent shows one failed connection, restart it.
claude mcp add --scope user renor-local -- npx -y renor-engine mcp
codex mcp add renor-local -- npx -y renor-engine mcpFor Cursor or any other client, the server is the command npx with the arguments -y renor-engine mcp. In Cursor or VS Code (GitHub Copilot), one click adds it:
claude mcp remove renor-local and codex mcp remove renor-local undo the two lines above. The rest of this section is the same thing from a clone, which also lets you change the code.
From a clone.
Pick a folder for your memory (a new, empty one is fine; an Obsidian vault works too) and index it. Run this, and the commands below, from the renor-engine directory in the same shell:
export VAULT_PATH="$HOME/renor-notes" # absolute path; created if missing
node dist/cli.js indexEach command below starts Renor with the Node 22 you are using now (node -p process.execPath), so the agent does not need Node 22 on its own PATH. In a new terminal, run the export line again first: each command stops with VAULT_PATH: run the export line above first rather than register a server that cannot start (an agent shows that only as "Connection closed").
Claude Code
claude mcp add --scope user renor-local -e VAULT_PATH="${VAULT_PATH:?run the export line above first}" -- "$(node -p process.execPath)" "$PWD/dist/cli.js" mcpRestart Claude Code; /mcp lists renor-local in every project. claude mcp remove renor-local undoes it.
Codex
codex mcp add renor-local --env VAULT_PATH="${VAULT_PATH:?run the export line above first}" -- "$(node -p process.execPath)" "$PWD/dist/cli.js" mcpRestart Codex; codex mcp list shows it. codex mcp remove renor-local undoes it.
Cursor
Cursor reads MCP servers from ~/.cursor/mcp.json (every project) or .cursor/mcp.json (one project). This prints the entry:
VAULT_PATH="${VAULT_PATH:?run the export line above first}" node -e 'console.log(JSON.stringify({ mcpServers: { "renor-local": { command: process.execPath,
args: [process.cwd() + "/dist/cli.js", "mcp"], env: { VAULT_PATH: process.env.VAULT_PATH } } } }, null, 2))'Put it in that file, or merge the renor-local entry into an existing mcpServers, then check that renor-local is enabled in Cursor's MCP settings. (The cursor-plugin/ folder of this repository is the Cursor plugin for the hosted service at renor.cloud, which needs a Renor account; it does not connect to this engine.)
Any other MCP client: the command is node dist/cli.js mcp (stdio) with VAULT_PATH set.
Then ask your agent to remember something, and ask about it in a new session. What an agent saves is searchable at once. A Markdown file you add or edit by hand is searchable after you run node dist/cli.js index again.
Run it on a server
One container serves your memory over HTTP to every agent, from any machine, with OAuth sign-in for you alone. It needs no model or key; the memory stays on a volume you own.
docker build -t renor-engine https://github.com/renorai/renor-engine.git
docker run -d --name renor -p 127.0.0.1:3471:3471 -v renor-data:/data \
-e MVP_OWNER_EMAIL=you@example.com -e MVP_OWNER_PASSWORD="$(openssl rand -base64 18)" \
-e MVP_ALLOWED_CALLBACK_URIS=http://localhost:39472/callback renor-engine
claude mcp add --transport http --scope user --callback-port 39472 renor http://localhost:3471/mcpSign in from /mcp in Claude Code with that email and password (docker exec renor printenv MVP_OWNER_PASSWORD). Railway (railway.toml) and Fly.io (fly.toml) work the same way; Docker and one-click hosts has the steps for each.
What is stored where
What | Where |
Your notes | Any Markdown files in |
What agents save | Appended as Markdown in the same folder: facts to |
Search index | SQLite at |
Everything Renor keeps is in that one folder, so back it up, sync it or move it like any other folder. Nothing leaves your machine unless you set a model key: EMBEDDING_PROVIDER=openai sends your notes' text to OpenAI to embed it, and RENOR_EVIDENCE_MODE=auto or always with an evidence-model key (RENOR_EVIDENCE_API_KEY or an OLLAMA_* key) makes search send the notes it matched to that model. The evidence pass is off unless RENOR_EVIDENCE_MODE is set, so a key alone sends nothing. Every setting and its default: docs/ENVIRONMENT-VARIABLES.md.
Search without embeddings. With nothing set, Renor uses no embedding model, so a note is found by its exact words: blue notebook finds "The blue notebook is on the desk", but where is my notebook? does not. Saved facts are found either way. For search by meaning, set EMBEDDING_PROVIDER=openai with OPENAI_API_KEY, or local to download a model once and run it on this machine, then run node dist/cli.js rebuild so existing notes are embedded (details).
More
docs/self-hosting.md: troubleshooting, embeddings, the HTTP server with OAuth sign-in, connecting agents over HTTP, the tool lists, owner names, multi-agent ("hive") tools (set
RENOR_CONNECTION_NAMEper agent), and how the vault is protected.skill/SKILL.md: instructions to give your agent so it recalls and saves memory without being asked. Most of it names the hosted tools (
get_context,remember); therenor-localserver above has other names (search,remember_fact,note), listed in its Stdio section.
Renor is a single-owner engine: one person's notes, one set of agents. It is not a multi-user product.
Contributing, license, security
Contributions are welcome. CONTRIBUTING.md covers setup and tests and lists good first issues. Renor's own code is Apache-2.0 (LICENSE); 1.0.0 was released under AGPL-3.0; 1.1.0 and later are Apache-2.0; files imported from the upstream project stay ISC (NOTICE, UPSTREAM.md). Report vulnerabilities privately as described in SECURITY.md, not in a public issue.
If Renor saves you re-explaining, a ⭐ helps other developers find it.
Available Tools
8 toolsentityBInspect
Look up an entity (person, project, concept) by name or alias. Returns entity details or null.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entity name or alias to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a key behavioral trait—exact-name lookup returning details or null on miss—which implies read-only and non-exhaustive matching, but says nothing about matching semantics (case sensitivity, fuzzy vs exact, ambiguity handling) or auth.
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, zero filler, with the action and the return behavior both front-loaded.
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 simple single-parameter read with no output schema, stating 'returns entity details or null' covers the essential contract. However, the vague tool name 'entity' and the unresolved question of how this differs from sibling retrieval tools leave real gaps for an agent choosing a tool.
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% and there is only one parameter already documented as 'Entity name or alias to look up'. The description echoes 'name or alias' without adding format or resolution rules, so 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 plus resource ('Look up an entity') and even enumerates what counts as an entity (person, project, concept). It does not differentiate from sibling tools like search or facts, so an agent can't tell from the description alone which lookup path to take.
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?
No indication of when to use this versus 'search', 'facts', or 'keyword', which all plausibly retrieve related information. The only implied usage is 'you have a name', which is thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evidenceAInspect
Question-conditioned evidence extraction. Retrieves like search and then lists every distinct item/event/amount relevant to the question, with dates. Best for how-many / how-much / count / list / aggregate questions about the user's history. It never computes totals — count or sum the items yourself and prefer items with dates matching the question window. Identical questions over unchanged history replay from a content-addressed cache at zero model cost. Gated by RENOR_EVIDENCE_MODE (off | auto | always); call with force: true to run even when auto declines.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Number of retrieval hits to return (1-100, default 20) | |
| force | No | Run the second pass even when auto gating declines (ignored when mode is off) | |
| query | Yes | Natural language question about the user's history |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses that totals are never computed (the caller must count/sum), recommends preferring items whose dates match the question window, explains cache replay at zero model cost for identical questions, and documents the RENOR_EVIDENCE_MODE gating plus the `force` escape hatch. That is unusually rich behavioral context for a tool with zero structured metadata.
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 dense sentences, front-loaded with the core behavior before the usage guidance, the counting caveat, and the gating mechanics. Every sentence carries actionable information with no filler or restatement of the name.
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?
With no annotations and no output schema, the description still covers what is returned (distinct items/events/amounts with dates), what is deliberately not returned (no computed totals), how caching affects repeated calls, and how the mode gate behaves. An agent has everything needed to call it correctly and interpret the result.
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 three parameters are already documented with types and defaults. The description adds narrative meaning to `force` (run even when auto declines) but says nothing about `topK` or how it interacts with the second enumeration pass, so it only marginally exceeds the schema baseline.
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 ("Question-conditioned evidence extraction") and concretely describes the two-pass behavior: retrieval followed by enumeration of distinct items/events/amounts with dates. It also names the sibling it overlaps with ("Retrieves like search") and pins down the question class it is for, so an agent can distinguish it from `search` 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?
"Best for how-many / how-much / count / list / aggregate questions about the user's history" gives an explicit when-to-use condition, and the gating note plus `force: true` tells the agent how to override a declined call. It stops short of explicitly saying which sibling to use instead for non-aggregate lookups, leaving that inference to the reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
factsAInspect
All current lifecycle facts for an entity (name / entityName / subject; aliases). Prefer search for a natural-language question. asOf / includeHistory for temporal reads.
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | ISO timestamp — facts valid at that time | |
| name | No | Alias of entityName | |
| entityName | No | Entity name (also accepts name / subject) | |
| includeHistory | No | include superseded facts |
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 key default: current facts only, with `includeHistory` needed for superseded facts and `asOf` for point-in-time reads. It says nothing about permissions, empty/missing entity behavior, result shape, or volume/pagination for a tool that returns 'All' facts.
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 clauses, front-loaded with purpose before the routing hint and the temporal hints. The final clause is telegraphic ('asOf / includeHistory for temporal reads') and slightly fragments the prose, but nothing is wasted.
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 zero-required-param read tool with a fully documented schema and no output schema, the essentials are present: default scope, history toggle, temporal read. It is not complete on what an entity identifier collision or a nonexistent entity yields, which matters given three interchangeable alias fields.
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 four parameters are already documented, including that asOf is an ISO timestamp and includeHistory means superseded facts. The description's 'asOf / includeHistory for temporal reads' restates the schema rather than adding format, precedence, or interaction rules between the two. 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?
States a concrete resource and scope: 'All current lifecycle facts for an entity', and clarifies the entity identifier aliases (name/entityName/subject). It is distinguishable from sibling `search` and, by implication, from `remember_fact` since this reads rather than writes. It stops short of a crisp verb-resource framing (there is no explicit verb).
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?
Explicitly routes the agent: 'Prefer search for a natural-language question', which is exactly the sibling disambiguation an agent needs. It gives no guidance against `entity`, `evidence`, or `keyword`, and doesn't state what happens if the entity is unknown, so it falls short of a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keywordAInspect
Exact keyword/BM25 search only: the query is matched as one exact phrase, and OR, AND, NEAR and * are plain words, not operators. Use search for identity and natural-language questions. Hyphens are quoted server-side. When the term appears in no chunk text, it is matched against note paths and frontmatter too, so a task id, slug or file name finds the note that carries it (reason: "note-identity").
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Number of results (1-50, default 20) | |
| query | Yes | Words to find, matched as one exact phrase: OR, AND, NEAR and * are plain words, not operators |
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 substantial work: it discloses that operators are inert, that hyphens are quoted server-side, and that unmatched terms fall back to note paths/frontmatter with a 'note-identity' reason. It omits result ordering/ranking and any indication of cost or latency.
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 key differentiator 'Exact keyword/BM25 search only' is front-loaded and the sentences are dense with useful information. The trailing '(reason: "note-identity")' is an internal artifact that costs clarity more than it earns.
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 two-parameter, no-annotation, no-output-schema tool, the description covers matching semantics, operator behavior, and fallback resolution adequately. Ranking/ordering of matches and the meaning of topK relative to the fallback path are the remaining 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 description coverage is 100% and the `query` semantics (exact phrase, operators treated as plain words) are already stated in the schema, so the description mostly restates it. It adds only marginal value by explaining the path/frontmatter fallback for unmatched terms; `topK` behavior is not elaborated 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 opens with a concrete verb+mechanism ('Exact keyword/BM25 search only'), states the matching rule, and explicitly frames itself against the sibling `search`, so an agent can distinguish the two 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 routing rule ('Use search for identity and natural-language questions'), which tells the agent when to prefer the alternative. It stops short of covering the other siblings (evidence, entity, note) or stating an explicit when-not condition for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noteBInspect
Store a memory entry in the daily notes. Appends text to the daily note for the given date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) | |
| text | Yes | Text to remember | |
| source | No | Ignored. The author is this connection's header-form name, or mcp when the connection has no usable name. Never a file path or document name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| path | Yes | |
| detail | No | |
| warning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does communicate the key trait that this is additive (append, not overwrite). It omits whether a missing note file is created, whether repeated calls duplicate text, and any auth or rate-limit 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?
Two short sentences, front-loaded with the action. There is mild redundancy between 'Store a memory entry in the daily notes' and 'Appends text to the daily note', but nothing extraneous follows.
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?
An output schema exists, so return values need not be explained, and all three parameters are documented in-schema. Still, for a mutation tool with zero annotations, the description should state side effects such as note creation and duplicate handling; its absence leaves a real gap.
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 the schema already explains the date format, default-to-today behavior, and the unusual ignored 'source' parameter. The description only echoes 'given date' and adds nothing beyond the schema, 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?
The description states a specific verb and resource: it appends text to the daily note for a given date. That is clearly distinct from a generic write, but it never distinguishes this append-a-journal-entry behavior from siblings like remember_fact or facts, which serve overlapping memory-storage purposes.
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?
There is no guidance on when to use this tool instead of remember_fact, entity, or evidence, and no exclusions. An agent choosing among six memory-related siblings gets no routing signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remember_factAInspect
Durable memory write: stores (or supersedes) a fact about a subject. Ledger-first (survives index rebuild), temporal (closes the previous current fact for that subject+predicate). Returns a receipt. Use for "remember that…" statements. Confidence is not representable in the ledger.
| Name | Required | Description | Default |
|---|---|---|---|
| object | Yes | The current value, e.g. "Memory Company". A single string: pass a list or a struct as ONE joined string, never as JSON or an array. | |
| source | No | Ignored. The author is this connection's header-form name. When the connection has no usable name, the engine default (agent) is stored. Never a file path or document name. | |
| subject | Yes | Who or what the fact is about, e.g. "Renor". A single string, not a nested object. | |
| predicate | Yes | The relation or attribute being asserted, e.g. "works_at". A short single-line string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes |
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 does so well: it discloses ledger-first durability, temporal supersession that closes the previous current fact, that it returns a receipt, and that confidence is not representable. It does not cover permissions, rate limits, or exact reversal behavior, which prevents a top score.
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 compact and front-loaded: it begins with the core operation, then layers in durability, temporal behavior, return behavior, and usage trigger. Every sentence adds information without repetition.
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?
An output schema exists, so omitting receipt details is acceptable, and the description sufficiently explains the write model, supersession, and usage trigger. It leaves some operational context unexplained, such as authorization or duplicate-handling nuances, but is complete enough to call 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 100%, so the parameter fields are already fully documented by the schema. The description adds useful semantics around subject+predicate temporal supersession and the fact that confidence cannot be stored, but it does not add 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 and resource: a durable memory write that stores or supersedes a fact about a subject. It distinguishes itself from read-oriented siblings like facts and search by framing the operation as a write, though it does not explicitly name the sibling alternatives.
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 a clear trigger phrase, 'Use for "remember that…" statements,' which helps the agent recognize when to invoke it. It does not explicitly state when not to use it or compare it with sibling tools such as note or evidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchAInspect
DEFAULT tool for questions about the user or the vault (who/what/where/current project, preferences, goals). Prepends current lifecycle facts when they match; then semantic chunks. Each hit may include session_date — render excerpts as "[Session date: <session_date>] ". Do not rewrite stored chunk text. When RENOR_SEARCH_EVIDENCE is on, search also runs the H10-v4 evidence second pass (full source notes, 12-note/6k cap, cached) and prepends a dated item table as the first hit. Do not use keyword search first for identity questions. Write durable facts with remember_fact.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Number of results (1-100, default 20) | |
| query | Yes | Natural language search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose real behavior: output ordering (matching lifecycle facts first, then chunks), per-hit session_date with a required rendering template, a no-rewrite constraint on chunk text, and the conditional evidence second pass with its 12-note/6k cap and caching. It omits latency, permissions, and failure behavior, but the return shape is unusually well specified.
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 purpose is front-loaded, but the body drifts into implementation detail — RENOR_SEARCH_EVIDENCE, 'H10-v4 evidence second pass', '12-note/6k cap' — which is internal jargon an agent cannot act on. It also mixes formatting instructions into the same run-on block rather than separating routing from output handling.
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 2-parameter, annotation-free, no-output-schema tool, this covers purpose, sibling routing, result composition, and mandatory rendering conventions — enough to call and consume it correctly. The gaps are around comparisons to the remaining search siblings rather than missing mechanics.
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 both query and topK are already documented with type and range. The description implies the query style (natural-language who/what/where questions) but adds no format, syntax, or topK tuning guidance beyond the schema baseline.
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?
Opens with a specific role statement — the DEFAULT retrieval tool for questions about the user or the vault, scoped to identity/preference/project questions — and clarifies it returns lifecycle facts plus semantic chunks. It distinguishes itself from keyword search and from remember_fact, though it says nothing about how it differs from the evidence, entity, or facts 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?
Explicit routing guidance: use this first for identity questions, do not start with keyword search, and send durable writes to remember_fact. It lacks exclusions or comparisons against evidence/entity/facts, which are the closest remaining alternatives, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusAInspect
Get vault index statistics: count of notes, chunks, entities, facts, and relations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| facts | Yes | |
| notes | Yes | |
| chunks | Yes | |
| entities | Yes | |
| relations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. 'Get' implies a read-only operation, and the description names the categories of statistics returned, but it does not explicitly confirm safety, freshness, caching, permissions, or side-effect behavior.
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 a single front-loaded sentence with no filler. The verb and resource come first, followed by the specific statistics available.
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 zero-parameter status tool with an output schema, the description provides enough context to understand what the tool returns. Return-value formatting is covered by the output schema, so the description need not repeat it.
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?
The schema has zero parameters, so there is nothing for the description to clarify at the parameter level. The baseline for a parameterless tool is therefore 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 gives a specific verb and resource: 'Get vault index statistics,' and enumerates the exact counts returned (notes, chunks, entities, facts, relations). This clearly distinguishes it from sibling tools like entity, facts, keyword, and search, which deal with records or searching rather than index-level statistics.
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?
Usage is implied by the tool name and the statistics-oriented description: an agent can infer it is for inspecting index size/contents. However, the description does not explicitly state when to use this tool versus alternatives such as search or facts, nor does it mention any prerequisites or exclusions.
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.
3 tool updates
v1.3.0- Changed
note1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": {}, + "properties": { + "detail": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "path": { + "type": "string" + }, + "warning": { + "type": "string" + } + }, + "required": [ + "ok", + "path" + ], + "type": "object" +}
- Changed
remember_fact1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": {}, + "properties": { + "action": { + "enum": [ + "supersede", + "store", + "nochange" + ], + "type": "string" + } + }, + "required": [ + "action" + ], + "type": "object" +}
- Changed
status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": {}, + "properties": { + "chunks": { + "type": "number" + }, + "entities": { + "type": "number" + }, + "facts": { + "type": "number" + }, + "notes": { + "type": "number" + }, + "relations": { + "type": "number" + } + }, + "required": [ + "notes", + "chunks", + "entities", + "facts", + "relations" + ], + "type": "object" +}
8 tool updates
v1.2.0- First observed
entity - First observed
evidence - First observed
facts - First observed
keyword - First observed
note - First observed
remember_fact - First observed
search - First observed
status
TDQS
Scored across 8 tools
The retrieval tools (search, keyword, evidence, facts, entity) overlap in input space, but the descriptions draw useful boundaries: default semantic search, exact BM25, question-conditioned aggregation, lifecycle facts, and entity lookup. Selection guidance is clear enough to avoid most misselection, though entity vs facts remains slightly fuzzy.
The tool names mix bare nouns (entity, facts, status, note, evidence, keyword, search) with one verb_noun form (remember_fact). There is no case or separator chaos, but also no predictable pattern. Readable, yet inconsistent.
Eight tools is well within the appropriate range for a memory/search server, and each maps to a distinct capability: fact write, note append, entity/fact lookup, status, and several retrieval modes. Some retrieval variants are close, but the count itself is healthy.
Core memory read/write and search are present, but lifecycle coverage lacks explicit forget/delete for facts or notes, note update, and entity/relation mutation despite relations appearing in status. Agents can search and append but will hit dead ends for cleanup and relation management.
Maintenance
Related MCP Connectors
- TaprootOAuthcom.taproothq
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Hosted MCP memory for coding agents: persistent across sessions, editable markdown, team sharing.
- KogniteOAuthdev.kognite
Hosted agent memory: store, search, and recall facts across sessions from any MCP client.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides cross-session persistent memory for coding agents via MCP tools to store, retrieve, and manage notes with hybrid keyword/semantic search and automatic deduplication.8306 npmMIT
- AlicenseAqualityBmaintenanceEnables coding agents to store, search, and retrieve long-term memory as plain Markdown files with a disposable SQLite index, including note management, decision/bug tracking, and codebase symbol lookup via MCP.8MIT
- AlicenseNot gradedqualityBmaintenanceProvides coding agents with persistent local memory by exposing tools to save, search, and retrieve decisions, bugs, and context as Markdown with hybrid keyword and semantic search.4MIT
- AlicenseNot gradedqualityAmaintenanceGives coding agents a persistent memory by searching a local, read-only index of existing markdown and letting them write findings back as notes that the next session can retrieve. It serves ranked, context-sized results over MCP, injects standing conventions at session start, and keeps data on your machine with secret redaction and archive-only deletion.35 PyPIMIT