Skip to main content
Glama
sweir1
by sweir1

obsidian-brain

npm version License: Apache 2.0 Node โ‰ฅ 20 GitHub stars

A standalone Node MCP server that gives Claude (and any other MCP client) semantic search + knowledge graph + vault editing over an Obsidian vault. Runs as one local stdio process โ€” no plugin, no HTTP bridge, no API key, nothing hosted. Your vault content never leaves your machine.

๐Ÿ“– Full docs โ†’ sweir1.github.io/obsidian-brain Companion plugin โ†’ sweir1/obsidian-brain-plugin (optional โ€” unlocks active_note, dataview_query, base_query)

Contents โ€” Why ยท Quick start ยท What you get ยท How it works ยท Companion plugin ยท Troubleshooting ยท Recent releases

Why obsidian-brain?

  • Works without Obsidian running โ€” unlike Local REST API-based servers, obsidian-brain reads .md files directly from disk. Obsidian can be closed; your vault is just a folder.

  • No Local REST API plugin required โ€” nothing to install inside Obsidian for the core experience.

  • Chunk-level semantic search with RRF hybrid retrieval โ€” embeddings at markdown-heading granularity, fused with FTS5 BM25 via Reciprocal Rank Fusion. Finds the exact chunk, ranks on meaning.

  • The only Obsidian MCP server with PageRank + Louvain + graph analytics โ€” ask for your vault's most influential notes, bridging notes, theme clusters. Nobody else ships this.

  • Ollama provider for high-quality local embeddings โ€” switch to qwen3-embedding:0.6b, nomic-embed-text, bge-m3, etc. with one env var.

  • All in one npx install โ€” no clone, no build, no API key, no hosted endpoint. Vault content never leaves your machine.

Related MCP server: obsidian-mcp-complete

Quick start

One-line install (macOS + Claude Desktop)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/sweir1/obsidian-brain/main/scripts/install.sh)"

Installs Homebrew + Node 20+ if you don't already have them, adds the /usr/local/bin symlinks that Claude Desktop needs, merges obsidian-brain into your claude_desktop_config.json, opens the Full Disk Access pane for you to toggle Claude on, and relaunches Claude. You'll be asked for your macOS password once (for Homebrew + the symlinks) and your vault path once. Everything else is automatic. Audit what it does: scripts/install.sh.

Manual install

Requires Node 20+ and an Obsidian vault (or any folder of .md files โ€” Obsidian itself is optional).

Wire obsidian-brain into your MCP client. Example for Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "obsidian-brain": {
      "command": "npx",
      "args": ["-y", "obsidian-brain@latest", "server"],
      "env": { "VAULT_PATH": "/absolute/path/to/your/vault" }
    }
  }
}

Quit Claude Desktop (โŒ˜Q on macOS) and relaunch. That's it.

NOTE

On first boot the server auto-indexes your vault and downloads a ~34 MB embedding model. Tools may take 30โ€“60 s to appear in the client. Subsequent boots are instant.

TIP

Not a developer? The macOS walkthrough covers Homebrew, Node, the GUI-app PATH fix, and Full Disk Access step-by-step.

For every other MCP client (Claude Code, Cursor, VS Code, Jan, Windsurf, Cline, Zed, LM Studio, JetBrains AI, Opencode, Codex CLI, Gemini CLI, Warp): see Install in your MCP client.

โ†’ Full env-var reference: Configuration โ†’ Model / preset / Ollama details: Embedding model โ†’ Migrating from aaronsb's plugin: Migration guide

What you get

18 MCP tools grouped by intent:

  • Find & read โ€” search, list_notes, read_note

  • Understand the graph โ€” find_connections, find_path_between, detect_themes, rank_notes

  • Write โ€” create_note, edit_note, apply_edit_preview, link_notes, move_note, delete_note

  • Live editor (requires companion plugin) โ€” active_note, dataview_query, base_query

  • Maintenance โ€” reindex, index_status

โ†’ Arguments, examples, and response shapes: Tool reference

How it works

flowchart LR
    Client["<b>MCP Client</b><br/>Claude Desktop ยท Claude Code<br/>Cursor ยท Jan ยท Windsurf ยท ..."]

    subgraph OB ["obsidian-brain (Node process)"]
        direction TB
        SQL["<b>SQLite index</b><br/>nodes ยท edges<br/>FTS5 ยท vec0 embeddings"]
        Vault["<b>Vault on disk</b><br/>your .md files"]
        Vault -->|"parse + embed"| SQL
        SQL -.->|"writes"| Vault
    end

    Client <-->|"stdio JSON-RPC"| OB

