SecondBrain
You can use this server to search, read, capture, update, review, and maintain a shared local SecondBrain memory vault via MCP tools.
Search notes and history with hybrid keyword/semantic retrieval, filters, and context budget (
memory_search).Read a note or historical catalog entry (
memory_get).Traverse ontology relations around a note (
memory_related).Capture durable memory and append dated sections to existing notes (
memory_capture,memory_update).Manage an isolated candidate review queue: create, list, get, approve, reject, expire (
memory_candidate_*).View recent per-tool session logs and check index/harvester status (
memory_recent,memory_status).Rebuild the local index, audit memory quality, and run retrieval evaluation (
memory_rebuild,memory_audit,memory_eval).
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., "@SecondBrainsearch my memory for the decision on API auth"
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.
SecondBrain
One shared, local-first memory for every AI coding agent you use.
Codex forgets what Claude Code learned. Cursor starts from zero on a project Antigravity has worked on for weeks. Each tool keeps its own history in its own private store, so you re-explain the same context over and over.
SecondBrain fixes that. Your memory is a plain Markdown vault plus a tiny MCP server. Every MCP-capable agent reads and writes the same notes, so context follows you across tools and machines.
Codex ─┐
Claude Code ─┤
Cursor ─┼──▶ SecondBrain MCP ──▶ ~/SecondBrain (Markdown + local index)
Antigravity ─┘ (memory_search, AI_CONTEXT/ 10_Projects/ 30_Knowledge/
your agent ─┘ memory_capture, ...) 40_Decisions/ 50_Conversations/ ...Local-first. Human-readable Markdown on your disk. No account required.
Zero heavy deps. Core tools use only the Python standard library. Semantic search is optional and runs locally via Ollama.
Shared by protocol. Any agent that speaks MCP joins automatically.
Governed. A curated ontology plus
auditandevalcommands keep a long-lived memory from rotting.
Jump to: Why · Install · Tools · How it works · Why it's worth a star · Privacy · Layout
Why this exists
AI coding agents are getting genuinely useful, but their memory is siloed:
Switch from one agent to another and you lose all accumulated context.
The same preferences, decisions, and project state get re-typed constantly.
There is no single place you own and can read, edit, and back up.
SecondBrain makes memory a file format + a protocol instead of a feature locked inside one app. See docs/comparison.md for how this differs from hosted memory services like Mem0 and Zep.
Related MCP server: Jarvis Markdown MCP
5-minute install
Latest GitHub version / another Mac: follow the macOS install and upgrade guide (한국어). It installs v0.2.0 from source; PyPI/npm may still carry an older release.
1. Install
pip install secondbrain-memory(Optional) local semantic search:
# https://ollama.com — then:
ollama pull bge-m3If you skip Ollama, set retrieval.semantic.enabled: false in your config and
SecondBrain runs keyword-only.
2. Create your vault
secondbrain init ~/SecondBrain
export SECONDBRAIN_CONFIG="$HOME/.config/secondbrain/secondbrain.yaml"
secondbrain indexThis scaffolds the vault (with example notes you can delete) and writes a config
to ~/.config/secondbrain/secondbrain.yaml.
3. Connect your agents
# macOS / Linux
python3 install/install_unix.py
# Windows (PowerShell)
powershell -ExecutionPolicy Bypass -File install\install_windows.ps1On macOS the harvester auto-schedules via a LaunchAgent; on Linux it uses a
systemd --user timer if systemctl is available. Both are optional and
controlled by automatic_capture.enabled in your config.
Run the installer from a clone of this repository, using the same Python environment that holds the package. The explicit config above prevents the repository’s demo vault from overriding your personal vault.
The installer registers the MCP server with each agent in your config and drops a shared-memory rule into each agent's global instructions. Restart your AI apps.
Prefer to wire one agent by hand? Point any MCP client at:
{
"mcpServers": {
"secondbrain": {
"command": "python3",
"args": ["-m", "secondbrain.mcp_server"],
"env": { "SECONDBRAIN_CONFIG": "/absolute/path/to/secondbrain.yaml" }
}
}
}Or launch it with npx secondbrain-memory (the npm package is a thin launcher
for the Python server).
4. Verify
secondbrain health
secondbrain search "hybrid search" --top 3What your agents can do
The MCP server exposes sixteen tools:
Tool | Purpose |
| Hybrid keyword + semantic search over notes and history |
| Read a note or a historical catalog entry |
| Traverse 1-2 ontology hops around a note |
| Save durable user/decision/project/knowledge/inbox memory |
| Append a dated section to an existing note |
| Add an idempotent item to the isolated review queue |
| List candidates by status, level, scope, or source |
| Read one candidate and its provenance |
| Preview or hash-lock an approval into existing Markdown |
| Reject a candidate without changing Markdown |
| Expire a candidate without changing Markdown |
| Recent per-tool session logs |
| Index and harvester status |
| Rebuild the index |
| Flag stale/duplicate/conflicting/unresolved memory |
| Report retrieval recall@k and MRR |
The same actions are available on the CLI: secondbrain search|index|audit|eval| harvest|backup|health|config.
How it works
Vault (source of truth). Markdown notes under a PARA-style layout. Notes carry lightweight frontmatter (
type,status, relations).Index (derived, disposable). SQLite FTS5 for keywords + optional local embeddings, fused with reciprocal rank fusion. Delete it any time; rebuild with
secondbrain index.Memory lifecycle. Optional L0-L3/status/scope metadata enables explicit filtering without changing unfiltered ranking. External memories enter a disposable SQLite review queue and require preview plus a target hash before they can append provenance-marked canonical Markdown. See docs/memory-lifecycle.md.
Ontology. A small relation vocabulary connects canonical notes; search results get a light boost from directly linked notes.
Harvester. Optionally scans your local agent histories, including configured Codex account homes, redacts secrets, and builds a searchable, summary-only catalog — never full transcripts. Large Codex logs are streamed and overlapping refreshes are locked out.
Runtime health. Checks actual scheduler registration and index/harvest freshness when automatic capture is enabled; an old success receipt is insufficient.
Config. One
secondbrain.yamldrives everything: pointvault_rootanywhere and the whole toolchain follows.
Why it is worth a star — three differentiators
Cross-agent by default. Memory lives in files + MCP, so Codex, Claude Code, Cursor, and Antigravity share one brain. Hosted memory services center on an SDK/backend your app calls; here, sharing is the starting point.
Local-first and inspectable. The whole memory is Markdown you can
git diff, grep, and edit. Embeddings run on your machine. No service to run, no data leaving your laptop.Governed, measurable memory. A curated ontology plus
audit(health) andeval(recall@k / MRR) treat memory quality as something you can verify — not just an ever-growing store.
Full detail: docs/comparison.md.
Screenshots & demo
Scripts to reproduce the README media live in docs/screenshots.md.
Privacy & safety
Ordinary personal info is stored only if you opt in (
privacy.ordinary_personal_information: allowed).The MCP server and harvester refuse to store values that look like passwords, API keys, tokens, or private keys.
Backups are AES-256 encrypted (
secondbrain backup).The MCP server refuses to read or write outside your configured vault.
Repository layout
secondbrain-oss/
├── secondbrain.yaml # config (points at ./vault by default)
├── src/secondbrain/ # config-driven Python package
│ ├── config.py # the one place paths are resolved
│ ├── memory_index.py # FTS5 + embeddings + ontology
│ ├── memory_candidates.py # isolated SQLite review queue
│ ├── memory_search.py memory_audit.py retrieval_eval.py
│ ├── harvest.py catalog.py backup.py health_check.py
│ ├── mcp_server.py # stdio MCP server (secondbrain-mcp)
│ ├── cli.py # the `secondbrain` command
│ └── template_vault/ # packaged copy used by `secondbrain init`
├── vault/ # the reference/demo vault (same as template)
├── install/ # install_unix.py (macOS + Linux), install_windows.ps1, adapters
├── bin/secondbrain-mcp.js # npx launcher
└── docs/ # comparison, screenshot scriptContributing
Issues and PRs welcome. Keep the core dependency-free, keep personal data out of
the repo, and run secondbrain eval before changing retrieval.
License
MIT.
Maintainer self-check: no personal data leaked
Run through this before every publish or release. This repository is a template; it must contain zero real personal or private information.
Automated scan (portable, no non-ASCII literals in the command itself)
# 1. ASCII personal tokens and absolute home paths. Expect NO matches.
grep -rInE "your-name|/Users/[a-z]|C:\\\\Users\\\\" \
--exclude-dir=.git --exclude-dir=node_modules --exclude-dir='*.egg-info' . \
|| echo "clean: no personal tokens"
# 2. Any CJK / non-Latin text (catches leaked non-English personal data).
# Reports files with runs of Hangul/Han/Hiragana/Katakana. Review each hit;
# Unicode-range regexes, synthetic tests, and the Korean macOS guide are expected.
python3 - <<'PY'
import os, re
pat = re.compile(r"[\uac00-\ud7a3\u3040-\u30ff\u4e00-\u9fff]{2,}")
for dp, dn, fn in os.walk("."):
dn[:] = [d for d in dn if d not in {".git", "node_modules"} and not d.endswith(".egg-info")]
for f in fn:
p = os.path.join(dp, f)
try:
for i, line in enumerate(open(p, encoding="utf-8"), 1):
if pat.search(line):
print(f"{p}:{i}: {line.strip()[:100]}")
except Exception:
pass
PYReplace your-name with your actual name/handle when running this locally.
Manual checklist
Does any file contain a real name (mine or anyone else's)?
Does any file contain a real project, client, employer, or school name?
Any CVE numbers, vulnerability research, or security-target details?
Any absolute home paths (
/Users/<me>,C:\Users\<me>) or machine names?Any real emails, phone numbers, student/employee IDs, or birthdays?
Any API keys, tokens, passwords, cookies, or private keys (even fake-looking)?
Are all example notes clearly fictional (Widget Store, Homelab, etc.)?
Do config files point at generic paths (
./vault,~/SecondBrain)?Are
vault/50_Conversations,00_Inbox,60_Imports,90_Archiveempty except for templates/.gitkeep, and ignored by.gitignore?Do screenshots/GIFs show only the demo vault, no personal windows?
If any box is unchecked, do not publish until it is resolved.
Available Tools
16 toolsmemory_auditB
Audit canonical memory for stale active notes, duplicate aliases, identity conflicts, unresolved ontology links, open questions, and source provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| write_report | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure. It mentions auditing categories but does not state whether the tool is read-only or produces a report, whether it modifies memory, or what side effects occur. The write_report parameter hints at report generation but is not explained, leaving behavioral expectations unclear.
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, well-structured sentence that lists audit dimensions efficiently without redundancy or filler. Every phrase adds meaning, and the length is appropriate for the scope of a comprehensive audit tool.
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?
The description lacks essential context for an agent to use the tool correctly. There is no mention of how results are returned, whether a report is written (despite the write_report parameter), or what actions an agent should take based on audit findings. With no annotations and no output schema, the description is too sparse to support autonomous invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description completely omits the only parameter, write_report. The schema provides the name and default, but no meaning or effect is disclosed. Since coverage is low, the description should compensate, but it does not, leaving the agent to guess the parameter's role.
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 uses a specific verb ('Audit') and clearly identifies the resource ('canonical memory') while enumerating precise audit categories (stale active notes, duplicate aliases, identity conflicts, etc.). This distinguishes it from sibling tools like memory_search or memory_status, which focus on retrieval or status rather than comprehensive auditing.
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 implies the tool is used when a systematic audit of memory health is needed, but it provides no explicit guidance on when to choose this over sibling tools or when not to use it. There are no alternatives or exclusions mentioned, so usage context is only inferred from the verb and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_approveA
Preview approval by default; apply only to an existing Markdown target with an explicit matching SHA-256.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | ||
| target_path | No | ||
| candidate_id | Yes | ||
| review_reason | No | ||
| expected_target_hash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behavioral trait that approval is non-mutating by default and only applies under strict conditions (existing target, matching hash). However it omits what preview returns, permission/auth requirements, and the effect of review_reason, leaving meaningful behavioral gaps.
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?
A single front-loaded sentence with zero filler, putting the safe default first and the apply condition second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter conditional-mutation tool with no annotations and no output schema, the description captures the critical safety gate but is thin: it does not explain the preview response, the role of review_reason, or the identity semantics of candidate_id. It is adequate but incomplete.
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 0% across 5 parameters, so the description must compensate. It adds semantics for apply ('apply'), target_path ('Markdown target'), and expected_target_hash ('explicit matching SHA-256'), but says nothing about candidate_id or review_reason, leaving two parameters undocumented.
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 centers on the approval action and its default mode ('Preview approval by default'), which combined with the tool name makes the verb+resource clear, and it implicitly contrasts with a non-previewing sibling like memory_candidate_reject. It never states the object explicitly ('a memory candidate'), so an agent leans on the name for full purpose.
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 concrete when-to-use rule: preview by default, and apply only 'to an existing Markdown target with an explicit matching SHA-256'. That defines both the default path and the gate for the mutating path. It does not name alternative tools (e.g., memory_candidate_reject) for adjacent decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_createC
Create an idempotent review candidate without changing canonical Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | ||
| content | Yes | ||
| audience | No | ||
| confidence | Yes | ||
| expires_at | No | ||
| source_ref | Yes | ||
| supersedes | No | ||
| memory_type | Yes | ||
| sensitivity | Yes | ||
| source_kind | Yes | ||
| memory_level | No | L1 | |
| conflicts_with | No | ||
| injection_mode | No | tool | |
| source_author_type | Yes | ||
| source_message_ids | Yes | ||
| proposed_target_note | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two genuinely useful behaviors: the operation is idempotent (retry-safe) and it does not mutate canonical Markdown. However, it omits what happens on validation failure, how sensitivity='prohibited' is handled, permission requirements, and whether duplicates are deduplicated or merely tolerated.
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?
A single front-loaded sentence with zero filler, which is efficient. Given the 16-parameter surface, however, the extreme terseness borders on under-specification rather than disciplined conciseness.
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 16-parameter (10 required) creation tool with no annotations, no output schema, and no parameter documentation, one sentence is not enough. The agent lacks guidance on field semantics, idempotency key behavior, and error conditions, all of which matter before invoking a write operation.
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 16 parameters with 0% description coverage, and the description mentions none of them. Required fields like source_kind, memory_type, proposed_target_note, and the sensitivity/scope enums are entirely unexplained, forcing the agent to guess at accepted formats and 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?
States a specific verb ('Create') and resource ('review candidate'), and the clause 'without changing canonical Markdown' separates it from mutating siblings like memory_update. The term 'review candidate' is domain jargon left unexplained, but the sibling set (memory_candidate_approve/reject/expire) makes the intent inferable.
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 explicit when-to-use or when-not-to-use guidance. The phrase 'without changing canonical Markdown' implicitly contrasts with memory_update, but the agent must infer that this is the staging step preceding memory_candidate_approve. No prerequisites, sequencing, or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_expireC
Expire a candidate without changing canonical Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| candidate_id | Yes | ||
| review_reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses one side effect in the negative — canonical Markdown is not modified — but says nothing about whether expiry is reversible, whether the candidate remains retrievable, whether it is a terminal state, or whether it requires elevated permissions.
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?
A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity reflects under-specification rather than disciplined pruning.
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 state-mutating tool with zero annotations, no output schema, and two undocumented parameters, this description is too thin. It never states what happens to the candidate after expiry, what the caller gets back, or what review_reason is for.
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% and the description mentions neither parameter. candidate_id is inferable from its name and required status, but review_reason is completely unexplained — whether it is recorded, shown to reviewers, or expected on every expiry is left unknown.
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 pairs a specific verb ("Expire") with a specific resource ("a candidate"), so the operation is identifiable at a glance. The closing clause "without changing canonical Markdown" further distinguishes it from write-through siblings like memory_candidate_approve. It stops short of clarifying how "expire" differs from memory_candidate_reject, which is the obvious neighboring 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?
There is no guidance on when to expire a candidate versus rejecting, deleting, or leaving it pending, and no mention of prerequisites or review workflow context. The agent must infer the selection rule from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_getC
Get one memory candidate by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| candidate_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about behavior. It does not say whether the read is safe/non-mutating, what happens when the candidate_id does not exist (error vs empty), or whether pending/expired candidates are visible. 'Get' implies a read, but that is inference, not disclosure.
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?
A single short sentence with no padding and the key constraint ('by ID') front-loaded. It is efficient, though its brevity is partly under-specification rather than disciplined concision.
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 trivial one-parameter lookup with no output schema, this is close to the minimum viable. It is missing error/not-found behavior and any definition of what a 'candidate' is in the lifecycle (create/list/approve/reject/expire), which the sibling set shows is a meaningful distinction.
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?
One required parameter with 0% schema description coverage, so the description must compensate. 'By ID' confirms candidate_id is an identifier, but adds no format, expected value, or source for that ID (e.g., from memory_candidate_list). Marginal added value over the schema's string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one memory candidate by ID'), which is clearer than a bare name restatement. It implicitly separates itself from memory_candidate_list (single by ID vs list), but never distinguishes itself from the sibling memory_get, so an agent must guess which retrieval path applies.
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 when-to-use guidance and no mention of alternatives such as memory_candidate_list or memory_get. The only hint is the phrase 'by ID', leaving the agent to infer the retrieval context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_listC
List the isolated candidate review queue; candidates never appear in memory_search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | ||
| status | No | candidate | |
| source_kind | No | ||
| memory_level | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses one genuinely non-obvious trait (candidate isolation from memory_search), but says nothing about default status filtering, result ordering, pagination limits, or whether this is a read-only operation — all of which an agent needs for a 5-parameter list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the scoping fact front-loaded and zero filler. It is efficient, though the brevity edges toward under-specification rather than model conciseness.
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?
No annotations, no output schema, and five undocumented parameters mean the description should be doing far more work. It leaves result shape, filtering semantics, and read-only status entirely unstated, which is inadequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters (limit, scope, status, source_kind, memory_level), including three enums with no explanation of their values. The description adds no parameter meaning whatsoever, so it fails to compensate for the coverage gap.
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 (List) and resource (the isolated candidate review queue), so the agent knows this enumerates pending review items. It also implicitly contrasts with memory_search, though it never names the other candidate tools (get/approve/reject) it sits beside.
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 clause 'candidates never appear in memory_search' gives one useful routing signal: come here rather than search to find candidates. However it offers no guidance on when to use this versus memory_candidate_get or memory_recent, and no mention of the status/scope filters that clearly shape the intended query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_rejectC
Reject a candidate without changing canonical Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| candidate_id | Yes | ||
| review_reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that canonical Markdown is unchanged, but omits whether rejection is permanent, whether the candidate is deleted or status-changed, permission requirements, and what review_reason does.
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 wasted words. It is efficient, though its extreme brevity contributes to gaps elsewhere.
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, no output schema, two parameters at 0% schema coverage, and sibling approve/expire tools, the description is not complete enough. It lacks parameter meaning, side-effect details, and selection guidance.
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 does not: it never explains candidate_id or review_reason. 'Candidate' implies candidate_id is the target, but review_reason is entirely undocumented.
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 uses a specific verb ('Reject') and resource ('candidate'), and adds the key scope boundary that canonical Markdown is not changed. It is distinguishable from approve/expire by name, though it does not explicitly name 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?
There is no explicit guidance on when to reject versus approve or expire a candidate. Usage is only implied by the tool name and the 'without changing canonical Markdown' clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_captureA
Append durable user, decision, project, knowledge, or inbox memory. Ordinary personal information is allowed; credentials are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| content | Yes | ||
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well by disclosing that the operation is an append (non-destructive), durable, and rejects credentials. It lacks return-value or failure-mode details, but these core behavioral traits are useful and go beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and immediately followed by a relevant content policy. Every clause adds value, with no fluff or 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?
For a four-parameter tool with no output schema and no annotations, the description gives a clear purpose and category list but omits usage guidance, parameter semantics, and any indication of return behavior. It is minimally sufficient but leaves significant 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 0%, and the description only repeats the category enum already present in the schema. It provides no additional explanation for the required title/content fields or the optional tags, so it fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool appends durable memory and enumerates supported categories (user, decision, project, knowledge, inbox), making the action and resource explicit. This distinguishes it from sibling tools like memory_search, memory_get, and memory_update by its verb 'append' and content scope.
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 implies use for capturing new memory by listing acceptable categories and a content policy, but it does not explicitly say when to prefer this over memory_update or other siblings. No alternatives, exclusions, or prerequisites are mentioned, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_evalB
Run the SecondBrain retrieval regression suite and report recall@k and mean reciprocal rank.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| write_report | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, but it does not. It fails to disclose potential side effects (e.g., whether write_report creates files), whether the tool performs read-only operations, how long it might take, or what the output looks like. The parameter write_report hints at a side effect, but the description does not explain it.
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 wasted words. It efficiently communicates the primary action. However, it is so brief that it omits essential details, which is a trade-off. Still, as a concise statement, it earns a high score.
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?
The tool has 2 parameters, no annotations, no output schema, and no parameter descriptions. The description does not explain return values, side effects, or how to interpret the metrics. Given the tool's evaluative nature, an agent needs to know whether it writes files, what data it accesses, and how to use the reported metrics. The description falls short.
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%, and the description adds no parameter information. The 'top' parameter likely relates to k in recall@k, but this is not explicitly stated. 'write_report' is completely unexplained. The agent must guess at their meanings from parameter names and defaults alone, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: run the SecondBrain retrieval regression suite and report specific metrics (recall@k and mean reciprocal rank). This distinguishes it from sibling tools like memory_search and memory_get, which are for individual queries or retrieval, not for evaluating overall retrieval performance.
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 use case is implied: the tool is for evaluating retrieval performance. However, there is no explicit guidance on when to use it versus alternatives, nor any mention of prerequisites or exclusions. For example, it does not say 'use this instead of memory_search for benchmarking' or 'do not use in production with live data.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getB
Read a SecondBrain note or retrieve a historical catalog entry such as H0372.
| Name | Required | Description | Default |
|---|---|---|---|
| max_chars | No | ||
| reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It only says 'Read' and 'retrieve' — essentially restating the name. It does not mention max_chars truncation, error behavior for missing references, return format, or what distinguishes a 'SecondBrain note' from a 'historical catalog entry'.
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, focused sentence with no wasted words. It is front-loaded and easy to scan.
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?
The tool has no annotations and no output schema, and the description is too thin to compensate. It omits critical details like parameter semantics (especially max_chars), return value structure, and domain context for 'SecondBrain note' vs 'catalog entry', leaving the agent under-informed for proper invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It provides an example reference (H0372) suggesting reference IDs, but it does not explain the `reference` parameter's allowed format or the `max_chars` parameter at all, leaving both underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a SecondBrain note or retrieves a historical catalog entry, giving a specific verb ('Read'/'retrieve') and resource. It distinguishes this from siblings like memory_search (searching vs retrieving by reference) and memory_update (read vs write).
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: use this when you have a reference like H0372 to fetch a specific note or catalog entry. However, it does not explicitly state when to prefer this over memory_search or other siblings, nor does it provide exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_rebuildB
Rebuild the local keyword and semantic index after substantial note changes.
| Name | Required | Description | Default |
|---|---|---|---|
| embeddings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action ('rebuild the index') without mentioning side effects, destructiveness, performance impact, or any requirements, leaving the agent uncertain about the tool's operational consequences.
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 wasted words. It efficiently communicates the core action, though it sacrifices detail for brevity.
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 one-parameter tool, the description covers the primary action and when to use it, but it is incomplete due to the missing parameter explanation and lack of behavioral details. The absence of an output schema reduces the need for return value documentation, but the parameter gap is significant.
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 description entirely omits the 'embeddings' parameter, which is the only parameter in the schema. The schema provides only type and default, with no description, so the agent has no way to understand what this flag controls or when to set it.
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 uses the specific verb 'rebuild' and identifies the resource as the 'local keyword and semantic index', clearly distinguishing it from search, retrieval, and capture operations among siblings. It conveys exactly what the tool does without ambiguity.
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 phrase 'after substantial note changes' provides a clear context for when to use this tool, implying it is for maintenance after significant data modifications. It does not explicitly name alternatives, but the condition is specific enough to guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recentC
Return recent per-tool session memory logs.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the return action, without indicating whether the operation is read-only, requires permissions, or has other side effects. No details about the 'recent' window or what constitutes a session are given.
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 zero fluff. It efficiently states the core purpose, earning a high score for structure.
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?
Although the tool is simple (one optional param, no output schema), the description lacks context about the return format, the meaning of 'per-tool session', and the effect of the 'top' parameter. This makes it minimally complete for an agent to invoke confidently.
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 defines one optional 'top' parameter (default 10), and the description does not explain it at all. Since schema coverage is 0%, the description offers no semantic meaning for 'top' beyond the name.
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 uses a specific verb 'Return' and identifies a clear resource: recent per-tool session memory logs. It distinguishes from sibling tools like memory_search or memory_get by focusing on recency, though the phrase 'per-tool session' is somewhat ambiguous.
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 guidance is provided on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or scenarios where memory_search or memory_get would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchB
Search the user's shared SecondBrain with hybrid keyword and local semantic retrieval before substantive tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| query | Yes | ||
| scope | No | ||
| audience | No | Retrieval hint only; not an access-control boundary. | |
| memory_level | No | ||
| memory_status | No | ||
| injection_mode | No | ||
| include_expired | No | ||
| context_budget_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the retrieval strategy (hybrid keyword + local semantic) and that the corpus is shared rather than private, which helps the agent reason about recall quality and privacy. It says nothing about result limits, pagination, latency, or whether the call itself writes anything.
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?
A single well-formed sentence with the mechanism and timing front-loaded and zero filler. It is arguably undersized for a nine-parameter tool, but nothing in it is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter retrieval tool with no annotations, no output schema, and near-zero schema documentation, the description should carry much more of the load. It never explains the scope/level/status filter dimensions or result sizing, so an agent cannot call it correctly without experimentation.
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 only 11% across 9 parameters, so the description is expected to compensate and largely does not. It conveys nothing about top, scope, memory_level, memory_status, injection_mode, or context_budget_chars, leaving the agent to guess at filter and budget semantics from bare enum names.
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 ('Search') plus resource ('the user's shared SecondBrain') and even names the retrieval mechanism ('hybrid keyword and local semantic retrieval'). That is enough to distinguish it from read-by-id siblings like memory_get or memory_related, though it never explicitly contrasts itself with them.
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?
'before substantive tasks' gives one implied condition for calling it, which is more than nothing. However, no alternatives are named (e.g., memory_recent for time-based recall, memory_get for a known id) and no exclusions are stated, so the agent must infer when this is the right entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statusA
Check SecondBrain index and automatic harvester status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It implies a read-only action with 'Check' but does not explicitly state that it has no side effects, what permissions are required, or any other behavioral details. It adds minimal context beyond the tool name, lacking disclosures about return format or operational boundaries.
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, concise sentence that front-loads the verb and specific objects. It contains no unnecessary words and is appropriately sized for the tool's simplicity.
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?
The tool is simple with no parameters or annotations, but the description only states what it checks without explaining what 'status' means or what the output looks like. It is minimally adequate for an agent to understand the tool's primary function, but it lacks detail about the return value or any behavioral caveats.
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 tool has zero parameters, so there is no parameter burden. The baseline of 4 applies, and the description correctly avoids mentioning parameters since none exist. The schema already trivially covers all parameters (none), and the description does not need to compensate.
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 uses a specific verb ('Check') and identifies the exact resources ('SecondBrain index' and 'automatic harvester status'), clearly distinguishing it from sibling tools like memory_search or memory_capture. This is a clear, specific statement of functionality.
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 no guidance on when to use this tool versus alternatives, nor any mention of prerequisites or conditions. It simply states what it does, leaving the agent to infer context from the tool name and siblings. No exclusions or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_updateC
Safely append a dated section to an existing Markdown note in SecondBrain.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| heading | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It claims 'safely' appends but does not explain what 'safely' entails, what happens if the note does not exist, whether the note is created or modified, or any permission or format requirements. The behavioral disclosure is minimal and vague.
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, focused sentence that front-loads the core action and context. Every word contributes value, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and three parameters, the one-sentence description is insufficient. It does not explain note identification, content format, heading semantics, error conditions, or how this tool behaves relative to its many siblings. The overall context is under-specified for reliable agent use.
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%. The description does not mention the parameters (path, content, heading) or explain how they map to the append operation. The parameter names are vaguely self-explanatory, but there is no clarification of what 'dated section' means in relation to the heading parameter or how content should be formatted. The description fails to compensate for the schema's lack of parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('append'), the target ('existing Markdown note'), and the context ('SecondBrain'). It distinguishes from siblings by emphasizing the append/update operation, which contrasts with search/get/capture/rebuild 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?
No explicit guidance on when to use this tool versus alternatives like memory_capture or memory_rebuild. The implied use case (appending dated sections) is present, but there are no when-to-use or when-not-to-use instructions, nor any mention of sibling tools.
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.
7 tool updates
v0.2.0- Added
memory_candidate_approve - Added
memory_candidate_create - Added
memory_candidate_expire - Added
memory_candidate_get - Added
memory_candidate_list - Added
memory_candidate_reject - Changed
memory_search7 fields changed- added
Input schema / properties / audienceAdded value: +{ + "description": "Retrieval hint only; not an access-control boundary.", + "type": "string" +} - added
Input schema / properties / context_budget_charsAdded value: +{ + "maximum": 50000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / include_expiredAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / injection_modeAdded value: +{ + "enum": [ + "direct", + "summary", + "tool", + "reference" + ], + "type": "string" +} - added
Input schema / properties / memory_levelAdded value: +{ + "enum": [ + "L0", + "L1", + "L2", + "L3" + ], + "type": "string" +} - added
Input schema / properties / memory_statusAdded value: +{ + "enum": [ + "candidate", + "approved", + "rejected", + "superseded", + "expired", + "deprecated" + ], + "type": "string" +} - added
Input schema / properties / scopeAdded value: +{ + "enum": [ + "personal", + "project", + "career", + "tooling", + "knowledge", + "conversation" + ], + "type": "string" +}
10 tool updates
v0.1.0- First observed
memory_audit - First observed
memory_capture - First observed
memory_eval - First observed
memory_get - First observed
memory_rebuild - First observed
memory_recent - First observed
memory_related - First observed
memory_search - First observed
memory_status - First observed
memory_update
TDQS
Scored across 16 tools
Each tool targets a distinct action/resource: search vs. get vs. recent logs, and a clean memory_candidate_* sub-namespace (get/list/create/approve/reject/expire) that is explicitly isolated from canonical memory. The three write paths (capture, update, candidate_create) are clearly differentiated by descriptions. No two tools appear interchangeable.
All 16 tools use a uniform memory_ prefix in snake_case with a predictable verb_noun structure (memory_get, memory_search, memory_capture, memory_update). The memory_candidate_* lifecycle is a consistent nested naming sub-pattern rather than a deviation.
16 tools is at the upper edge of comfortable, driven by a full five-tool candidate-review lifecycle. For a knowledge base with retrieval, audit, eval, and index management, each tool earns its place, though the surface is slightly heavy.
The surface covers the full lifecycle: creation (capture/create), read (get/search/related/recent), update (update, approve), review governance (candidate list/approve/reject/expire), plus audit, eval, rebuild, and status. Append-only design intentionally omits canonical delete, so no meaningful dead ends remain.
Maintenance
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Hosted MCP memory for coding agents: persistent across sessions, editable markdown, team sharing.
An MCP memory server. One memory your agents share — across models, devices and apps.
- LogRackOAuthai.lograck
Shared memory for your AI tools: tasks, notes and context every tool can read and write over MCP.
Related MCP Servers
- AlicenseAqualityCmaintenanceA 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.1635 npm18MIT
- AlicenseBqualityDmaintenanceLocal-first memory server for AI coding agents that stores work sessions, tasks, and durable memories in Markdown files, exposed through MCP tools for session management and memory retrieval.104 npm1MIT
- AlicenseAqualityBmaintenanceMCP server for persistent, cross-session, local-first memory for AI agents, storing memories as Markdown files with SQLite indexing for hybrid search.24Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA local-first MCP server that manages developer memory for coding agents, enabling shared project context, permissions, and audit trails across different agents.1-