Skip to main content
Glama

Português (Brasil) → README.pt-BR.md

Renor

Claude Code saves a decision to Renor; a fresh Codex session recalls it
Self-hosted Renor, real session: Claude Code saves a decision, a fresh Codex session recalls it. Waiting time sped up.

engine-public-ci

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.mjs

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

For 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:

Add to Cursor Add to VS Code

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 index

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

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

Restart 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.

Deploy to Render

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

Sign 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 $VAULT_PATH. Renor reads them; edit them with anything.

What agents save

Appended as Markdown in the same folder: facts to System/Memory Events Ledger.md, notes to Memory/Daily/<date>.md.

Search index

SQLite at $VAULT_PATH/.semantic-memory/index.db. Derived: node dist/cli.js index rebuilds it from the Markdown.

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_NAME per 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); the renor-local server 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 tools
entityBInspect

Look up an entity (person, project, concept) by name or alias. Returns entity details or null.

NameRequiredDescriptionDefault
nameYesEntity name or alias to look up

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
topKNoNumber of retrieval hits to return (1-100, default 20)
forceNoRun the second pass even when auto gating declines (ignored when mode is off)
queryYesNatural language question about the user's history

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
asOfNoISO timestamp — facts valid at that time
nameNoAlias of entityName
entityNameNoEntity name (also accepts name / subject)
includeHistoryNoinclude superseded facts

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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").

NameRequiredDescriptionDefault
topKNoNumber of results (1-50, default 20)
queryYesWords to find, matched as one exact phrase: OR, AND, NEAR and * are plain words, not operators

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)
textYesText to remember
sourceNoIgnored. 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

NameRequiredDescription
okYes
pathYes
detailNo
warningNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
objectYesThe 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.
sourceNoIgnored. 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.
subjectYesWho or what the fact is about, e.g. "Renor". A single string, not a nested object.
predicateYesThe relation or attribute being asserted, e.g. "works_at". A short single-line string.

Output Schema

NameRequiredDescription
actionYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

statusAInspect

Get vault index statistics: count of notes, chunks, entities, facts, and relations.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
factsYes
notesYes
chunksYes
entitiesYes
relationsYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv1.3.0
    • Changednote1 field changed
      • changedOutput 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"
        +}
    • Changedremember_fact1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": {},
        +  "properties": {
        +    "action": {
        +      "enum": [
        +        "supersede",
        +        "store",
        +        "nochange"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "action"
        +  ],
        +  "type": "object"
        +}
    • Changedstatus1 field changed
      • changedOutput 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"
        +}
  2. 8 tool updatesv1.2.0
    • First observedentity
    • First observedevidence
    • First observedfacts
    • First observedkeyword
    • First observednote
    • First observedremember_fact
    • First observedsearch
    • First observedstatus

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides cross-session persistent memory for coding agents via MCP tools to store, retrieve, and manage notes with hybrid keyword/semantic search and automatic deduplication.
    8
    306 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 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.
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Gives 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 PyPI
    MIT