Retrieval and writes both go through a SQLite index: reads are microsecond-cheap, writes land on disk immediately and incrementally re-index the affected file. Embeddings are chunk-level (heading-aware recursive chunker preserving code + LaTeX blocks), and search's default hybrid mode fuses chunk-level semantic rank with FTS5 BM25 via Reciprocal Rank Fusion.

โ†’ Deeper write-up โ€” why stdio, why SQLite, why local embeddings: Architecture โ†’ Live watcher behaviour + debounces: Live updates โ†’ Scheduled reindex (macOS launchd / Linux systemd): Scheduled indexing (macOS) ยท (Linux)

Companion plugin (optional)

An optional Obsidian plugin at sweir1/obsidian-brain-plugin exposes live Obsidian runtime state โ€” active editor, Dataview results, Bases rows โ€” over a localhost HTTP endpoint. When installed and Obsidian is running, active_note, dataview_query, and base_query light up. Install via BRAT with repo ID sweir1/obsidian-brain-plugin.

Ship plugin and server at the same major.minor โ€” server v1.7.x pairs with plugin v1.7.x. Patch-version drift is fine.

โ†’ Security model, capability handshake, Dataview / Bases feature coverage: Companion plugin

Troubleshooting

Four most common:

  • "Connector has no tools available" in Claude Desktop โ€” usually the server crashed at startup. Check ~/Library/Logs/Claude/mcp-server-obsidian-brain.log. Fix: npm install -g obsidian-brain@latest, quit Claude (โŒ˜Q), relaunch.

  • ERR_DLOPEN_FAILED / NODE_MODULE_VERSION mismatch โ€” better-sqlite3 built against a different Node ABI. Fix: PATH=/opt/homebrew/bin:$PATH npm rebuild -g better-sqlite3.

  • Vault path not configured โ€” VAULT_PATH is unset. Set it in the env block of your client config or shell.

  • Old version loading via npx (your client still shows the previous release after a publish) โ€” stale npx cache. Fix: rm -rf ~/.npm/_npx, then restart your client. Keeping @latest in your config prevents this.

โ†’ Full troubleshooting guide (watcher not firing, stale index, running multiple clients, timeouts, embedding-dim mismatch, log locations): docs/troubleshooting.md

Recent releases

  • v1.7.24 (2026-05-16) โ€” embeddings.md BYOM callout + 5 devDep bumps

  • v1.7.23 (2026-05-16) โ€” BYOM Ollama auto-pull gate + logger sweep + SIGTERM unit test

  • v1.7.22 (2026-05-15) โ€” structured stderr (NDJSON) + Ollama preparing-state + dependabot security bumps + SIGTERM drain integration test

  • v1.7.21 (2026-04-27) โ€” install.sh vault-picker fix + auto ollama pull + docs/test polish

  • v1.7.20 (2026-04-27) โ€” Ollama prefix-lookup bug + 13 audit polish items

โ†’ Full changelog: docs/CHANGELOG.md ยท Forward plan: docs/roadmap.md ยท Build from source: docs/development.md

Credits

Thanks to obra/knowledge-graph and aaronsb/obsidian-mcp-plugin for the ideas and code this project draws on. Also Xenova/transformers.js (local embeddings), graphology (graph analytics), and sqlite-vec (vector search in SQLite).

  • apple-notes-brain โ€” sibling MCP server for Apple Notes on macOS: read, write, and search with full Markdown round-trip in both directions.

License

Apache License 2.0 โ€” Copyright 2026 sweir1.

Available Tools

18 tools
active_noteA

Return the note currently open in Obsidian, including cursor position and selection. Requires the obsidian-brain companion plugin installed and Obsidian running against the same vault.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It states the prerequisites but does not confirm it is read-only or mention potential failure modes. It adds some context but could be more thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The first states the core functionality, the second states prerequisites. Well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does not specify the return format or structure, which is a gap given no output schema. It also lacks error handling info. Adequate but not fully complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (0), so the description does not need to explain parameters. The baseline is 4, and the description adds context about what the return includes, which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the currently open note in Obsidian with cursor position and selection. It uses specific verbs and resource, distinguishing it from siblings like read_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use (to get the active note) and prerequisites (requires plugin and running Obsidian). It does not explicitly state when not to use or list alternatives, but the sibling tools imply alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_edit_previewA

