SecondBrain
The SecondBrain MCP server provides a set of tools that let AI agents interact with a shared, local-first Markdown memory vault, enabling persistent context across tasks. With it, you can:
Search and retrieve: Use
memory_searchfor hybrid keyword and semantic search, andmemory_getto read specific notes or history entries (e.g.,H0372).Explore relationships: Traverse ontology links via
memory_related(up to two hops), optionally filterable by relation type.Capture and update: Append durable memories with
memory_capture(categories: user, decision, project, knowledge, inbox) and add dated sections to existing notes withmemory_update.Monitor and maintain: Check index and harvester health with
memory_status, view recent session logs viamemory_recent, and rebuild the search index usingmemory_rebuild(with optional embedding regeneration).Ensure quality: Audit the vault for issues like staleness or duplicates using
memory_audit, and evaluate retrieval performance (recall@k, MRR) withmemory_eval.
Click on "Install 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
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
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.
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 ten 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 |
| 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.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, redacts secrets, and builds a searchable, summary-only catalog — never full transcripts.
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_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;
# only Unicode-range regex boundaries in *.py 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
10 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_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_searchA
Search the user's shared SecondBrain with hybrid keyword and local semantic retrieval before substantive tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations are absent, the description carries the full burden. It discloses the hybrid retrieval method (keyword + semantic), but does not explicitly state read-only behavior, return format, or potential side effects. 'Search' implies read-only, but this is not confirmed, leaving some room for ambiguity.
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 sentence that is front-loaded with the main action ('Search the user's shared SecondBrain') and includes a usage note. Every word contributes to the meaning, with no waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficient. It lacks any mention of return values, the meaning of 'top', or whether the operation is read-only. The purpose and usage are clear, but the overall context is incomplete for the agent to invoke it without assumptions.
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 does not mention either 'query' or 'top'. No meaning is added beyond the schema, leaving the agent to infer that 'query' is the search text and 'top' is the number of results, which is not explicitly stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a search operation on 'the user's shared SecondBrain' using 'hybrid keyword and local semantic retrieval', which distinguishes it from sibling tools like memory_get or memory_recent. The verb 'Search' is specific and the resource is well-defined.
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 'before substantive tasks' provides a clear contextual recommendation for when to use this tool, but it does not explicitly mention when not to use it or name alternative tools. This is a clear context but lacks exclusions or alternatives.
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.
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 10 tools
Each tool targets a clear, distinct operation: search, direct read, graph traversal, capture, update, recent logs, status, rebuild, audit, and evaluation. There is minimal overlap between these functions, and the descriptions make boundaries obvious.
All tools share the 'memory_' prefix and use snake_case, but the second part varies: most are verbs (search, get, capture, update, rebuild, audit, eval), while 'related', 'recent', and 'status' are not standard verb forms. This is a minor deviation from a fully uniform verb_noun pattern.
With 10 tools, the server is well-scoped for a memory/knowledge management system. Each tool serves a distinct purpose from retrieval to maintenance to quality evaluation, and the count is within the ideal range for usability.
The server covers read, search, traverse, create, update, maintenance, and evaluation. The only obvious gap is a delete/removal operation, which may be intentionally omitted for safe memory management, but it is a minor missing capability.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
An MCP memory server. One memory your agents share — across models, devices and apps.
shared AI-context layer for teams — persistent memory your agents search and update over MCP
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Related MCP Servers
- AlicenseAqualityAmaintenanceA 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.161511MIT
- AlicenseBqualityBmaintenanceLocal-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.10131MIT
- 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 gradedqualityCmaintenanceA local-first MCP server that manages developer memory for coding agents, enabling shared project context, permissions, and audit trails across different agents.1-