big-brain
The vault is Obsidian-compatible; notes are stored as plain markdown files with YAML frontmatter, supporting wikilinks, tags, and Obsidian Tasks metadata, allowing seamless use with Obsidian.
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., "@big-brainshow my overdue tasks from active projects"
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.
big-brain π§
One memory for every AI assistant you use: your notes, projects, and tasks, kept as plain markdown you own.
Each AI tool keeps its own private memory of you, and none of them share it. big-brain flips that around. Point it at a folder of markdown (a new vault, or the Obsidian vault you already have) and Claude Code, Claude Desktop, Cursor, Codex, or any other MCP client can search it, read it, capture into it, and keep your projects and tasks current. Switch models whenever you like; your context comes with you.
60-second start
npx @jzhao234/big-brain setupThat one command installs big-brain, creates a vault at ~/brain, connects Claude Code and Codex if you have them (MCP server plus the /brain, /capture, and /weekly skills), and prints the config to paste into Claude Desktop or Cursor. Pass a folder to use a different one, such as your Obsidian vault: npx @jzhao234/big-brain setup ~/Obsidian. It's safe to run again (anything already set up is left alone), and --dry-run shows the plan without changing anything.
Then restart your assistant and ask "what am I working on?" or "capture: call the dentist on Friday". Other clients, and browser chats like claude.ai and ChatGPT, are covered in Connect your AI tools.
Prefer to do it by hand? These three lines are what setup does for Claude Code:
npm install -g @jzhao234/big-brain
big-brain init ~/brain
claude mcp add --scope user big-brain -- big-brain-mcp --vault ~/brainAlready use Obsidian? big-brain reads an existing vault as is: no config file, no migration, and nothing is written until you ask for a change (setup writes nothing into it either). Add a brain.config.json later to map your folder names, one entry per folder (for example, "folders": {"projects": "Projects", "inbox": "Inbox"}), so projects and captures land where you keep them. See docs/vault-spec.md.
Related MCP server: ai-brain
What you get
Plain markdown files. No database and no lock-in. Open the vault in Obsidian, grep it, or put it in git.
An MCP server with 23 tools: search, capture, daily logs, projects, tasks, the link graph, related notes, and a vault health check.
A CLI for humans:
big-brain status,big-brain capture,big-brain tasks, and more.Skills for Claude Code and Codex (
/brain,/capture,/weekly), installed with one command.Projects as the unit of work. Each project is one file with a goal, checkbox tasks, and a running log.
Deterministic retrieval first: fuzzy full-text search with title boosting,
[[wikilink]]backlinks, tags, and frontmatter filters. No API keys, and it works offline.Optional local semantic search. Turn on
embeddings.enabledand a small on-device model (via@huggingface/transformers) adds meaning-based matches, fused with full-text search by Reciprocal Rank Fusion. Paraphrases match, exact terms still count, and nothing leaves your machine. It also powersrelated_notes. See docs/vault-spec.md.Optional git auto-commit and push. Turn on
git.autoCommitand every note write from any tool commits only the files it touched; addgit.autoPushto push in the background so your other machines stay in sync. A git failure never blocks a save: if the commit fails the note is still saved, and if the push fails the commit stays local until the next push.Edits that don't damage notes. Writes are atomic and locked per note, keep each note's line endings, never land inside code blocks or frontmatter, refuse to rewrite frontmatter they can't parse, and refuse to write anywhere that resolves outside the vault (such as through a symlink). docs/vault-spec.md lists the edge cases these don't cover.
Requires Node 20 or newer. big-brain is pre-1.0: it's used daily, but minor versions may still change behavior; see the changelog.
Install
npm install -g @jzhao234/big-brainThat puts three commands on your PATH: big-brain (the CLI), big-brain-mcp (the MCP server over stdio), and big-brain-mcp-http (the remote preview below). To try it without installing, npx @jzhao234/big-brain status --vault ~/brain works too.
The base install leaves out semantic search and its native dependencies. To enable local embeddings, install the add-on into the same place, then set embeddings.enabled to true in brain.config.json:
npm install -g @jzhao234/big-brain @huggingface/transformers@^3.8.1To work on big-brain itself, install from source instead: git clone https://github.com/jzhao234/big-brain.git && cd big-brain && npm install && npm run build && npm link. See CONTRIBUTING.md.
Quickstart
big-brain init ~/brain --name "My Brain" # scaffold a vault
cd ~/brain
big-brain status # look around
big-brain install-skills # add the /brain, /capture, /weekly skillsThen connect an AI tool (below) and, optionally, seed the vault from your existing AI history.
Connect your AI tools
For local clients, run big-brain-mcp. The vault is chosen by --vault <dir> or the BIG_BRAIN_VAULT environment variable.
Claude Code
claude mcp add --scope user big-brain -- big-brain-mcp --vault ~/brain
claude mcp list # expect: big-brain ... β ConnectedClaude Desktop / Cursor / other MCP clients: add to the MCP config (e.g. claude_desktop_config.json). Use an absolute command path: GUI apps are launched without your shell's PATH, so a bare big-brain-mcp may not resolve (run which big-brain-mcp to get it).
{
"mcpServers": {
"big-brain": {
"command": "/absolute/path/to/big-brain-mcp",
"args": ["--vault", "/absolute/path/to/brain"]
}
}
}Other local MCP clients: any client that speaks MCP over stdio works the same way. For clients without MCP, the CLI's --json output makes the vault scriptable.
Remote MCP preview: Big Brain can expose the same 23 tools through an authenticated Streamable HTTP endpoint:
export BIG_BRAIN_MCP_TOKEN="$(openssl rand -hex 32)"
big-brain mcp-http --vault ~/brain
# endpoint: http://127.0.0.1:3333/mcpIt binds to localhost by default and checks Authorization: Bearer <token> before parsing JSON. Bodies are capped at 1 MB (larger requests get HTTP 413 with a JSON-RPC error). Requests without Origin are allowed; requests with one require an exact match in --allowed-origins / BIG_BRAIN_MCP_ALLOWED_ORIGINS, which defaults to empty and refuses browser origins. Keep it behind an HTTPS reverse proxy or secure tunnel; never expose the plain HTTP listener directly. The static token is the first self-hosted transport milestone, not an OAuth implementation, so browser connectors that require OAuth still need an OAuth-capable gateway. See docs/mcp-setup.md.
Browser fallback (claude.ai / ChatGPT): the zero-infrastructure option is to connect the AI to your vault's GitHub repo so it can read the markdown directly, and write it where the connector allows (some GitHub connectors are read-only; you also lose the computed overview/search/task tools, since it's raw file access). See docs/browser-github-connector.md and paste prompts/browser-github-instructions.md.
Then teach the assistant how to use the vault: Claude Code reads the vault's CLAUDE.md automatically when you work inside the vault folder; elsewhere, and for other tools, paste prompts/agent-instructions.md into their custom instructions.
Using it: load and save
The whole point is that you never re-feed context. The assistant loads a small, relevant slice on demand and saves small pieces as you work. You just talk to it.
Load: orient at the start, pull details as needed:
You want to⦠| In Claude Code | CLI |
"What am I working on?" |
|
|
Find notes about X | "search my brain for X" |
|
Read one note | "read the Auth project" |
|
See tasks / projects | "what's due?" |
|
Pull surrounding context | "what's related to X?" |
|
Save as decisions, progress, and ideas happen (append-first; never destructive):
You want to⦠| In Claude Code | CLI |
Stash a stray thought |
|
|
Log a decision / progress | "log that I shipped X" |
|
Add a task | "add a task to project Y" |
|
Finish a task | "mark that done" |
|
Start a project | "new project: β¦" |
|
Add to a note | "add that to the Auth note's Log" |
|
Change metadata | "set Auth's due date to β¦" |
|
Retire a note | "archive that note" |
|
Review: /weekly runs a guided pass: triage the inbox, prune projects, reschedule overdue tasks, fix broken links, and consolidate: big-brain doctor flags bloated notes and near-duplicates, and the review proposes splits/merges/stale-fact pruning for your approval. Capture and search keep a brain useful; consolidation keeps it trustworthy.
Skills
Three skills wrap the tools into commands, for Claude Code (/brain) and Codex ($brain):
brain: load the overview and switch into brain-aware mode for the sessioncapture: zero-friction capture to the inboxweekly: a guided weekly review
big-brain agents install claude codex installs them for both agents (see below). big-brain install-skills still copies the Claude versions into ~/.claude/skills (--force overwrites). They're path-agnostic: they call the big-brain CLI / MCP tools and resolve the vault from BIG_BRAIN_VAULT (or --vault), so the same skill works on every machine.
Agent profiles: your agent setup in the vault
Your coding agents' personal setup (skills, global instructions, hooks, the status line, a few settings) can live in the vault too, so every machine gets the same setup from one command and a change made on one machine reaches the others through git.
agents/claude/instructions.md -> ~/.claude/CLAUDE.md
agents/claude/skills/<name>/ -> ~/.claude/skills/<name> (one link per skill)
agents/claude/files/** -> ~/.claude/** (one link per file: statusline.sh, hooks/β¦)
agents/claude/settings.json -> merged into ~/.claude/settings.json
agents/codex/instructions.md -> ~/.codex/AGENTS.md
agents/codex/skills/<name>/ -> ~/.codex/skills/<name>
agents/codex/config.toml -> merged into ~/.codex/config.tomlbig-brain agents status # linked, missing, edited here, or only on this machine
big-brain agents install --dry-run # show the plan
big-brain agents install # link everything (agents with a profile; or name them)
big-brain agents save claude statusline.sh --setting statusLine # capture a local change
big-brain agents save codex skills/my-skill --setting tui.status_lineHow it stays safe:
Links, not copies. Edit a skill or script in the vault (or through the link) and every machine has it after
git pull. Everything else in~/.claude/~/.codex(other skills, history, credentials) is never touched.Nothing unmanaged is replaced unless you say so. A file in the way is reported;
--replacemoves it to a timestamped backup under~/.local/state/big-brain/backups(outside every agent folder, so a backed-up skill is never picked up) with a restore manifest, then links the vault's.Settings merge three ways. big-brain remembers what it applied on each machine: a value you edited locally is reported, not overwritten (
--replacetakes the vault's); a value you never touched follows the vault; a key dropped from the vault is removed only if it wasn't edited. Claude hooks are matched by event, matcher, and command, so changing a timeout updates the hook instead of registering it twice. TOML is edited line by line (comments, trust entries and hook hashes stay put), and any edit that would change more than the managed keys is refused.Plan first, then write, and roll back on failure. Every link and settings change is validated before the first write; a refusal leaves the machine untouched, and if a step still fails midway the steps already done are undone (if even that fails, nothing is deleted and the error says where the originals are). Nothing is written through a symlinked folder, and a settings file kept as a symlink (e.g. in a dotfiles repo) stays a symlink.
--pruneremoves links whose vault file was deleted.saverefuses known secret and state files. Whole settings files,.credentials.json,auth.json,.envfiles, history, sessions, caches and databases are refused; save individual settings with--setting. It doesn't inspect contents, so review the files and--settingvalues you save (anenv.API_KEYsetting would be copied as is).Codex hooks stay local. Codex asks you to trust each hook on each machine, so hook registrations are not managed for Codex. Claude Code users: review new hooks with
/hooks. Status warns when Codex'sAGENTS.override.mdoverridesAGENTS.md.
CLAUDE_CONFIG_DIR and CODEX_HOME are honored. The folder name is folders.agents in brain.config.json (default agents), and it is never indexed as notes.
Use it on multiple machines
The vault is a git repo, so this is just git: clone it on each machine, and each machine runs its own big-brain-mcp against its own clone. Git keeps them in sync.
Write side: automatic. Set
git.autoCommit(andgit.autoPush) inbrain.config.jsonand every note write, from any tool on any machine, is committed and pushed (best-effort). See docs/vault-spec.md.Read side: pull before you start. Add a
SessionStarthook so a session always opens on the latest:// ~/.claude/settings.json "hooks": { "SessionStart": [ { "hooks": [ { "type": "command", "command": "git -C \"$HOME/brain\" pull --ff-only --quiet 2>/dev/null || true" } ] } ] }--ff-onlymeans a pull never clobbers local work. (Or justgit -C ~/brain pullby hand.)
On a fresh machine: install big-brain (above), git clone your vault, big-brain agents install, register the MCP server. Four commands and your notes, skills, instructions, hooks, and status lines match your other machines.
Seed it from your existing AI history
An empty brain is useless; the fastest way to a useful one is extracting what your LLMs already know about you. Every assistant you've used heavily (ChatGPT, Claude, Gemini) has months of context about your projects, preferences, and goals sitting in its memory and chat history. Seeding pulls that out, once, into files you own.
1. Run the seed interview in each LLM you use. Copy the prompt from prompts/seed-interview.md into each assistant, ideally the account with the most history, with memory/personalization enabled. It's a structured export interview: profile, current projects, stack, how you like to work with AI, goals, people, routines, standing constraints, open loops, and blind spots. It instructs the model to be concrete, mark inferences (inferred), and write "No data" instead of inventing, so the output is honest enough to build on.
2. Save each output into the vault's inbox/ as one file per model (inbox/seed-chatgpt.md, inbox/seed-claude.md, β¦). Don't organize anything yet: capture first is the whole inbox philosophy.
3. Triage. Ask a vault-connected assistant to run the process-inbox MCP prompt (or just say "triage my inbox" / run /weekly in Claude Code). It merges duplicates across models (different LLMs know different slices of you, and they mostly complement rather than conflict), then turns the material into real structure: projects with tasks for everything in flight, people/ notes, a preferences note your agent instructions can point at, reference notes for your stack/setup, and open loops as tasks. You confirm per item; raw exports can be kept in archive/ for provenance.
4. Repeat occasionally. Models keep accumulating context about you; re-running the interview every few months and triaging the diff keeps the vault ahead of any one provider's memory.
Two more seeding paths worth knowing: if you already keep an Obsidian vault, big-brain can adopt it in place (add a brain.config.json, map your folder names via the folders config; see docs/vault-spec.md); and a work session with a vault-connected agent seeds as a side effect: the agent instructions tell it to create projects and capture facts as you work, so the brain fills in from real activity even if you skip the interview.
The vault
brain/
βββ BRAIN.md # index & ground rules
βββ CLAUDE.md # agent instructions (picked up by Claude Code)
βββ brain.config.json
βββ inbox/ # capture now, organize later
βββ daily/ # one note per day: focus, log, tasks
βββ projects/ # one file per project: goal, tasks, log
βββ areas/ # ongoing responsibilities
βββ notes/ # evergreen knowledge, densely [[linked]]
βββ people/ # one note per person
βββ reference/ # external facts, docs, how-tos
βββ archive/ # nothing is deleted, only archived
βββ templates/ # daily/project/note/person templatesNotes are markdown + YAML frontmatter (type, tags, status, dueβ¦). Tasks are - [ ] checkboxes with Obsidian Tasks-style metadata: π
2026-03-01 due, β« priority, β
done-date. Full details in docs/vault-spec.md.
MCP tools
Tool | What it does |
| Orient: active projects, due/overdue tasks, inbox, recent notes |
| Full-text search with type/tag/folder/status filters |
| Read by path, title, or alias; browse by folder/type/tag |
| Write notes (append is the safe default) |
| Metadata changes; non-destructive delete |
| Quick capture to inbox |
| Daily notes and timestamped work journal |
| Project lifecycle |
| Checkbox tasks across the vault; |
| Outgoing links + backlinks for a note |
| Related notes with reasons: links, co-citations, rare shared tags, title mentions, semantic similarity |
| Tag census; broken links, frontmatter that doesn't parse, stale projects, bloated/duplicate notes, overdue tasks |
Plus three MCP prompts: orient, weekly-review, process-inbox.
CLI
big-brain setup [dir] one-step install + connect
big-brain init [dir] scaffold a vault big-brain tasks [-p X] [-t tag] [--due-by D]
big-brain status overview big-brain task add|done ...
big-brain search <query> search (hybrid if on) big-brain projects [--status active]
big-brain show <note> print a note big-brain project new|status ...
big-brain new <title> create a note big-brain links <note>
big-brain related <note> related notes + why big-brain tags
big-brain capture <text> quick capture big-brain doctor
big-brain daily [--log "..."] daily note / journal big-brain index [--status|--rebuild]
big-brain append <note> <text> append [--heading H] big-brain frontmatter <note> k=v ...
big-brain archive <note> archive (non-destructive delete)
big-brain agents status|install|save agent setup from the vault (see Agent profiles)
big-brain install-skills add Claude Code skills big-brain mcp run the MCP serversearch, related, tasks, projects, and doctor take --json for scripting. task done and task update take a task id or its text: a task's whole text wins over longer tasks that contain it, and an ambiguous fragment lists the candidates. Put -- before append text that starts with - (a list item), or it is read as an option. frontmatter reads each value as YAML, like key: value in the file: 'tags=[work, llm]' is a list, due=2026-11-01 stays a date string, and key=null (or key=) removes the key. Quote any assignment that contains spaces, or the shell splits it into separate arguments.
Design principles
Files over databases. Markdown you can read in 30 years beats any app.
The human owns the vault; agents are guests. Agents append and capture freely, but rewriting and archiving are deliberate acts.
Deterministic beats clever. Search + links + tags retrieves reliably and works offline; the semantic layer is opt-in, fully local, and fused with exact search, never a replacement for it.
Model-agnostic by construction. Everything goes through MCP or the filesystem; nothing assumes a particular AI vendor.
Contributing and support
Bug reports and focused pull requests are welcome; read CONTRIBUTING.md first, since it explains what's in scope. Report security problems privately as described in SECURITY.md, not in a public issue.
npm install
npm run typecheck && npm run lint && npm test
npm run buildFollow along
big-brain is a side project, built in the open. If it's useful to you, a star helps other people find it. To hear about new releases and whatever I build next, use Watch β Custom β Releases on this repo, or follow @jzhao234 on GitHub.
MIT Β© Junhao Zhao
Available Tools
23 toolsadd_taskAdd a taskA
Add a checkbox task to a project's Tasks section (or today's daily note if no note given). Supports due date and priority.
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | YYYY-MM-DD | |
| note | No | Project/note to attach to (title or path); default today's daily note | |
| text | Yes | Task description | |
| heading | No | Section to file under (default 'Tasks') | |
| priority | 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 default filing behavior (Tasks section, or today's daily note when no note is given) and that the task is a checkbox item, but it omits whether a missing note gets created, error behavior, and what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and destination. No wasted words, and the useful default-behavior detail is included rather than padded.
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 five-parameter write tool with no annotations and no output schema, the description covers purpose and default placement but leaves gaps: behavior when the target note does not exist, and whether/how success is reported. Adequate but with clear omissions.
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 80%, so the schema already documents due, note, text, and heading. The description adds little beyond restating due-date and priority support, and the priority enum still has no description anywhere. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (a checkbox task) plus the destination (a project's Tasks section or today's daily note). This clearly distinguishes it from siblings like complete_task, update_task, and list_tasks, which operate on existing tasks rather than creating new ones.
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 implies when to use it by describing the default destination (daily note if no note given) and what it supports (due date, priority). However, it never explicitly routes the agent away from alternatives such as update_task or complete_task, so the guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_noteAppend to a noteA
Append markdown to a note, optionally under a specific heading (created at the end if missing). The safe default way to add content without overwriting anything.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Note path, title, or alias | |
| text | Yes | Markdown to append | |
| heading | No | Section heading to append under, e.g. 'Log' |
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 two real traits: the operation is non-destructive and a missing heading is auto-created at the end. It omits what happens if 'ref' matches no note (error vs. creation) and gives no return-value context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core action is front-loaded and the clarifying safety note follows immediately.
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 3-param mutation tool with no annotations and no output schema, the description covers the mechanics but leaves meaningful gaps: behavior when the note does not exist, and what the agent should expect on success or failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning beyond the schema for 'heading' by explaining the create-if-missing behavior, which the schema's terse 'Section heading to append under' does not convey.
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 ('Append markdown to a note') plus a qualifier about the target heading. The phrase 'without overwriting anything' implicitly distinguishes it from replace_note_body, but that sibling is not named, leaving the contrast to inference.
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 safe default way to add content without overwriting anything' gives a clear selection rule for content addition. It does not name explicit alternatives or state when-not-to-use conditions, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_noteArchive a noteA
Move a note into the archive folder (the non-destructive alternative to deletion). Archived notes are excluded from search and listings by default.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Note path, title, or alias |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is non-destructive and that archived notes are excluded from search and listings by default. However, it omits reversibility (how to unarchive), permission requirements, and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first front-loads the action and its role, the second adds a key behavioral effect. No wasted words, and structure is logical.
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 with no output schema or annotations, the description covers purpose, effect on search/listings, and non-destructive nature. It could still mention reversibility or failure conditions, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the 'ref' parameter is fully documented in the schema. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Move') and resource ('a note') with destination ('into the archive folder'), and clarifies its role as 'the non-destructive alternative to deletion'. This distinguishes it clearly from other note operations like replace_note_body or append_note.
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?
Implies usage context by calling it 'the non-destructive alternative to deletion', which tells the agent when to prefer this over deleting. No explicit when-not or named alternative tool, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_overviewVault overviewA
Orient yourself in the user's second brain: active projects with next tasks, overdue and upcoming tasks, unprocessed inbox items, and recently touched notes. Call this at the start of a session or when asked 'what am I working on?'.
| 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 carry the behavioral burden and it does well for a zero-parameter tool: it discloses the full set of content categories returned, which is the key behavioral fact. It does not explicitly state read-only safety, permissions, or pagination/limits, leaving a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads what the agent gets back, the second front-loads when to call it. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return contract β and it enumerates every content category (projects/next tasks, overdue/upcoming tasks, inbox, recent notes). For a no-param aggregate read tool, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to clarify beyond the schema. No misleading param hints are present.
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 (orient) and enumerates exactly what the tool surfaces: active projects with next tasks, overdue/upcoming tasks, inbox items, and recent notes. This composite scope distinguishes it clearly from single-purpose siblings like list_tasks, list_projects, and list_notes.
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?
Gives explicit trigger conditions β session start, or the question 'what am I working on?' β which an agent can act on directly. It stops short of naming alternatives (e.g. use list_tasks for a filtered task list), so it is clear context but not exhaustive routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
captureCapture to inboxA
Quick-capture a thought, link, or piece of information into the inbox for later processing. Use when something is worth keeping but you don't yet know where it belongs.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The content to capture (markdown ok) | |
| title | No | Optional title; derived from the text if omitted |
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 discloses the write target (inbox) and the deferred-processing intent, but says nothing about whether titles are deduplicated, whether the capture is reversible, what is returned, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what happens (capture into inbox) before the usage condition. Every clause earns its place with no 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 two-parameter, single-required-field capture tool with no output schema and no annotations, the description covers purpose, destination, and usage condition adequately. Only the return value / post-capture behavior is unaddressed, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds only the general notion of 'a thought, link, or piece of information' and does not elaborate on the two parameters beyond what the schema already documents (including the markdown acceptance and title derivation).
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 (capture) and destination (inbox) plus the kinds of content accepted (thought, link, information). It is clear on its own, but it never names the sibling it most resembles (create_note/append_note), so an agent must infer the distinction from the 'inbox' framing alone.
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?
'Use when something is worth keeping but you don't yet know where it belongs' is an explicit selection condition, and it implicitly excludes the directed-note siblings. There is no explicit when-not statement or named alternative, which is what keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskComplete a taskA
Mark a task done by id (from list_tasks) or by a unique text fragment. Stamps today's date.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Task id or unique text fragment |
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 usefully discloses a side effect beyond the obvious one ('Stamps today's date'), but says nothing about whether completion is reversible, what happens on an ambiguous fragment, or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the action and accepted inputs front-loaded and the side effect stated last. 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 single-parameter mutation tool with no output schema and no annotations, the description covers both input modes and one non-obvious side effect. It is only short on error/ambiguity behavior, which is a modest gap at this 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 coverage is already 100%, so the baseline is 3. The description goes beyond the schema by explaining the provenance of the id ('from list_tasks') and that the free-text form must be a unique fragment, which adds real matching 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 and resource ('Mark a task done') and names the two accepted identifiers, so an agent knows exactly what the tool does. It does not differentiate itself from the sibling update_task, which could plausibly also set completion state, so it falls short of a 5.
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 tells the agent where task ids come from ('from list_tasks') and that a text fragment is an accepted alternative, which is implied usage guidance. It never states when to prefer this tool over update_task or what to do if the fragment is not unique.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteCreate a noteB
Create a markdown note. type decides the folder (noteβnotes/, projectβprojects/, personβpeople/, referenceβreference/, areaβareas/). Use [[wikilinks]] in the body to connect it to related notes β always link generously.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Markdown body; use [[wikilinks]] to related notes | |
| tags | No | Tags without # | |
| type | No | Note type (default 'note') | |
| title | Yes | Note title (becomes the filename) | |
| overwrite | No | Replace an existing note at the same path | |
| frontmatter | No | Extra frontmatter keys, e.g. {status:'active'} |
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 usefully discloses the typeβfolder placement behavior (noteβnotes/, projectβprojects/, etc.), which is genuine behavioral context. But it is silent on overwrite semantics, what happens when a note already exists at the path, and permission/error behavior, which matters for a create 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?
Two sentences, front-loaded with the core action and the type mapping inline. The parenthetical folder list is dense but earns its place; nothing redundant.
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?
A 6-parameter create tool with a nested frontmatter object and no output schema needs the description to cover side effects and edge cases. The type routing is well covered and the schema handles parameter detail, but the destructive 'overwrite' path and existence/error behavior are entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema's bare enum by mapping each type value to its destination folder. It adds nothing for body, tags, overwrite, or frontmatter beyond the schema text.
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+resource ('Create a markdown note') and richly specifies the type parameter's folder routing, which makes the resource concrete. It does not, however, distinguish this from siblings like capture, append_note, or daily_note, so an agent gets no routing signal from the purpose text itself.
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 only guidance is content-style ('use [[wikilinks]]... link generously'), not tool-selection guidance. It never says when to use create_note versus capture, append_note, or replace_note_body, nor any preconditions. An agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate a projectB
Create a project note (Goal/Tasks/Notes/Log sections) with status frontmatter. Projects are the unit of ongoing work; link related notes to them with [[wikilinks]].
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | Target date YYYY-MM-DD | |
| area | No | Life/work area this belongs to | |
| goal | No | One-paragraph definition of done | |
| tags | No | ||
| title | Yes | Project name | |
| status | No | Initial status (default active) |
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 the created note's section layout and frontmatter. However, it omits other behavioral traits an agent needs: permissions required, behavior on duplicate titles, side effects, and what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, correctly front-loaded with the action and produced structure before the contextual note about relationships. No filler, though the second sentence is more contextual than strictly necessary.
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 output schema exists, so the description should ideally say what the call returns (note path, id, etc.) and how duplicates are handled; it does not. It is adequate for understanding what will be created but leaves the return and edge-case behavior unspecified.
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 83%, so the schema already documents nearly all parameters including the enum and date pattern. The description only hints at 'status frontmatter' and adds no format or constraint detail beyond the schema, matching the baseline for high-coverage schemas.
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 ('Create a project note') and specifies the internal structure it produces (Goal/Tasks/Notes/Log sections, status frontmatter), which distinguishes it from the generic create_note sibling. It stops short of explicitly naming create_note as the alternative, so an agent must infer the distinction.
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 second sentence gives context on what projects are ('the unit of ongoing work') and how to relate notes to them via [[wikilinks]], which implies when a project is appropriate. But there is no explicit when-to-use-vs-create_note or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_logLog to the daily noteA
Append a timestamped entry to today's daily note Log section. Use to record decisions, progress, and events as they happen β this builds the user's work journal.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | What happened / what was decided |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It usefully discloses append (additive, non-destructive) semantics and the automatic timestamp, but says nothing about whether the daily note is created if it is missing, ordering, or failure behavior β notable gaps for a write tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action and target front-loaded and the intent trailing; nothing is redundant or padded.
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 one-parameter append tool with no output schema, the description covers what gets written and where. The remaining gap is mutation-side behavior (note creation on miss, error handling) that would matter more given the complete absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single "text" parameter, so the baseline is 3. The description reframes the field as "decisions, progress, and events," adding only marginal meaning beyond the schema's "What happened / what was decided."
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 ("Append") and a precise resource ("today's daily note Log section") with the "timestamped" qualifier, which separates it from the generic append_note sibling. It stops short of naming that sibling explicitly, so differentiation is inferable rather than stated.
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?
"Use to record decisions, progress, and events as they happen" gives a clear situational context for when to reach for this tool. It offers no exclusions or named alternatives (e.g., vs. append_note or capture), which keeps it out of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_noteGet or create the daily noteA
Return today's daily note (or a specific date's), creating it from the daily template if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD (default today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers the single most important trait: the call may create the note from the daily template as a side effect. It stops short of saying whether creation is silent, what template is used, or what happens on write failure.
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?
One sentence, front-loaded with the primary action and the date scope, with the create fallback appended. Nothing extraneous.
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 single-optional-parameter tool with no output schema and no annotations, the description covers the default value, the date override, and the auto-creation behavior. Remaining gaps (return shape, template details) are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single 'date' parameter is already documented with its pattern and default. The description restates the today/specific-date behavior but adds no format or edge-case detail beyond the schema, matching the baseline 3.
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 ('Return today's daily note'), scopes it to a specific date, and discloses the get-or-create semantics. It doesn't explicitly differentiate itself from siblings like read_note or create_note, but 'daily note' is a recognizable distinct resource.
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: call it to obtain today's (or a given date's) daily note. There is no explicit when-not guidance or pointer to alternatives such as read_note for arbitrary notes or create_note for non-daily notes, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesList notesA
List notes by folder, type, or tag, most recently modified first. Use for browsing; use search_notes for content queries.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag filter (no #) | |
| type | No | Note type filter | |
| limit | No | Max results (default 30) | |
| folder | No | Folder prefix, e.g. 'people' |
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 does disclose the sort order ('most recently modified first'), which is genuinely useful and not in the schema, but says nothing about the default result cap, pagination, or what happens when filters are combined. For a read-only list operation the risk profile is low, so this partial disclosure is adequate rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The capability and the ordering are front-loaded, with the sibling routing in the second sentence where it belongs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool, the description covers filters, ordering, and alternative routing. The gap is that no output schema exists, so it could have said what a result looks like (note identifiers/titles) or how the default limit behaves. Minor omissions only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already has a description, so the schema does the heavy lifting. The description restates the folder/type/tag filters without adding syntax or semantics beyond the schema, and never mentions the 'limit' parameter or its default. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (List) plus resource (notes) plus the three filter dimensions (folder, type, tag) and the ordering guarantee. It explicitly names the sibling it is not (search_notes), so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the use case directly: 'Use for browsing' versus 'use search_notes for content queries.' This is an explicit when/when-not with a named alternative, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsA
List projects with status, open/done task counts, and next tasks. Statuses: idea, active, paused, done, dropped.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status, e.g. 'active' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it discloses that it is a read-style listing and what data is returned, which is useful. However, it says nothing about ordering, pagination, or whether task counts are scoped to the project only, leaving meaningful behavioral gaps for an unannotated 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?
Two short sentences, front-loaded with the action and return contents, followed by the valid filter values. Every clause earns its place with no 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 one-parameter read tool with no output schema, the description covers what is returned (status, counts, next tasks) and the valid status filter values. It is nearly complete, missing only ordering/pagination expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description supplies the actual allowed status values (idea, active, paused, done, dropped), which the schema omits since it only says "e.g. 'active'" with no enum. That enumeration is real added value beyond the structured field.
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 ('projects') and enumerates what the result contains (status, open/done task counts, next tasks). It is clearly distinct from siblings like list_tasks and list_notes by naming the resource, though it never explicitly differentiates itself from create_project/set_project_status.
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 or when-not-to-use guidance is offered. The status filter implies a way to narrow results, but nothing tells the agent when to reach for this versus list_tasks, brain_overview, or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList tagsA
All tags in the vault with usage counts, most used first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. It helpfully discloses the ordering ('most used first') and that counts are included, but says nothing about read-only nature, pagination, or result limits.
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 that packs scope, content, and ordering with zero waste.
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 read-only listing with no parameters, the description adequately conveys the return content (tags plus usage counts) and ordering. Nothing critical to calling it is missing.
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 takes zero parameters, which is the baseline for a 4. There is nothing for the description to add on the parameter front.
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+resource ('List tags') and adds scope and output shape ('All tags in the vault with usage counts, most used first'). Clear, though it does not differentiate itself from listing siblings like list_notes or list_projects.
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 and no named alternative. Usage is only implied by the 'list' verb in a tag-related toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList tasksA
List checkbox tasks across the vault, sorted by due date then priority. Filter by status (open/done/all), project, tag, or dueBy date.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| dueBy | No | Due on or before this date | |
| status | No | Default 'open' | |
| project | No | Only tasks in this project (title or path) |
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 the sort order and the filtering axes, but says nothing about result size limits, pagination, performance over a large vault, or what a returned task row contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the scope and sort order front-loaded before the filter list. Nothing is repeated or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with no output schema, the description covers purpose, scope, sort, and filters adequately. It falls short only on the missing 'tag' semantics and any hint about result volume or truncation.
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 75% (only 'tag' is undocumented), so the baseline is 3. The description restates the status values and the project/tag/dueBy filters but adds no semantics beyond the schema, and does not clarify what 'tag' matches or whether filters are ANDed.
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+resource ('List checkbox tasks') with explicit scope ('across the vault') and even the sort order ('due date then priority'), which is enough to separate it from list_notes, list_tags, and list_projects. It never names a sibling or states a contrast, so it stops short of a 5.
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 second sentence enumerates the narrowing dimensions (status, project, tag, dueBy), which implies when to filter, but there is no guidance on when to use this vs. list_notes/read_note or any exclusion. The default of 'open' only appears in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note_linksNote connectionsA
Show a note's graph neighborhood: outgoing wikilinks (resolved and broken) and backlinks from other notes. Use to explore context around a topic.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Note path, title, or alias |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose the return contents (resolved and broken outgoing links, backlinks), which is genuinely useful. However, it says nothing about behavior for an unresolvable ref, read-only guarantees, or any limits on graph depth or result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the return contents are front-loaded before the usage hint. 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?
With no output schema, the description correctly compensates by naming what comes back. It is nearly complete for a single-parameter read tool, missing only edge-case behavior (an unknown or broken ref) that would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single parameter ('ref'), so the schema already explains that it accepts a note path, title, or alias. The description adds no syntax, disambiguation, or format guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Show a note's graph neighborhood') and enumerates the two things returned: outgoing wikilinks (resolved and broken) plus backlinks. That is far more precise than a tautology. It stops short of 5 because it never distinguishes itself from the nearby sibling 'related_notes', which an agent could easily confuse with this graph-neighborhood view.
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?
'Use to explore context around a topic' gives an implied purpose but no explicit when-to-use conditions, prerequisites, or named alternatives such as related_notes or search_notes. The agent is left to infer which of the three link/related tools to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_noteRead a noteA
Read a note by path, title, alias, or filename (case-insensitive). Returns frontmatter and full body.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Path like 'projects/Foo.md', or a title/alias |
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 useful work: it discloses case-insensitive matching and that the response includes frontmatter plus full body, which matters since no output schema exists. It omits failure behavior (e.g., what happens when the reference resolves to nothing) and any concurrency or size caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the lookup-key enumeration front-loaded and the return payload second. Nothing is repeated or padded.
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 single-parameter read tool with no output schema, the description covers the essential call mechanics and return contents. The only meaningful omission is not-found/ambiguity handling when a reference is missing or matches multiple notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by declaring case-insensitive matching and adding 'filename' as an accepted form that the schema's 'Path like ... or a title/alias' does not mention. That extra acceptance detail is actionable for constructing ref.
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 (Read) and resource (note) and enumerates the accepted reference forms (path, title, alias, filename). It is unambiguous what the tool returns, but it never names or contrasts itself with siblings like search_notes, list_notes, or related_notes, which an agent must distinguish it from.
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 only implied: the description makes clear this fetches an existing note when you already know its reference. There is no explicit when-to-use/when-not guidance and no routing to alternatives such as search_notes when the reference is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_note_bodyReplace a note's bodyA
Rewrite a note's entire body (frontmatter preserved). Prefer append_note for additions; use this only for deliberate rewrites/reorganizations.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Note path, title, or alias | |
| body | Yes | New markdown body |
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 the key destructive-scope fact: the entire body is overwritten while frontmatter is preserved. That is exactly the trait an agent needs to avoid accidental data loss. It stops short of stating reversibility, confirmation behavior, or error cases, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core operation and its constraint front-loaded ahead of the routing advice. 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 simple two-parameter, fully schema-documented tool with no output schema and no annotations, the description covers the operation, its scope, and its sibling routing. The only shortfall is the absence of any note on reversibility or return behavior, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'ref' and 'body' are already documented in the schema. The description adds no format or syntax detail beyond the schema (e.g., what 'markdown body' accepts), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rewrite a note's entire body') and immediately scopes it with '(frontmatter preserved)', which is the exact distinction that matters. It contrasts cleanly with the append_note sibling, which shares the resource but not the operation.
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?
Names the alternative tool explicitly ('Prefer append_note for additions') and gives the precise condition that selects this one ('only for deliberate rewrites/reorganizations'). Both when-to-use and when-not-to-use are present, so no inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesSearch notesA
Search the vault: full-text (titles boosted, fuzzy + prefix matching), fused with local semantic search when the vault has embeddings enabled. Filter by type (note/project/daily/person/reference/area), tag, folder prefix, or frontmatter status.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Restrict to notes with this tag (no #) | |
| type | No | Restrict to a note type, e.g. 'project' | |
| limit | No | Max results (default 20) | |
| query | Yes | Search terms | |
| folder | No | Restrict to a folder prefix, e.g. 'reference' | |
| status | No | Restrict by frontmatter status, e.g. 'active' |
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 non-obvious behaviour: titles are boosted, matching is fuzzy and prefix-based, and results are fused with semantic search only when embeddings exist. It stops short of stating that the operation is read-only and that results are ranked (no ordering or pagination behaviour is described), so the safety profile must still be inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, and the core capability is front-loaded before the list of filters. Every clause adds information an agent can act on; nothing restates the tool name or schema.
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 6-parameter read-only search with no annotations and no output schema, the description covers matching semantics and all filter dimensions adequately. It leaves the return shape and result ordering unexplained, but those are lower-stakes for a search call whose limit is already documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, which sets the baseline at 3, but the description earns more by enumerating the accepted type values (note/project/daily/person/reference/area) that the schema leaves unenumerated (0 enums). It also confirms the filterable dimensions (tag, folder prefix, frontmatter status) in one sweep, though it adds no format detail beyond the schema's own examples.
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 ('Search the vault') and goes further by naming the retrieval mechanics (full-text with boosted titles, fuzzy + prefix matching, fused semantic search). It never names the obvious siblings (list_notes for unfiltered listing, related_notes for neighbour discovery), so an agent must infer the boundary rather than being told it.
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 when-to-use/when-not guidance and no alternative is named, even though list_notes and related_notes overlap meaningfully with this tool. The only conditional in the text ('when the vault has embeddings enabled') describes internal behaviour, not when an agent should pick this tool over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_statusSet project statusB
Change a project's status (idea/active/paused/done/dropped). 'done' stamps a completion date.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Project path or title | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses one non-obvious side effect β that 'done' stamps a completion date β which goes beyond the schema. However, it omits whether the change is reversible, whether it overwrites a prior status, permission requirements, and the error behavior for an unknown ref, leaving real gaps for a mutation 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?
Two compact sentences with the action and the valid status set front-loaded, followed by the one notable side effect. No filler 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 two-parameter mutation with no annotations and no output schema, the description covers status semantics and the completion-date side effect but omits failure modes, permissions, and what the tool returns. It is minimally viable rather than complete.
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 50% (ref is documented as 'Project path or title' in the schema; status is an undocumented enum). The description re-lists the enum values but adds no new meaning beyond the schema's enum, and says nothing about ref resolution ambiguity (path vs. title collision). At 50% coverage this is only marginally additive.
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 (Change) and resource (a project's status), and enumerates the accepted status values, so an agent can tell it performs a status mutation on a project. It does not name or contrast itself with the related project tools (create_project, list_projects), which is the only thing keeping it from a 5.
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 says what it does but never says when to use it, what prerequisites exist (must the project already exist), or which sibling to use for adjacent jobs like creating a project. There is no when-to-use or when-not-to-use guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_frontmatterUpdate note frontmatterA
Merge keys into a note's YAML frontmatter (set a key to null to remove it). Use for status, priority, due, area, tags, aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Note path, title, or alias | |
| updates | Yes | Keys to set; null deletes a key |
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 the key behavioral facts: a merge (other keys are preserved) and null-based key removal. It says nothing about permissions, error handling when the note is missing, or how YAML types are coerced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences; the core operation and its deletion semantic lead, and the use-case list follows. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no output schema and no annotations, the description supplies the essentials: merge semantics, deletion mechanism, and intended use cases. Missing only peripheral behavioral notes (auth, failure modes).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (ref, updates) are already documented in the schema; baseline 3 applies. The description adds only a hint that the keys are things like status/priority/due, which is marginal value over the schema's 'Keys to set; null deletes a key'.
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 ('Merge keys into') and resource ('a note's YAML frontmatter'), plus the null-deletion semantic that defines the operation. It is distinguishable from siblings like replace_note_body or append_note by resource, though no sibling is named explicitly.
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?
'Use for status, priority, due, area, tags, aliases' gives concrete context for when this tool applies. There is no statement of when not to use it or which sibling to prefer for body edits, so it falls short of a full routing guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskUpdate a taskA
Edit one task in place: reschedule (due), reprioritize, reword, reopen, or cancel β without rewriting the note. Matches by id (from list_tasks) or a unique text fragment, including done and cancelled tasks. Use complete_task to finish a task.
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | New due date YYYY-MM-DD, or null to clear | |
| task | Yes | Task id or unique text fragment | |
| text | No | New description; dates and priority are kept. Include any #tags to keep | |
| status | No | 'open' reopens, 'done' completes (stamps today), 'cancelled' drops it | |
| priority | No | New priority, or null for normal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose meaningful traits: the edit is in-place and does not rewrite the note, and matching works on ids or unique text fragments including done/cancelled items. It stops short of stating what happens on no match or ambiguous fragment, or what the mutation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences plus one routing clause; the edit scope and mode list are front-loaded and every phrase earns its place with no restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema, the description covers what is mutated, how targets are resolved, and the sibling alternative. Only the failure/ambiguity behavior and return shape remain unaddressed, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds intent-to-parameter mapping that the schema doesn't ('reopen', 'cancel', 'reword', 'reprioritize') and clarifies that the `task` argument accepts either an id or a unique fragment spanning closed tasks.
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?
Names a specific verb (edit) and resource (one task) and enumerates the concrete edit modes β reschedule, reprioritize, reword, reopen, cancel. It also explicitly distinguishes itself from complete_task and from note-rewriting siblings, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: 'Use complete_task to finish a task,' plus the lookup path ('Matches by id (from list_tasks) or a unique text fragment'). It also states the tool will reach done and cancelled tasks, which tells the agent when this tool is appropriate versus a narrower one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_healthVault health checkA
Lint the vault: broken wikilinks, duplicate titles, stale active projects, overdue tasks, orphan notes, inbox pileup. Use during reviews.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden, and the diagnostic framing ('lint') does usefully imply a read-only, non-mutating operation. However, it says nothing about the output form, whether findings are severity-ranked, whether thresholds for 'stale' or 'overdue' are configurable, or how large/costly the scan is. It adds some behavioral signal but leaves the agent guessing about the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the capability list is front-loaded before the usage hint. The six-item colon list is dense and slightly scannable rather than prose, but every item carries information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no annotations and no output schema, the description covers what is checked but not what comes back or in what structure. Enumerating the six check categories is the right core, yet an agent still cannot anticipate the result shape, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema is an empty object with no parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the enumerated checks are the only 'input' semantics an agent needs, and they are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb ('lint') against a concrete resource (the vault) and enumerates the six specific classes of problems it detects: broken wikilinks, duplicate titles, stale active projects, overdue tasks, orphan notes, inbox pileup. That enumeration makes it unmistakably distinct from every sibling, all of which read, list or mutate individual notes/tasks/projects rather than diagnosing vault-wide integrity.
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?
'Use during reviews' gives a trigger context, which is more than most definitions offer, but it never states when NOT to use it or names any alternative. Since no sibling performs a comparable diagnostic, the routing risk is low, but the guidance remains implied rather than explicit.
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.
23 tool updates
v0.1.0- First observed
add_task - First observed
append_note - First observed
archive_note - First observed
brain_overview - First observed
capture - First observed
complete_task - First observed
create_note - First observed
create_project - First observed
daily_log - First observed
daily_note - First observed
list_notes - First observed
list_projects - First observed
list_tags - First observed
list_tasks - First observed
note_links - First observed
read_note - First observed
related_notes - First observed
replace_note_body - First observed
search_notes - First observed
set_project_status - First observed
update_frontmatter - First observed
update_task - First observed
vault_health
TDQS
Scored across 23 tools
Most tools target clearly distinct resources and actions (notes vs tasks vs projects vs daily notes), and descriptions actively steer between near-neighbors like append_note vs replace_note_body and list_notes vs search_notes. The main soft spot is note_links vs related_notes, both graph/context-exploration tools whose boundaries require reading the descriptions carefully.
All names use snake_case consistently, which keeps the set readable. However, verb-first (list_notes, create_note, update_task) is mixed with noun-first naming (note_links, related_notes, daily_note, daily_log, brain_overview, vault_health), so the pattern isn't fully predictable.
At 23 tools the set is on the heavy side, but the domain is genuinely broad (notes, tasks, projects, daily notes, search, graph, and vault health), and nearly every tool maps to a distinct operation. It is slightly over what one would want but not padded.
Coverage is strong: notes support create/read/append/replace/frontmatter/archive plus search, links, and related notes; tasks have add/complete/update/list; projects have create/list/status. Minor gaps remain, notably no unarchive/restore to pair with archive_note and no note move/rename operation.
Maintenance
Related MCP Connectors
Personal context for every AI: search, read, and write back to your private Markdown library.
Markdown notes in folders, with files, that your AI assistant can read, write and organise.
Markdown notes in folders, with files, that your AI assistant can read, write and organise.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Related MCP Servers
- AlicenseBqualityFmaintenanceProvides an agent-first note-taking system designed from the ground up for AI collaboration. Organizes your notes as a local vault of ordinary markdown files with semantic note types.28131 npm10MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude and Codex to read, write, search, and traverse Markdown notes stored in a self-hosted knowledge base.7 npmMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to search, read, and traverse Markdown note vaults (Obsidian-compatible) with full-text search, backlinks, knowledge graphs, and a persistent memory system for cross-session context.1613 npm4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to capture, search, update, and delete notes in a local Markdown vault with automatic categorization and tagging, making knowledge management seamless.2 npm1MIT