Apply a previously previewed edit. Pass the previewId returned by edit_note with dryRun: true. Previews expire after 5 minutes. Fails with a descriptive error if the target file changed since the preview was generated โ€” in that case, regenerate the preview and try again.

ParametersJSON Schema
NameRequiredDescriptionDefault
previewIdYesThe previewId returned by `edit_note` with `dryRun: true`.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, the description discloses key behaviors: preview expiration (5 min) and error on file change. It doesn't detail other aspects like idempotency or asynchronous execution, but covers the most critical constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. Front-loaded with the main action, followed by prerequisite, expiration, and error handling. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter and no output schema, the description covers prerequisite, parameter, expiration, and error handling. Minor gap: no mention of success behavior or return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description repeats the schema's parameter info (the previewId) without adding new semantics or format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it applies a previously previewed edit, linking to the sibling edit_note. It specifies the verb 'apply' and the resource 'preview', making the action unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the prerequisite (obtain previewId from edit_note with dryRun: true) and handles failure scenarios (expiry, file change). Lacks explicit when-not-to-use but provides strong contextual cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

base_queryA

Evaluate an Obsidian Bases .base file and return its rows. Requires the obsidian-brain companion plugin installed, a recent Obsidian (1.10.0+) running against the same vault, and the Bases core plugin enabled (Obsidian โ†’ Settings โ†’ Core plugins โ†’ Bases). Obsidian does not yet expose a public API for headless Bases query execution (Plugin.registerBasesView() is a view-factory hook only). The plugin uses its own YAML parser + a whitelisted expression subset (Path B). See docs/plugin.md#bases for the full supported subset. Supported subset: tree ops (and/or/not), comparisons (==, !=, >, >=, <, <=), leaf boolean (&&, ||, !), file.{name, path, folder, ext, size, mtime, ctime, tags}, file.hasTag("x"), file.inFolder("x"), frontmatter dot-paths. Arithmetic (+, -, *, /, %), method calls other than hasTag/inFolder, function calls (today(), now(), etc.), regex literals, formulas:, summaries:, and this context references all return 400 unsupported_construct errors โ€” they ship in subsequent plugin patches as users hit them. Provide either file (vault-relative path to a .base file) or yaml (inline .base YAML source); view names which view inside the file to execute. Returns { view, rows, total, executedAt } โ€” rows contain {file: {name, path}, ...projected columns}, total is the pre-limit count. Default 30s timeout (override with timeoutMs). Timeout only cancels the HTTP wait; the plugin has no cancellation API, so a running evaluation keeps going inside Obsidian. Prefer a limit: in the view for open-ended queries over large vaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoVault-relative path to a `.base` YAML file (e.g. "Bases/Books.base"). Either `file` or `yaml` is required.
yamlNoInline `.base` YAML source. Either `file` or `yaml` is required.
viewYesThe name of the view inside the `.base` file to execute, e.g. "active-books".
timeoutMsNoHTTP timeout in ms (default 30000). The plugin evaluator itself cannot be cancelled; this just bounds how long this tool waits.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses plugin dependency, limitations of Obsidian API, unsupported construct errors, timeout behavior (only cancels HTTP wait, not plugin execution), and return format. Exceptionally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and prerequisites. Well-structured with clear sections. Slightly verbose on unsupported constructs list, but justified by complexity. No wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete coverage for a complex tool: prerequisites, parameter details, return structure, error cases, limitations, and timeout behavior. No output schema, but description adequately fills the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters (baseline 3). Description adds value by clarifying mutual exclusivity of file/yaml, giving example for view, and explaining timeoutMs behavior beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Explicitly states the verb 'evaluate', the resource '.base file', and the output 'return its rows'. Clear distinction from sibling tools by focusing on Obsidian Bases, with prerequisites listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit prerequisites (plugin, Obsidian version, core plugin) and when-not-to-use (unsupported constructs return 400). Suggests using limit: for open-ended queries. However, lacks direct comparison to sibling tool dataview_query.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_noteA

