Skip to main content
Glama

SecondBrain

PyPI Python versions License: MIT MCP Stars

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 audit and eval commands 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-m3

If you skip Ollama, set retrieval.semantic.enabled: false in your config and SecondBrain runs keyword-only.

2. Create your vault

secondbrain init ~/SecondBrain
secondbrain index

This 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.ps1

On 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 3

What your agents can do

The MCP server exposes ten tools:

Tool

Purpose

memory_search

Hybrid keyword + semantic search over notes and history

memory_get

Read a note or a historical catalog entry

memory_related

Traverse 1-2 ontology hops around a note

memory_capture

Save durable user/decision/project/knowledge/inbox memory

memory_update

Append a dated section to an existing note

memory_recent

Recent per-tool session logs

memory_status

Index and harvester status

memory_rebuild

Rebuild the index

memory_audit

Flag stale/duplicate/conflicting/unresolved memory

memory_eval

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.yaml drives everything: point vault_root anywhere and the whole toolchain follows.


Why it is worth a star — three differentiators

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

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

  3. Governed, measurable memory. A curated ontology plus audit (health) and eval (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 script

Contributing

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
PY

Replace 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_Archive empty 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 tools
memory_auditB

Audit canonical memory for stale active notes, duplicate aliases, identity conflicts, unresolved ontology links, open questions, and source provenance.

ParametersJSON Schema
NameRequiredDescriptionDefault
write_reportNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleYes
contentYes
categoryNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
write_reportNo

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_charsNo
referenceYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
embeddingsNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_statusA

Check SecondBrain index and automatic harvester status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes
headingNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 10 tool updatesv0.1.0
    • First observedmemory_audit
    • First observedmemory_capture
    • First observedmemory_eval
    • First observedmemory_get
    • First observedmemory_rebuild
    • First observedmemory_recent
    • First observedmemory_related
    • First observedmemory_search
    • First observedmemory_status
    • First observedmemory_update

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A 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.
    16
    15
    11
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for persistent, cross-session, local-first memory for AI agents, storing memories as Markdown files with SQLite indexing for hybrid search.
    24
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    A local-first MCP server that manages developer memory for coding agents, enabling shared project context, permissions, and audit trails across different agents.
    1
    -