Create a new note in the vault with a title, body, and optional YAML frontmatter. The new note is indexed immediately so semantic search and graph tools can find it. Auto-injects a title: field into frontmatter matching the note title unless frontmatter already has one.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesNote title. Used as the filename base and auto-injected into frontmatter.
contentYesMarkdown body (do not include frontmatter here).
directoryNoVault-relative subdirectory to create the note in.
frontmatterNoYAML frontmatter key/value map. `title` is auto-injected unless explicitly set.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses immediate indexing and title auto-injection, but does not mention error conditions (e.g., overwrite behavior) or required permissions. As no annotations exist, more details would enhance transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no redundancy. Each sentence adds essential information: creation, indexing, and auto-injection nuance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers parameters well but omits return value (e.g., note path or ID) and does not specify behavior on duplicate titles. Given no output schema, this gap is notable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant value beyond schema: explains title as filename and frontmatter injection, clarifies content excludes frontmatter, and describes directory and frontmatter behavior. Schema coverage is 100%, but description elevates understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (create) and resource (new note in vault), and distinguishes from sibling tools like edit_note and delete_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (create a new note) but lacks explicit when-not-to-use or alternatives. It provides behavioral details like auto-injection but no direct comparison to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dataview_queryA

Run a Dataview DQL query against the vault. Requires the obsidian-brain companion plugin v0.2.0+ installed, Obsidian running against the same vault, and the Dataview community plugin enabled. Returns a normalized discriminated-union shape. kind='table' gives {headers, rows}. kind='list' gives {values}. kind='task' gives {items: [{task, text, path, line, tags, children, ...STask fields when task=true}]}. kind='calendar' gives {events: [{date, link, value?}]}. DQL reference: https://blacksmithgu.github.io/obsidian-dataview/queries/structure/. Default 30s timeout (override with timeoutMs). NOTE: timeoutMs only cancels the HTTP wait; Dataview has no cancellation API, so the query keeps running inside Obsidian to completion. Prefer LIMIT N in DQL for open-ended queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesDQL source, e.g. 'TABLE file.name, rating FROM #book WHERE status = "reading" LIMIT 50'
sourceNoOptional origin file path (vault-relative) to set the DQL origin. Affects `FROM ""` and relative link resolution inside the query.
timeoutMsNoHTTP timeout in ms (default 30000). The Dataview query itself cannot be cancelled; this just bounds how long this tool waits.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses behavioral traits: the return shape (discriminated union with details for each kind), the timeout behavior (only cancels HTTP wait, not the query itself), and the need for specific plugins. This is comprehensive and honest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with purpose, then prerequisites, then return shapes. It is slightly long but every sentence is informative. Could be tightened slightly, but overall effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (multiple output kinds, no output schema, external dependencies), the description is remarkably complete. It covers prerequisites, return structures, timeout nuance, and best practices. No gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value: example DQL for 'query', explanation of 'source' as optional origin for relative links, and timeoutMs details (default, no cancellation). This goes well beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it runs a Dataview DQL query against the vault, with a specific verb 'Run' and resource 'Dataview DQL query'. It distinguishes itself from sibling tools like search or list_notes by focusing on Dataview's query language.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit prerequisites (plugin versions, Obsidian running, Dataview enabled) and practical guidance like using LIMIT and understanding timeout limitations. It lacks explicit 'when not to use' or direct alternatives, 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.

delete_noteA

Permanently delete a note. Removes the file from disk AND its index rows (edges, embedding, node). Requires confirm: true to guard against accidents. When the delete removes inbound edges, the response is wrapped in a next_actions envelope suggesting a follow-up rank_notes(method=pagerank, minIncomingLinks=0) to spot newly orphaned notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPath or fuzzy match of the note to delete.
confirmYesMust literally be `true` to execute. Guards against accidental deletion.
dryRunNoIf true, report what would be deleted without removing any files.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses permanence, what gets destroyed (file, edges, embedding, node), guard condition, and suggests next steps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no fluff. Front-loaded with main action. Every sentence provides value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, it thoroughly describes the effect and even suggests follow-up. Covers behavior fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds meaning: 'confirm: true' guard, 'dryRun' reports what would be deleted. Adds context beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Permanently delete a note' and specifies what is removed (file, index rows). Distinguishes from siblings like move_note or edit_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly requires 'confirm: true' to guard against accidents and suggests a follow-up action (rank_notes) after deletion. Does not explicitly state when not to use, but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_themesA

List auto-detected topic clusters across the vault (served from the community-detection cache). Pass a theme id or label to drill into one cluster. To recompute with a different Louvain resolution, call reindex({ resolution: X }) first โ€” detect_themes itself is a read-only tool. Each returned cluster carries staleMembersFiltered โ€” the number of cached nodeIds that no longer exist in the vault and were dropped on this read. A positive value means the cached community row is lagging; the filter also regenerates summary so it stays consistent with the filtered nodeIds. Broken-wikilink stub targets are excluded by default; pass includeStubs: true to include them. When the overall vault graph has LOW modularity (<0.3), the response includes { warning, modularity } at the envelope top-level โ€” the clusters aren't clearly separable on this graph and may not reflect meaningful themes.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeIdNoDrill into a single cluster by its id or label.
includeStubsNoDefault `false`. Set `true` to include unresolved wiki-link targets (`frontmatter._stub: true`) in cluster membership. Older cached community data may still carry stub-dominated clusters until the next reindex regenerates the community table.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It details read-only nature, caching, staleMembersFiltered, filtering of stubs, and modularity warnings. Very comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with main purpose and then provides necessary details in a logical order. Every sentence adds value; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, description explains response contents (staleMembersFiltered, warning, modularity) and edge cases. Fully adequate for a read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds meaning for both parameters: themeId explains drilling, includeStubs explains default behavior and caching implications.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists auto-detected topic clusters (specific verb+resource). It distinguishes itself from siblings like reindex by noting that computation is done elsewhere.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use reindex instead for recomputation. Also explains drilling into a cluster with themeId or label.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_noteA

Modify an existing note. Supports six edit modes: append (add to end; defensively inserts a leading newline if the source didn't end with one), prepend (insert after frontmatter if present, otherwise at file start), replace_window (find a block of text and replace it โ€” optionally fuzzy; fuzzy extends match to consume trailing .?! so the replacement has no doubled punctuation), patch_heading (insert or replace content under a specific heading; headingOp: 'before' | 'after' inserts immediately before/after the heading line โ€” use before on the NEXT heading to append to a section's end; headingOp: 'replace' with scope: 'section' (default) replaces to the next same-or-higher heading or EOF โ€” CAREFUL on the LAST heading, this consumes everything below including content separated by blank lines โ€” pass scope: 'body' to stop at the first blank line after the body; if the target heading text appears MORE THAN ONCE the call throws MultipleMatches listing each occurrence with its line number โ€” pass headingIndex: 0 | 1 | ... (0-indexed, top-to-bottom) to pick one), patch_frontmatter (set a single YAML key; pass value: null to clear โ€” or from XML-stringifying clients use valueJson: 'null' for true null, valueJson: 'true' for a real boolean, valueJson: '42' for a number, valueJson: '["a"]' for an array; valueJson wins over value when both are set), at_line (insert or replace at a 1-indexed line number that counts from file start including frontmatter lines). Pass edits (array) to apply multiple edits atomically โ€” all succeed or none are written.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPath or fuzzy match of the note to edit.
modeNoEdit mode. Required unless `edits` array is provided.
contentNoNew content to insert or replace (meaning is mode-dependent).
searchNoFor `replace_window`: the block of text to locate and replace.
fuzzyNoFor `replace_window`: tolerate whitespace and trailing-punctuation drift.
fuzzyThresholdNoSimilarity threshold for fuzzy replace_window matches (0-1, default 0.7). Higher = stricter. 0.9 is recommended for typo-tolerant matching of known-good text.
headingNoTarget heading text for `patch_heading` mode.
headingOpNoFor `patch_heading`. `replace` (default) replaces section; `before`/`after` inserts adjacent to the heading line.
scopeNoFor `patch_heading replace`: `section` (default) consumes to next same-or-higher heading; `body` stops at first blank line.
headingIndexNoFor `patch_heading` when the heading appears more than once โ€” 0-indexed top-to-bottom picker.
keyNoFor `patch_frontmatter`: the YAML key to set.
valueNoFor `patch_frontmatter`: value to set. Use `null` to clear a key. Prefer `valueJson` from clients that stringify params.
valueJsonNoFor `patch_frontmatter`: JSON-encoded value (wins over `value`). Use `"null"` to clear, `"true"` for boolean, `"42"` for number.
lineNoFor `at_line`: 1-indexed line number (counts from file start including frontmatter).
lineOpNoFor `at_line`: insert before/after the target line, or replace it. Default `replace`.
dryRunNoIf true, return a unified-diff preview without writing. Pass the returned previewId to apply_edit_preview to commit.
from_bufferNoIf true, retry a previously failed replace_window edit using the cached content + search with fuzzy: true, fuzzyThreshold: 0.5. Use when the prior edit failed with NoMatch. Cleared on success.
editsNoArray of edits to apply atomically to a single file. If any edit fails, no edit is written. Applied in order against the accumulated state (each edit sees the result of previous edits in the batch). Use replace_window / patch_heading for content-anchored edits; at_line references the accumulated state, not the original file.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behaviors: defensive newline in append, fuzzy trailing punctuation handling, heading duplication throwing MultipleMatches, atomic edits via 'edits' array, dry-run preview, and detailed patch_heading scope behavior. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed and front-loaded with a summary of modes, but it is verbose. Every sentence adds necessary detail given the tool's complexity, though a more structured format (e.g., bullet points) could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 18 parameters, no output schema, and complex behavior, the description covers all modes, error handling, edge cases, and best practices. It is sufficiently complete for an AI agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While schema coverage is 100%, the description adds significant meaning beyond schema labels, such as explaining fuzzy threshold recommendation, scope='body' behavior, and valueJson nuances. This adds value for correct parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Modify an existing note' and details six distinct edit modes (append, prepend, replace_window, etc.), making the tool's purpose specific and distinct from sibling tools like create_note, delete_note, and move_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each edit mode and provides contextual guidance (e.g., fuzzy trailing punctuation handling, scope for section replacement). However, it does not explicitly compare with alternative tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_connectionsA

Find notes linked to (from or to) a given note, up to N hops. Optionally return the full subgraph instead of a flat list. Response is wrapped as {data, context} where context.next_actions suggests follow-ups like clustering a dense neighbourhood via detect_themes or tracing a path to the furthest neighbour via find_path_between. Broken-wikilink stub neighbours are excluded by default; pass includeStubs: true to include them.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesStarting note (path or fuzzy match).
depthNoNumber of hops to traverse. Default 1, max 3.
returnSubgraphNoReturn all edges in the neighborhood as a full subgraph instead of a flat list.
includeStubsNoDefault `false`. Set `true` to include broken-wikilink stub neighbours (`frontmatter._stub: true`).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses stub exclusion behavior, optional includeStubs, and response wrapping with context.next_actions. However, it does not explicitly state whether the operation is read-only or mention any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. First sentence states purpose, second adds optional return format and response wrapping, third explains stub exclusion. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers key aspects: purpose, parameters, response format, and follow-up hints. Without an output schema, it provides enough context for an agent to select and invoke the tool correctly. Slight miss on explicit performance or auth hints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value beyond schema by explaining the default behavior of excludeStubs and the response structure including next_actions hints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Find notes linked to (from or to) a given note, up to N hops,' specifying action, resource, and constraints. It distinguishes from siblings like find_path_between and detect_themes by noting follow-up suggestions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context for usage, including follow-up actions like clustering or path tracing. It does not explicitly state when not to use but offers alternative suggestions in the response context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_path_betweenA

Find link paths between two notes. Returns all simple paths up to maxDepth edges, optionally including their shared neighbors. Broken-wikilink stub nodes are excluded by default โ€” they are degree-1 dead ends in the undirected graph and will block legitimate paths if left in. Pass includeStubs: true to include them.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYesSource note (path or fuzzy match).
toYesTarget note (path or fuzzy match).
maxDepthNoMaximum path length in hops. Default 3.
includeCommonNoAlso return notes that both `from` and `to` link to (shared neighbors).
includeStubsNoDefault `false`. Set `true` to include broken-wikilink stub nodes (`frontmatter._stub: true`) in the path search.

TDQS

A4.2/5.0
Behavior4/5

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 explains the default exclusion of stub nodes, why they are excluded (degree-1 dead ends), and the option to include them. Also describes that it returns simple paths up to maxDepth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences plus an additional sentence about stubs, all front-loaded. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is quite complete. It covers core function, parameters, and a key behavioral detail. Could mention return format, but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value beyond schema by explaining the default behavior of includeStubs and the rationale for stubs. Brief explanation of includeCommon also provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Find link paths between two notes,' which is a specific verb+resource. It clearly distinguishes from siblings like 'find_connections' and 'list_notes' by focusing on path finding between two specific notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implicit usage context (finding paths between notes) but does not explicitly state when to use this tool over alternatives or when not to use it. No mention of other tools for path finding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

index_statusA

Report the current state of the vault index: embedder model + dim, count of notes / chunks indexed, chunks skipped during the last reindex (if any), advertised vs discovered max tokens, last reindex reasons, whether a reindex is currently in flight, and the last init error. Read-only โ€” does not mutate anything.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses that it is read-only and non-mutating, listing all reported components. This provides complete transparency about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the purpose and then lists the reported items concisely. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description fully explains the return values by listing all reported fields. It covers all necessary information for a diagnostic tool, including edge cases like skipped chunks and errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so no parameter description is needed. The description adds value by detailing what the tool reports, compensating for the lack of a output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reports the current state of the vault index, listing specific items like embedder model, dimensions, counts, and reindex status. This distinguishes it from siblings like 'reindex' which performs an action, and other read-only tools like 'read_note' which focus on content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states it is read-only and does not mutate anything, guiding when to use it for checking index state without side effects. However, it does not explicitly mention alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notesA

List notes in the vault. Optionally filter by directory prefix or by frontmatter tag. Pass includeStubs: false to exclude unresolved wiki-link targets (nodes with frontmatter._stub: true) and see only real on-disk notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNoRestrict to notes under this subdirectory prefix.
tagNoRestrict to notes containing this frontmatter tag.
limitNoMax results to return. Default 100.
includeStubsNoDefault `true`. Set `false` to exclude unresolved wiki-link targets.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description is adequate: it notes the default for includeStubs and what it does. However, it omits details like pagination behavior, ordering, or error conditions, which would help an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundant words, and the important instructions about includeStubs are front-loaded. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain what is returned (e.g., full note objects vs. names), nor does it mention empty results or ordering. It covers filter options but leaves gaps for a complete invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context for includeStubs and mentions limit default but does not significantly enrich the schema's definitions for directory or tag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'List notes in the vault' with optional filters by directory or tag, clearly defining the verb and resource. It distinguishes from sibling tools like search or read_note as a listing operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on using includeStubs and filter options but does not explicitly contrast with sibling tools (e.g., when to use this vs. search). The context is implied but could be more direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_noteA

Rename or move a note. Inbound wiki-links in other notes are rewritten in place immediately (bare [[old]], [[old|alias]], ![[old]] embeds, and [[old#heading]]/[[old^block]] suffixes all handled). If the note's frontmatter has a title: field matching the old basename, it's auto-rewritten to the new basename (custom titles and missing titles are left alone). Response includes linksRewritten: { files, occurrences }.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesCurrent path or fuzzy match of the note to move.
destinationYesNew vault-relative path (including `.md`). `.md` is appended automatically if omitted.
dryRunNoIf true, report what would be rewritten without mutating any files.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

In the absence of annotations, the description fully discloses key behaviors: immediate in-place rewriting of wiki-links (detailing link variants), frontmatter title auto-rewrite logic under specific conditions, and the dryRun option. Response format is also mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, then explains behavior and response in 3 concise sentences. Every sentence adds value without repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers the tool's behavior, parameter implications, and return structure. Could mention error handling or constraints, but overall complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed parameter descriptions. The tool description adds no extra meaning beyond what the schema provides, so it meets baseline but does not exceed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb+resource: 'Rename or move a note.' It distinguishes itself from siblings like edit_note, delete_note, etc., by explicitly describing its core renaming/moving functionality and the link-rewriting behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for renaming/moving notes but does not explicitly state when to use it vs. alternatives or provide exclusion criteria. The sibling list is provided but not referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_notesA

Rank notes by importance: 'influence' (densely-connected hubs), 'bridging' (notes that connect otherwise-separate topic clusters), or both. Credibility guards (I): by default, influence excludes notes with fewer than minIncomingLinks: 2 incoming edges โ€” this filters out random-orphan noise that makes PageRank feel meaningless on personal vaults. Pass minIncomingLinks: 0 to see the unfiltered ranking. Bridging scores are normalized by graph size (divided by n*(n-1)/2) so values compare across vaults of different sizes โ€” a bridging score of 0.5 means the same thing in any vault. Broken-wikilink stub targets are excluded by default; pass includeStubs: true to include them.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricNoRanking metric. Default `"both"`. `"influence"` = PageRank; `"bridging"` = betweenness centrality.
limitNoMax results to return. Default 20.
themeIdNoRestrict ranking to members of one theme cluster.
includeStubsNoDefault `false`. Set `true` to include unresolved wiki-link target stubs (`frontmatter._stub: true`) in the ranked set. With stubs in, popular link targets dominate eigenvector-style centrality even when they have no real content behind them.
minIncomingLinksNoMinimum incoming links for influence ranking. Default 2. Pass 0 to see unfiltered PageRank.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses filtering defaults (minIncomingLinks: 2), normalization of bridging scores, stub exclusion, and the rationale for defaults. It does not explicitly state read-only behavior or output format, but the behavioral details are rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single paragraph of 6 dense sentences, front-loading the main purpose and then efficiently detailing each parameter's effect. No redundant information; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no output schema, and no annotations, the description is mostly complete but lacks an explanation of the return format, error conditions, or prerequisites (e.g., existence of graph structure). This minor gap prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds substantial meaning: mapping metric enum to algorithms, explaining the purpose of minIncomingLinks and includeStubs beyond defaults, and clarifying limit and themeId. Every parameter's behavior is enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool ranks notes by importance using two specific metrics (influence and bridging), defined in graph theory terms. It distinguishes itself from sibling tools like find_connections or search by focusing on centrality-based ranking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to choose between metrics (influence vs bridging) and parameter effects, but does not explicitly state when to use this tool over sibling tools like find_connections or dataview_query. Usage context is implied but not contrasted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_noteA

Read a note's content. Brief mode (default) returns title + metadata + linked-note titles; full mode returns full content + edge context. Full mode also reports truncated: true when the body exceeded maxContentLength (default 2000 chars) and was sliced. Response is wrapped as {data, context} where context.next_actions suggests follow-ups like creating missing linked notes or exploring outgoing connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPath, filename, or fuzzy match for the note to read.
modeNoDefault `"brief"` (metadata + linked-note titles). `"full"` adds the body + edge context.
maxContentLengthNoIn `full` mode, max body chars before truncation. Default 2000.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully handles behavioral disclosure. It details truncation behavior in full mode (maxContentLength, truncated flag) and the response structure including context.next_actions. No side effects are relevant since it's a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences) and front-loads the main purpose. It could be slightly more structured (e.g., bullet points for modes), but it is efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema and three parameters, the description adequately covers the behavior, output structure, and follow-up suggestions. It is complete enough for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by explaining that 'name' can be a path, filename, or fuzzy match, and clarifies the behavior of 'mode' and 'maxContentLength' beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read a note's content' and distinguishes between brief and full modes, specifying what each returns. However, it does not explicitly differentiate from sibling tools like search or list_notes, which also retrieve note information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use brief vs full mode and mentions follow-up actions from context.next_actions. However, it lacks guidance on when to use this tool over alternatives (e.g., search for finding notes, list_notes for listing).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reindexA

Re-index the vault: re-embeds notes whose mtime changed, prunes orphan stubs, and re-runs community detection only when something actually changed. Pass resolution to force a Louvain rerun and tune cluster granularity (0.5 = fewer/broader clusters, 2.0 = more/finer); without it, a no-op vault skips Louvain entirely.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolutionNoLouvain resolution. Omit to skip community detection on no-op reindexes. Pass a value to force-rerun: 1.0 = equal-weight clusters (default); 0.5 = fewer/broader; 2.0 = more/finer.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses behavioral traits: re-embeds only changed notes, prunes stubs, and conditionally runs community detection only if something changed or if resolution is passed. This is good transparency, though it could mention safety (non-destructive) or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two sentences, the first front-loading the main purpose and actions, the second detailing the optional parameter. Every sentence adds essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple sub-actions) and the absence of an output schema, the description is fairly complete. It explains behavior for both change and no-op scenarios. However, it does not mention what the tool returns (e.g., reindex summary), which would be helpful for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter `resolution` is fully described in the schema (100% coverage). The description adds significant value by explaining that omitting it skips community detection on no-op reindexes, while passing a value forces a rerun and tunes granularity. This goes beyond the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool re-indexes the vault and lists specific actions (re-embeds changed notes, prunes orphan stubs, re-runs community detection). The verb 're-index' and noun 'vault' are specific, and the description distinguishes it from sibling tools like 'index_status'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (re-indexing) and the effect of the `resolution` parameter, but does not explicitly state when not to use it or mention alternatives (e.g., for status checks use 'index_status'). The guidance is present but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: note CRUD, linking, search, graph analysis, indexing, and specialized queries. Even overlapping areas like search and dataview_query are delineated by their descriptions. No two tools appear to do the same thing.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (e.g., create_note, find_path_between). No mixed conventions or inconsistencies.

Tool Count5/5

18 tools is slightly above the typical 3-15 range, but each tool addresses a distinct aspect of vault interaction, such as note management, linking, searching, graph analysis, and indexing. The count is well-justified for the domain's complexity.

Completeness4/5

The tool surface covers core note operations (CRUD, search, linking, graph analysis, indexing) and includes specialized query systems (Bases, Dataview). Minor gaps exist (e.g., bulk operations, attachment management), but the set is comprehensive for typical agent workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sweir1/obsidian-brain'

If you have feedback or need assistance with the MCP directory API, please join our Discord server