Obsidian Everywhere
Obsidian Everywhere bridges your local Obsidian vault to AI agents via 39 MCP tools for reading, searching, graph navigation, and guarded editing — vault stays on your machine.
Vault Overview & Status
Get high-level summaries: note counts, top tags, PageRank hub notes, recently modified files, mount health, and index freshness (vault_overview, vault_status).
Search
Full-text search with tag/folder filters (
search_notes)Semantic/meaning-based search using a local multilingual embedding model — no API key needed (
semantic_search)Regex search across note bodies with file, line, and excerpt results (
regex_search)
Graph Navigation
Pack a topic + its neighbors into a token budget for AI context (
get_context_bundle)Explore n-hop subgraphs around any note (
get_neighborhood)Find shortest paths between two notes (
find_path)Discover related but unlinked notes via Jaccard or semantic similarity (
get_related)Find orphaned notes and unresolved links (
find_orphans,find_unresolved)
Note Reading & Structure
Read notes with full graph context, optional heading scope, and pagination (
read_note)Get backlinks with linking sentence context (
get_backlinks)List notes/folders with frontmatter projection (
list_notes,list_folder)Browse tags and get notes by tag, including nested child tags (
list_tags,get_notes_by_tag)
Safe Writes
Create, append, move, rename, and delete notes with automatic inbound-link rewriting and recoverable trash
Replace exact text or patch a heading section without touching the rest of the note
Update/remove frontmatter fields and add/remove/rename tags
Apply templates with date/time/title substitution (
apply_template)
Bulk Operations with Dry-Run & Rollback
Bulk update or remove frontmatter fields across a folder or entire vault
Bulk find-and-replace text with regex support
Roll back any bulk edit from a saved snapshot (
rollback_bulk_edit)
Obsidian Settings
Read/set hotkey bindings, read core plugin settings, configure the Templates folder, and validate .base files (get_hotkeys, set_hotkey, get_obsidian_settings, set_templates_folder, validate_base).
Flexible & Secure Deployment
Local: stdio, no network exposure
Private network: Bearer-authenticated HTTP via Tailscale or ngrok
Public web apps (e.g., claude.ai): OAuth HTTP via Cloudflare tunnel
No cloud accounts, telemetry, or hosted copies required.
Provides graph-native tools for reading, searching, and writing notes in an Obsidian vault, including backlink traversal, neighborhood exploration, and full-text search.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Obsidian Everywheresearch notes about machine learning"
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.
🧠 Obsidian Everywhere
Turn linked notes into AI context, use that context from agents anywhere, and checkpoint approved changes with Git.
Graph context · local semantic search · remote agents · guarded edits · opt-in Git checkpoints
Watch the Remote Vault Bridge in 44 seconds

Remote request → semantic search → graph context → guarded edit → mount-loss recovery.
Obsidian Everywhere is built around three ideas:
Notes are a graph and a semantic knowledge base, not a folder of text files. Backlinks, n-hop neighborhoods, shortest paths, PageRank, full-text search, and local multilingual embeddings turn a topic into focused, token-budgeted context.
Your vault should be usable where your agents run. The Remote Vault Bridge exposes that same graph and its guarded write tools over authenticated Streamable HTTP. A Claude Code or Codex process on another server can search, reason over, append to, and reorganize a vault that remains on your own machine.
Version-control actions deserve a narrower boundary than file writes. If the vault or one configured folder inside it is already a Git repository, the opt-in Git tools can inspect status, bounded diffs, and local history. Commit and push each require a preview, explicit confirmation, and a short-lived one-use approval ID.
The local path stays the source of truth. Obsidian Everywhere does not create a hosted copy, telemetry service, or mandatory cloud account; optional Git push publishes only to a repository the operator already configured. Remote access is a transport you operate, not a vault-sync product.
Related MCP server: ObsidianMCP
Contents
Features
vault (.md files)
│ parse · watch
▼
SQLite index (FTS5) ⇄ in-memory graph (graphology)
│ n-hop · shortest path · PageRank
▼
41 core MCP tools + 0–5 opt-in Git tools
│
▼
local stdio · authenticated remote HTTP · OAuth HTTP🧩 Graph + semantic context engine — a markdown parser (wikilinks, embeds, frontmatter, nested tags, headings, block references), a SQLite index with full-text search, and an in-memory graphology layer for n-hop traversal, shortest paths, and PageRank.
get_context_bundlepacks a topic and its most useful neighbors into a requested token budget.🌍 Remote Vault Bridge — agents on an external server get the same search, graph, context, and guarded editing tools over authenticated Streamable HTTP. Use a private network or an HTTPS tunnel such as ngrok; the vault itself stays on the machine you control.
📎 Vault-wide file reading — Markdown plus text/code/data files, PDF, DOCX, PPTX, XLSX, OpenDocument, EPUB, RTF, and common images are indexed and exposed without uploading them to a conversion service. Extraction is lazy, cached, size-limited, and searchable with
search_files.🧠 Optional local semantic search —
semantic_searchandget_relatedwithmethod: "semantic"run a multilingual embedding model (multilingual-e5-small) entirely on your machine — no API key, cloud account, or Ollama process to run. Install the optional runtime withnpm install @huggingface/transformers@^4.2.0; its model downloads once (~120MB, cached under~/.obsidian-everywhere/), then works fully offline. It is disabled by default to keep the server below the 200 MiB memory target; opt in withOBSIDIAN_EVERYWHERE_ENABLE_SEMANTIC=truewhen extra memory is available.🛡️ Safe writes and resilient mounts — partial edits, dry-run-first bulk operations, rollback snapshots, recoverable deletion, and an opt-in Beta mount guard. If a removable drive, NAS share, or container mount disappears, the index is preserved, writes are blocked, and a full reconciliation runs after it returns.
🌱 Reviewable Git checkpoints (off by default) — inspect status, bounded diffs, and local history for the vault or one configured repository folder. Higher modes add selected-file commits and operator-pinned HTTPS pushes, both behind preview and a five-minute one-use approval.
🛠️ 41 core MCP tools, up to 46 when Git is explicitly enabled — structured reads, attachment extraction, graph navigation, semantic retrieval, safe lifecycle operations, persisted Obsidian settings, and explicit health reporting.
Three core workflows
1. Turn a linked vault into focused AI context
Exact search finds the words you wrote. Semantic search finds the idea even
when the wording or language differs. Graph traversal then explains how the
matching notes relate. get_context_bundle combines those signals into a
bounded context package instead of dumping an entire vault into the model.
2. Use and edit that context from an external server
Run Obsidian Everywhere beside the local vault, expose its HTTP endpoint through your private network or an HTTPS tunnel, and register the URL in the remote MCP client. The remote agent can read and search the local vault, then use the same guarded tools to create, append, move, tag, or clean up notes. The server reindexes each successful write before returning, so the next remote tool call sees the change.
For the complete ngrok path, see the Remote Vault Bridge with ngrok tutorial.
3. Review and checkpoint vault changes with Git
When the vault or one real folder inside it contains its own .git directory,
an agent can inspect the same repository state you would inspect locally, then
create a commit from an explicit file list. Set
OBSIDIAN_EVERYWHERE_GIT_REPO_PATH to that vault-relative folder, or leave its
default . to use the vault root. Push is a separate, stricter capability: it
can only publish the current HEAD to its existing upstream branch through an
operator-pinned HTTPS destination. It never pulls, fetches, changes branches,
constructs a free-form refspec, or accepts arbitrary Git arguments.
Start with OBSIDIAN_EVERYWHERE_GIT_MODE=read; move to commit or push only
after reviewing the safety model in the Vault Git guide.
Read
Tool | What it does |
| Note counts, top tags, PageRank hub notes, recently modified — a starting orientation |
| Mount availability, index freshness, write availability, and last full reconciliation |
| Full-text search with tag/folder filters (with a trigram fallback for CJK substring matches unicode61 alone would miss — see DECISIONS.md D9), each result annotated with link counts and tags |
| Search filenames, vault-relative paths, and locally extracted text across PDF, Office/OpenDocument, EPUB, RTF, text/code/data, and other attachments |
| Optional meaning-based search via local embeddings ( |
| Structured content/frontmatter/links/tags plus line pagination; optional heading-scoped read |
| Read any vault file: extracted document text with page/slide/sheet selection, or native image content for capable MCP clients; an exact on-disk path self-heals short watcher lag |
| Explicit folder-aware note listing with pagination; optionally projects named frontmatter fields (e.g. |
| Immediate child folders, notes, and attachments |
| JavaScript-regex search with file, line, and excerpt |
| Every note linking to a given note, with the linking sentence |
| Explicit n-hop node/edge list around a note (links treated as undirected) |
| The killer feature. Center note + prioritized 1-hop neighbors packed into a token budget |
| Full nested tag hierarchy with counts |
| Notes carrying a given tag (nested-aware) |
| Notes with no incoming or outgoing links |
| Links that don't resolve to any note, grouped by target |
| Shortest connection path between two notes, with a one-line summary per hop |
| Similar notes that aren't directly linked yet — Jaccard over shared tags/neighbors by default, or |
| Persisted hotkey command IDs, Templates folder, and core-plugin settings |
| Static YAML/shape validation for |
Write
Tool | What it does |
| Create a new note (with frontmatter); reindexed immediately — the next tool call already sees it |
| Create a note from a template, substituting |
| Append to a note, optionally under a specific heading; fails closed if the heading isn't found |
| Lifecycle operations with inbound-link rewriting, backlink guardrails, and recoverable trash |
| Guarded exact-text and heading-scoped edits |
| Change properties without replacing the note body |
| Same, across every note in a folder (or the whole vault); dry-run first with rollback |
| Add or remove frontmatter tags on one note |
| Rename a tag vault-wide across frontmatter and inline |
| Dry-run-first folder/regex replacement with snapshots and rollback |
| Update persisted Obsidian settings (vault reload may be required) |
Vault Git — registered only when explicitly enabled
Tool | Minimum Git mode | What it does |
|
| Safe, selected-repository-relative working-tree status and local ahead/behind information; no fetch |
|
| Bounded patch for safe tracked paths, plus explicitly named untracked paths in |
|
| Recent local commit history, optionally for one safe file |
|
| Preview, then commit only explicitly selected safe files using a five-minute one-use approval ID |
|
| Preview, then push the approved current |
Effective setup | Registered tools |
Git | 22 |
Git | 41 |
Git | 25 |
Git | 44 |
Git | 25 |
Git | 45 |
Git | 25 |
Git | 46 |
If the ordinary write gate is disabled, git_commit and git_push stay absent
even when the configured Git mode is higher; the three Git read tools remain
available. OAuth therefore requires both a sufficient Git mode and
OAUTH_ENABLE_WRITE_TOOLS=true for commit or push.
Ordinary write tools are on by default for stdio and the
bearer-token HTTP transport, and off by default for the public OAuth
connector transport (opt in with OAUTH_ENABLE_WRITE_TOOLS=true) — see
Configuration and DECISIONS.md D15. Git is independently off
by default on every transport.
Vault Git
Vault Git is an optional checkpoint-and-publish layer for repositories already
inside a vault. It is not a sync engine and it never initializes a repository.
Git must be installed on the vault machine. The operator selects exactly one
repository with OBSIDIAN_EVERYWHERE_GIT_REPO_PATH, a safe vault-relative real
directory that defaults to .. That selected directory must be the exact root
of a normal repository with a real, local .git directory. The rest of the
vault remains indexed and available to ordinary graph, search, and note tools.
For example, a vault at /Volumes/SanDisk/jwhong can keep full-vault context
while Git tools operate only on /Volumes/SanDisk/jwhong/DSLab:
export OBSIDIAN_VAULT_PATH=/Volumes/SanDisk/jwhong
export OBSIDIAN_EVERYWHERE_GIT_REPO_PATH=DSLab
export OBSIDIAN_EVERYWHERE_GIT_MODE=readGit tool path inputs and outputs are relative to DSLab in that setup;
ordinary note and file tool paths remain relative to the vault root. Parent
repository discovery, linked worktrees, submodule roots, symlinked repository
paths, and unsafe external or symlinked object/ref/log/core metadata
layouts—including alternate object stores—are refused by every Git tool.
The canonical vault, selected repository, and .git directory identities are
captured at startup and rechecked before every Git subprocess; replacing a
directory or introducing a symlink fails closed until the operator verifies the
mount and restarts the service.
Commit and push additionally refuse detached branches, shallow history, sparse
checkouts, per-worktree Git configuration, grafts/replacement refs, and
in-progress history operations.
With the supplied Compose file, set
OBSIDIAN_VAULT_HOST_PATH=/Volumes/SanDisk/jwhong and
OBSIDIAN_EVERYWHERE_HTTP_GIT_REPO_PATH=DSLab for the bearer service. The OAuth
service has its own independent OBSIDIAN_EVERYWHERE_OAUTH_GIT_REPO_PATH input;
both service-specific repository paths default to ..
Choose the narrowest capability that covers your workflow:
| Tools added | Network access |
| none | none |
|
| none; history and ahead/behind are local only |
| read tools + | none |
| read/commit tools + | approved push to an existing upstream only |
Push mode also requires a comma-separated operator mapping from each allowed
upstream remote name to one exact credential-free HTTPS destination. Continuing
the DSLab example above:
export OBSIDIAN_EVERYWHERE_GIT_MODE=push
export OBSIDIAN_EVERYWHERE_GIT_REPO_PATH=DSLab
export OBSIDIAN_EVERYWHERE_GIT_ALLOWED_PUSH_REMOTES=origin=https://github.com/owner/repo.gitUse OBSIDIAN_EVERYWHERE_GIT_REPO_PATH=. instead only when the whole vault is
the repository.
The selected branch must already track a normal branch on the mapped remote, and that remote's sole resolved push URL must exactly match the pinned mapping. The URL is operator configuration, never MCP tool input; credentials, queries, fragments, caller-selected branches, and caller-selected refspecs are refused. Git must authenticate to that exact URL non-interactively using credentials already configured on the vault machine.
The destination ref comes from the branch's existing upstream mapping, not from
the local branch name. For example, local main tracking origin/release can
push only to release; the caller cannot substitute another branch.
Commit and push are deliberately two-step operations:
git_status
git_diff
git_commit { action: "preview", message: "docs: update project notes", paths: ["Projects/Atlas.md"] }
→ inspect the plan and explicitly approve it
git_commit { action: "execute", approvalId: "<UUID from preview>" }
git_push { action: "preview" }
→ inspect the exact HEAD, upstream, and outgoing count; explicitly approve it
git_push { action: "execute", approvalId: "<UUID from preview>" }An approval ID expires after five minutes, works once, and is invalidated when the reviewed repository state changes. A preview never creates a commit or contacts the network. Hidden, excluded, and sensitive paths are omitted or blocked; commits select exact changed paths whose resulting entries are regular files, plus deletions; hooks, signing, clean filters (including Git LFS), submodules, and suspected secrets are refused. Push review is capped at 100 outgoing commits and 200 changed blobs, with an 8 MiB per-file/blob and 32 MiB aggregate content limit; commit messages and merge results are scanned too. Commit messages are single-line and secret-scanned, and commit approval binds the exact proposed tree.
Push execution uses the displayed literal HTTPS destination and an exact
OID lease for the reviewed upstream ref. That lease is a compare-and-swap
guard—not permission for an arbitrary force-push—so a deleted, advanced, or
reset remote ref fails instead of being overwritten.
Repository-local credential helpers, URL rewrites, http.* transport settings,
and selected-remote proxy overrides are also refused for push. Trusted HTTPS
credentials and any required network policy belong in the vault machine's user
or system Git configuration, outside the repository.
There is intentionally no git_exec or free-form command tool. Passing raw Git
arguments to a remote agent is effectively a remote-code-execution primitive:
Git aliases can expand to shell commands, hooks execute programs, diff/textconv
drivers run helpers, SSH transports launch commands, and credential helpers may
invoke executables. A small set of fixed commands with fixed arguments is the
safety boundary, not a cosmetic API choice.
Read the complete setup, operational limits, and troubleshooting guide before enabling commit or push: Using a Git-backed vault.
Try it without your vault
Run the built-in demo first. It creates a temporary sample vault, shows graph orientation and unresolved-link discovery, previews a safe bulk edit, and then removes the sample. It never reads or changes your own notes.
npx -y obsidian-everywhere demo
When you are ready to connect a real vault, generate copyable configuration for Codex, ChatGPT Desktop, Claude Code, and Claude Desktop:
npx -y obsidian-everywhere init /absolute/path/to/your/vault
npx -y obsidian-everywhere doctor /absolute/path/to/your/vaultinit only prints configuration—it never edits global client settings.
doctor checks Node.js, permissions, Obsidian metadata, SQLite, parsing, and the
graph engine without printing note content. Add --share to redact the vault
path before pasting diagnostics into an issue.
Why Obsidian Everywhere?
There are several good Obsidian MCPs. Pick the architecture that matches how you work rather than assuming one server wins every category.
Obsidian Everywhere | ||||
Install |
|
| Obsidian community plugin |
|
Published tools | 41 core; up to 46 with opt-in Git | 14 | 16 | 74 |
Obsidian must be open | No | Yes | Yes | No |
Best graph capability | PageRank, shortest path, n-hop, unresolved links | Outgoing links in structured reads | Live Obsidian metadata/search | Multi-hop, centrality, clusters, suggestions |
Safe editing | Partial edits; bulk dry-run, snapshot, rollback | Surgical edits and frontmatter/tag management | Live heading/block/frontmatter patching | Conflict hashes, audit rollback, Git-backed batch |
Live app commands/current file | Persisted settings only | Yes | Yes | No |
Remote transport | stdio, bearer HTTP over private network or HTTPS tunnel, OAuth 2.1 | stdio, HTTP with JWT/OAuth | HTTP with API key | stdio, HTTP, WebSocket, TCP |
Best fit | Graph + semantic context from a headless vault, including guarded remote access and edits | Rich app-driven CRUD and Omnisearch | Direct control of a running Obsidian app | Maximum breadth, multi-vault and advanced analysis |
Comparison checked against each project's published documentation on 2026-07-20. A blank or narrower cell means “not documented there,” not that a project can never support it. If you need active-file state or command-palette execution, choose a plugin-backed server. If you want a headless, one-command graph server with token-budgeted context, guarded cleanup, and narrowly scoped Git checkpoints, that is the niche Obsidian Everywhere is designed for.
Everything runs locally by default. There is no account, API key, hosted vault, or telemetry requirement.
See docs/architecture.md for how it's built,
docs/deploy.md for the deployment topology, and
docs/ngrok-remote.md for an end-to-end external
server tutorial. Git-backed vault operators should also read
docs/git-vault.md.
Where does this actually run?
The obsidian-everywhere process needs direct filesystem access to your
vault's .md files (to parse them, watch for changes, etc.) — so it
must always run on the machine where your vault physically lives
("the vault machine": your laptop, most likely). It does not matter which
client machine you're working from — the server always runs on the vault
machine; only the client connection method changes.
Where you use the MCP client | What you need |
The same machine as the vault | stdio. Nothing else — Codex, ChatGPT Desktop, Claude Code/Desktop, or another local client spawns the server directly. |
A different machine you control (a lab/work server, another laptop, an SSH box) | Bearer-token HTTP over a private network such as Tailscale, or an HTTPS tunnel such as ngrok. |
claude.ai (web app or mobile app) | OAuth HTTP + a public HTTPS URL (via Cloudflare Tunnel). claude.ai runs in Anthropic's cloud, not your network, so it can't reach Tailscale or |
You can run more than one of these at once (e.g. stdio on your laptop and bearer-token HTTP for your work server) — they're independent processes that all index the same vault.
Quickstart
The fastest install needs no clone or build step. Run this on the vault
machine (wherever your .md files live):
npx -y obsidian-everywhere /absolute/path/to/your/vaultMCP clients normally launch this command for you using one of the configurations below.
Not sure whether the path and runtime are ready? Run the privacy-safe diagnostic:
npx -y obsidian-everywhere doctor /absolute/path/to/your/vaultOption A — Codex CLI and ChatGPT Desktop, same machine as the vault (stdio)
Codex CLI, the Codex IDE extension, and ChatGPT Desktop's Codex experience share the same MCP configuration (official MCP documentation). Add the server once:
codex mcp add obsidian-everywhere -- npx -y obsidian-everywhere /absolute/path/to/your/vault
codex mcp listThen restart ChatGPT Desktop (or the IDE extension). In ChatGPT Desktop you
can also add it through Settings → MCP servers → Add server, choose
STDIO, and enter the same command and arguments. Type /mcp in Codex to
confirm that the expected tools are connected: 41 with ordinary writes enabled
and Git off, or the conditional counts documented in Vault Git.
For a project-scoped configuration instead, add this to a trusted project's
.codex/config.toml; use ~/.codex/config.toml to make it available globally:
[mcp_servers.obsidian-everywhere]
command = "npx"
args = ["-y", "obsidian-everywhere", "/absolute/path/to/your/vault"]
startup_timeout_sec = 30Use an absolute vault path. GUI apps may not inherit the same PATH as your
terminal; if npx is not found, replace command with the absolute result
of command -v npx.
Option A′ — Claude Code, same machine as the vault (stdio)
Still on the vault machine:
claude mcp add obsidian-everywhere -- npx -y obsidian-everywhere /path/to/your/vaultOr with environment variables instead of a positional arg:
OBSIDIAN_VAULT_PATH=/path/to/your/vault claude mcp add obsidian-everywhere -- npx -y obsidian-everywhereOption A″ — Claude Desktop, same machine as the vault
Add to claude_desktop_config.json on the vault machine:
{
"mcpServers": {
"obsidian-everywhere": {
"command": "npx",
"args": ["-y", "obsidian-everywhere", "/absolute/path/to/your/vault"]
}
}
}Option A‴ — Google Antigravity CLI (agy)
Add to your global Antigravity MCP configuration file (~/.gemini/config/mcp_config.json):
{
"mcpServers": {
"obsidian-everywhere": {
"command": "npx",
"args": ["-y", "obsidian-everywhere", "/absolute/path/to/your/vault"]
}
}
}Option B — Codex, ChatGPT Desktop, or Claude on a different machine
Choose one secure route to the vault machine:
Private network: use Tailscale and follow the steps below.
Public HTTPS tunnel: use the read-only-first ngrok Remote Vault Bridge tutorial. Never expose the local plaintext HTTP port directly.
Step 1 — set up a private network between the two machines, if you chose Tailscale:
# on BOTH the vault machine and the MCP client machine
curl -fsSL https://tailscale.com/install.sh | sh # or: brew install tailscale (macOS)
tailscale up # opens a browser to log in / join your "tailnet"
tailscale status # confirm both machines can see each otherNote the vault machine's Tailscale hostname/IP from tailscale status
(something like my-macbook.tailnet-name.ts.net or 100.x.y.z).
Step 2 — start the server, on the vault machine:
openssl rand -hex 32
# Save that output in a password manager, then use the same value on both machines.
export OBSIDIAN_EVERYWHERE_TOKEN="<saved token>"
OBSIDIAN_VAULT_PATH=/path/to/vault \
npx -y --package obsidian-everywhere obsidian-everywhere-httpKeep the saved token — you'll need it in step 3. (To keep this running
persistently instead of in a foreground terminal, see the LaunchAgent
setup in docs/deploy.md,
or run it in Docker via docker-compose.yml if the vault machine is a server.)
Step 3 — connect from the other machine (the lab server, etc.), using the vault machine's Tailscale address from step 1. For Codex (and the shared ChatGPT Desktop configuration), keep the token in an environment variable:
export OBSIDIAN_EVERYWHERE_CLIENT_TOKEN="<the token from step 2>"
codex mcp add obsidian-everywhere \
--url http://<vault-machine-tailscale-name>:3737/mcp \
--bearer-token-env-var OBSIDIAN_EVERYWHERE_CLIENT_TOKENEnsure ChatGPT Desktop is launched with that environment variable available, then restart it. Alternatively, use Settings → MCP servers to add the Streamable HTTP URL and bearer credential if your app version exposes those fields.
For Claude Code:
claude mcp add --transport http obsidian-everywhere \
http://<vault-machine-tailscale-name>:3737/mcp \
--header "Authorization: Bearer <the token from step 2>"The second machine now has access to the vault indexed on the first. Full
walkthrough (Docker, LaunchAgent):
docs/deploy.md.
Option C — claude.ai web/mobile app (custom connector, OAuth)
This needs a public HTTPS endpoint — claude.ai's servers can't reach your
Tailscale network or localhost. See
docs/deploy.md
for the full Cloudflare Tunnel walkthrough. Once your server is reachable at
https://your-domain:
claude.ai → Settings → Connectors → Add custom connector
Server URL:
https://your-domain/mcpclaude.ai auto-discovers the OAuth flow and shows this server's sign-in page — enter the
OAUTH_LOGIN_SECRETyou configured.
You only need this if you actually want claude.ai's web/mobile apps to read your vault. If you only ever use Claude Code (locally or from another machine), skip this entirely — Option A/B already fully covers that with no Cloudflare/OAuth involved.
Configuration
Env var | Used by | Meaning |
| all | Vault path (or pass as a positional CLI arg) |
| all | SQLite index path override. Filenames are transport-specific: |
|
| Static bearer token |
|
| HTTP port (defaults 3737 / 3738) |
|
| Public HTTPS origin (e.g. your Cloudflare Tunnel hostname) |
|
| Single-user login secret |
|
| Set to |
| all | Opt in after installing the optional |
| all | Maximum source attachment size for local extraction (default |
| all | PDF-specific extraction limit (default |
| all | Maximum uncompressed XML/HTML entry read from Office/OpenDocument/EPUB archives (default |
| all entrypoints | Opt-in Beta mount-loss protection and automatic reconciliation |
| all entrypoints | Optional vault-relative identity path, e.g. |
| all entrypoints | Runtime mount probe interval (default |
|
| Set to |
| direct processes and container environment | Git capability: |
| direct processes and container environment | One safe vault-relative real directory containing the repository; defaults to |
| direct processes and container environment | Comma-separated exact |
| supplied Docker Compose | Bearer-service inputs mapped to the three generic Git variables inside its container; mode defaults to |
| supplied Docker Compose | Independent OAuth-service inputs mapped inside its container; mode defaults to |
Obsidian Everywhere does not modify a user's vault .gitignore. Built-in
Vault Git rejects hidden .obsidian-everywhere paths, but if an index directory
falls inside a repository you also manage with ordinary Git, add
.obsidian-everywhere/ to that repository's own .gitignore.
Git configuration is independent of semantic search and ordinary note tools.
For stdio and bearer HTTP, OBSIDIAN_EVERYWHERE_READONLY=true removes both
ordinary write tools and Git commit/push. For OAuth, commit/push require both
OBSIDIAN_EVERYWHERE_GIT_MODE=commit|push and
OAUTH_ENABLE_WRITE_TOOLS=true. git_status, git_diff, and git_log remain
read-only tools at every mode above off.
Direct CLI, HTTP, OAuth, and LaunchAgent processes read the generic Git names.
The supplied docker-compose.yml deliberately uses the service-specific
HTTP/OAuth .env inputs above so enabling Git for one exposed service cannot
silently enable it for the other.
Development
npm run dev:stdio # tsx, no build step
npm run dev:http
npm run dev:oauth-http
npm test # vitest, runs against fixtures/test-vault
npm run typecheck
npm run lint
npm run format:check
npm run memory:smoke # asserts the default attachment workload stays below 200 MiB RSSfixtures/test-vault/ is a 30+ note fixture vault exercising every link
and parsing edge case the parser needs to handle (piped aliases, heading
and block links, embeds, frontmatter-embedded wikilinks, nested tags,
duplicate filenames across folders, unresolved links, code-block
exclusion, and Korean filenames/tags/wikilinks). It's what every test in
src/**/*.test.ts runs against.
Project status
The current release line includes the graph and optional local semantic context
engine, all three transports (stdio, bearer HTTP, OAuth HTTP), 41 core MCP
tools, guarded partial and bulk writes, and client setup for Codex, ChatGPT
Desktop, and Claude. Remote Vault Bridge is a first-class deployment path. Its
opt-in mount guard remains Beta while it receives cross-platform feedback
for removable drives, NAS shares, and container mounts. The separately opt-in
Vault Git tools expose read, commit, and push as progressively wider,
review-gated capabilities instead of a general-purpose Git shell.
Help test a real remote-vault setup in Beta Issue #18, or ask questions in Discussion #19. A disposable vault is welcome; never share note contents, tokens, or private hostnames.
Contributing
Bug reports, feature requests, and PRs are welcome — see
CONTRIBUTING.md for dev setup, testing conventions,
and how the fixture vault relates to the test suite. Security issues:
please see SECURITY.md rather than opening a public issue.
License
MIT — see LICENSE.
Available Tools
41 toolsadd_tagsAdd TagsA
Add one or more tags to a note's frontmatter tags array, deduplicated against existing tags.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| tags | Yes | Tags to add, with or without a leading #. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the deduplication behavior beyond the annotations (which only indicate mutation and non-destructiveness), but does not disclose what happens if the note doesn't exist or whether the file is immediately modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and resource, with no extraneous information.
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 tool with two well-described parameters and no output schema, the description covers the essential behavior (adding tags, deduplication) and integrates with the schema's parameter descriptions. It is complete enough for an AI agent to use 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?
While the description mentions deduplication, it does not add significant meaning to the parameters beyond what the input schema already provides (e.g., path can be path/title/alias, tags can have or lack leading #). Schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add one or more tags') and the target resource ('a note's frontmatter tags array'), explicitly distinguishing it from sibling tools like 'remove_tags' and 'rename_tag'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for using the tool (adding tags to frontmatter), but does not explicitly exclude cases where 'update_frontmatter' might be more appropriate for arbitrary frontmatter changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_to_noteAppend To NoteA
Append content to an existing note — either at the end of the file, or at the end of a specific heading's section. Fails without writing anything if the heading isn't found. Reindexed immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Note path, title, or alias — must already exist. | |
| content | Yes | Markdown content to append. | |
| heading | No | Append at the end of this heading's section instead of the end of the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description reveals key behaviors: the operation fails without writing if the heading is not found, and reindexing occurs immediately. This adds valuable context for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main purpose, no unnecessary words. Every sentence adds value.
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?
Given no output schema, the description covers the core behavior, two modes, failure condition, and reindexing. It could briefly mention the return value, but overall it's sufficient for agent decision-making.
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% with parameter descriptions. The description adds that path must already exist and clarifies the heading parameter's role and failure behavior, providing modest additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'append' and the resource 'existing note', and specifies two modes (end of file or end of a heading's section). This distinguishes it from sibling tools like patch_section and replace_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for appending content but does not explicitly state when not to use it or mention alternative tools. It only provides a failure condition, which is helpful but incomplete for guiding selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_templateApply TemplateADestructive
Create a new note from an existing template note (path, title, or alias), substituting Obsidian's core Templates plugin variables: {{date}}, {{date:FORMAT}}, {{time}}, {{time:FORMAT}}, {{title}}. FORMAT supports YYYY/YY/MM/DD/HH/mm/ss tokens. Templater-only syntax (<% %>) is not evaluated and is left as literal text. Fails if the target note already exists unless overwrite is set.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Vault-relative path for the new note, e.g. 'Daily/2026-01-01' (`.md` is added automatically). | |
| template | Yes | Template note's path, title, or alias. | |
| overwrite | No | Replace the note if it already exists (default false). | |
| frontmatter | No | Extra frontmatter fields to merge in on top of the rendered template's own frontmatter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the variable substitution behavior, FORMAT tokens, and that Templater syntax is left literal. This goes beyond the annotations (destructiveHint=true) to clarify the tool's exact behavior, including edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, followed by necessary details. Every sentence adds value with no redundancy or verbosity.
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?
Given no output schema, the description explains the creation and substitution behavior well, but could optionally mention the return value or error handling beyond the 'fails' condition. However, it is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds significant meaning by explaining the variable substitution details, FORMAT token syntax, and the overwrite behavior. This helps the agent understand parameter usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a new note from a template note, with specific variable substitution. This distinguishes it from 'create_note', which creates a blank note, making the purpose unambiguous and differentiated.
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 explains the failure condition when the target exists and the need for overwrite, but does not explicitly state when to use this tool over alternatives like 'create_note' or other sibling tools. Usage context is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_remove_frontmatter_fieldBulk Remove Frontmatter FieldADestructive
Remove exactly one frontmatter field from every note under a folder (or the whole vault) that carries it. Defaults to dry-run, enforces maxFiles, and creates a rollback snapshot (restorable via rollback_bulk_edit) when applied.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | Top-level frontmatter field name to remove. | |
| dryRun | No | Preview only (default true). Set false to apply. | |
| folder | No | Optional vault-relative folder scope. Omit for the whole vault. | |
| maxFiles | No | Abort above this changed-file count (default 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds critical behavioral context beyond annotations: defaults to dry-run, enforces maxFiles, creates rollback snapshot. This is essential for a destructive tool (annotations: destructiveHint=true). No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, then safety features. No unnecessary words. Every sentence adds value.
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, but description covers scope, field restriction, dry-run, maxFiles, and rollback. It lacks details on return value or error handling, but for a bulk tool this is sufficient. Could mention what the output looks like.
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% (all parameters documented), so baseline is 3. The description adds value by stating the single-field limitation explicit in the operation, and reinforces defaults (dryRun true) and constraints (maxFiles cap). While schema covers individual param details, the description provides holistic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes exactly one frontmatter field from every note under a folder or whole vault. It distinguishes from sibling tools like remove_frontmatter_field (single note) and bulk_update_frontmatter (different operation) by specifying the scope and single-field constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: for bulk removal of a frontmatter field with safety features (dry-run, maxFiles, rollback). It mentions rollback_bulk_edit for restoration, providing context for safe usage. However, it could be more explicit about when not to use or compare to other bulk tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_replaceBulk ReplaceADestructive
Replace text across notes selected by folder, optionally using regex. Defaults to dry-run, reports every changed file, enforces maxFiles, and creates a rollback snapshot before applying.
| Name | Required | Description | Default |
|---|---|---|---|
| find | Yes | Literal text or JavaScript regex pattern. | |
| regex | No | Treat find as a regular expression (default false). | |
| dryRun | No | Preview only (default true). Set false to apply. | |
| folder | No | Optional vault-relative folder scope. | |
| replace | Yes | Replacement text; regex capture references such as $1 are supported. | |
| maxFiles | No | Abort above this changed-file count (default 100). | |
| caseSensitive | No | Regex case sensitivity (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (destructiveHint=true) by detailing that it defaults to dry-run, reports changed files, enforces maxFiles, and creates a rollback snapshot. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and no wasted words. Every sentence provides valuable behavior details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral aspects of the tool (dry-run, rollback, maxFiles) and output reporting. Without an output schema, it could mention the return format, but the description is sufficient for understanding the tool's purpose and side effects.
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 each parameter is documented. The description does not add additional meaning beyond the schema, but it sets the overall context for parameter usage. Baseline of 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?
The description clearly states the tool replaces text across notes selected by folder, with optional regex, and lists key default behaviors. This distinguishes it from sibling tools like replace_text, which likely operates on a single 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?
The description explains the default dry-run behavior and safeguards (maxFiles, rollback), which helps the agent decide when to use it. However, it does not explicitly compare to alternatives like replace_text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_update_frontmatterBulk Update FrontmatterADestructive
Merge the same frontmatter fields into every note under a folder (or the whole vault). Only notes where a value actually changes are touched. Defaults to dry-run, enforces maxFiles, and creates a rollback snapshot (restorable via rollback_bulk_edit) when applied.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Preview only (default true). Set false to apply. | |
| fields | Yes | Fields to add or replace on every matching note. | |
| folder | No | Optional vault-relative folder scope. Omit for the whole vault. | |
| maxFiles | No | Abort above this changed-file count (default 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as destructive (destructiveHint=true), but the description adds valuable behavioral details: only notes with actual value changes are touched, it defaults to dry-run, enforces maxFiles, and creates a rollback snapshot. This goes beyond annotations by explaining safety mechanisms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence clearly states the primary purpose, and the second sentence covers behavioral traits and safety features. Every word adds value 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?
The tool has 4 parameters and no output schema. While the description adequately covers the input side and safety behaviors, it does not mention what the tool returns (e.g., success status, changed files count) or how errors are communicated. For a mutation tool, this information is important for the agent to handle responses 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?
Schema coverage is 100%, so the schema already describes each parameter. However, the description adds higher-level context: 'merge' implies addition/replacement behavior, 'defaults to dry-run' clarifies dryRun's default, and 'enforces maxFiles' gives purpose to the maxFiles parameter. This adds meaning beyond the schema's literal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool merges frontmatter fields into notes under a folder or the whole vault, using the specific verb 'merge' and specifying the resource ('frontmatter fields'). This distinguishes it from siblings like update_frontmatter (single note) and bulk_remove_frontmatter_field (removal).
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 mentions defaults like dry-run and maxFiles enforcement, giving some context on how to use it safely, but it does not explicitly state when to use this tool versus alternatives (e.g., update_frontmatter for individual notes) or when not to use it. Usage is 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.
create_noteCreate NoteADestructive
Create a new note in the vault. Fails if the note already exists unless overwrite is set. The note is indexed immediately — outlinks/tags in its content become real graph edges right away, visible to the very next tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Vault-relative path for the new note, e.g. 'Projects/New Idea' (`.md` is added automatically). | |
| content | No | Note body (markdown, without frontmatter). | |
| overwrite | No | Replace the note if it already exists (default false). | |
| frontmatter | No | Frontmatter fields (tags, aliases, or any custom field). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds that the note is 'indexed immediately' and outlinks/tags become graph edges, which goes beyond the annotations (destructiveHint: true). No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. First sentence states core action, second adds critical behavioral detail. Efficient and well-structured.
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?
Covers creation behavior, overwrite, and indexing side effects. Missing description of return value or success response, but for a create tool with no output schema, the gap is small. Overall complete for the task.
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% with detailed descriptions for each parameter. Description adds value by explaining the overwrite behavior and path automation (.md appended), but does not significantly enhance understanding beyond the schema.
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?
Clear verb 'Create' and resource 'note in the vault'. Differentiates from sibling tools like append_to_note and move_note by specifying creation of a new note with overwrite condition.
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?
Mentions failure condition when note exists unless overwrite is set, giving context for when to use overwrite. Lacks explicit alternatives or when to use sibling tools, but provides solid situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteDelete NoteADestructive
Delete a note. By default it is moved to the vault's .trash folder and deletion is refused when backlinks exist. Permanent deletion and backlink override must be explicit.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| force | No | Allow deletion when backlinks exist (default false). | |
| permanent | No | Unlink permanently instead of moving to .trash (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true and readOnlyHint: false. Description adds valuable behavioral context: default trash behavior, backlink protection, permanent deletion option, far exceeding what annotations provide.
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 purpose, followed by key behavioral details. No wasted words, efficient and clear.
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-parameter tool with no output schema, description covers behavioral aspects and parameter implications adequately. Could potentially mention return values but not required.
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?
Input schema has 100% coverage for parameters (path, force, permanent). Description adds meaning by explaining the effect of force (override backlink refusal) and permanent (bypass trash), enhancing semantic understanding.
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?
Description clearly states 'Delete a note' and elaborates on default behavior (trash, backlink refusal) and explicit options (permanent, force). Distinguishes from sibling tools like move_note or create_note by specifying deletion semantics.
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?
Explicitly describes when to use (deletion) and when deletion is refused (backlinks exist, unless force). Does not directly compare to alternative tools but provides clear context for proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_orphansFind OrphansARead-onlyIdempotent
List notes with no outgoing or incoming links — useful for vault maintenance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is read-only and idempotent. The description adds the specific behavior of listing orphans, which is consistent and adds no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is entirely front-loaded and contains no fluff or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and a simple output, the description fully explains its purpose and result, which is complete given the context.
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?
There are zero parameters, so the description does not need to explain any. Baseline of 4 is appropriate as the schema coverage is 100% and no params exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists notes with no outgoing or incoming links, and it distinguishes itself from sibling tools like search_notes or get_backlinks which have different purposes.
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 mentions it is useful for vault maintenance, which implies its usage context, but does not explicitly state when not to use or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pathFind PathARead-onlyIdempotent
Find the shortest connection path between two notes (links treated as undirected), with a one-line summary of each note along the way. Shows how two concepts are actually connected in the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination note path, title, or alias. | |
| from | Yes | Starting note path, title, or alias. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds that links are treated as undirected and returns a path with summaries, which are useful behavioral details beyond annotations.
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 redundancy. The primary action and result are front-loaded in the first sentence.
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?
Given two parameters and no output schema, the description covers the algorithm, link treatment, and output format. Minor omission: behavior when no path exists is not mentioned, but overall sufficient.
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 schema already documents both parameters. The description does not add additional meaning to the parameters beyond the operation context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds the shortest connection path between two notes, treating links as undirected, and provides one-line summaries. This distinguishes it from siblings like get_backlinks or search_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?
The description implies usage for exploring conceptual connections but does not explicitly state when to use versus alternatives or when not to use. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_unresolvedFind Unresolved LinksARead-onlyIdempotent
List links that don't resolve to any note in the vault, grouped by target — useful for vault maintenance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description adds the grouping behavior. However, it does not disclose scope (e.g., all link types) or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It clearly states the action and purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and a simple purpose, but the description does not fully convey the return format (e.g., how targets are grouped, or what information accompanies each link). It is adequate for a straightforward list but lacks completeness.
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 input schema has 0 parameters with 100% coverage, so the baseline is 4. The description does not need to add parameter details, and it correctly implies no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'links that don't resolve to any note', clearly distinguishing it from sibling tools like find_orphans (which finds notes not linked) and get_backlinks (which shows incoming links).
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 states it's 'useful for vault maintenance' but does not explicitly advise when to use this tool versus alternatives like find_orphans or search_notes, nor does it mention 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.
get_backlinksGet BacklinksARead-onlyIdempotent
List every note that links to the given note, with the sentence/line each link appears in.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Note path, title, or alias. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral context by specifying the return format (includes sentence/line), going beyond annotations.
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?
Single, succinct sentence with no wasted words. Perfectly front-loaded and scannable.
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 tool with one parameter and no output schema, the description fully covers what the tool does and what it returns. Annotations cover safety, so no gaps remain.
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 the parameter description already clarifies the parameter. The tool's description only reinforces 'the given note' without adding new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list every note'), the resource ('that links to the given note'), and additional detail ('with the sentence/line each link appears in'). It distinguishes from sibling tools like get_neighborhood and get_related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need backlinks) but does not provide explicit when-to-use or when-not-to-use guidance, nor does it compare with alternatives like get_neighborhood.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_context_bundleGet Context BundleARead-onlyIdempotent
The killer feature: given a topic (note path/title/alias, or a search phrase), pack the center note plus its most relevant 1-hop neighbors (prioritized by backlink count, then recency) into a token budget. Prefer this over read_note when you want broad context on a topic rather than just one note.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Note path/title/alias, or a search phrase if no exact note matches. | |
| tokenBudget | No | Approximate token budget (default 4000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral details beyond annotations: prioritization by backlink count and recency, token budget constraint. Annotations already mark it read-only and idempotent; no contradictions.
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, both dense with information. No redundant or filler content. Every word 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?
Despite no output schema, the description fully explains what the tool returns (center note plus neighbors) and how it selects them. All aspects of behavior, parameters, and usage are covered adequately for a complex tool.
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%, but description adds context: tokenBudget default (4000) and that topic can be a search phrase if no exact note match. This adds meaningful interpretation beyond schema.
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?
Description uses specific verb 'pack' and resource 'context bundle', clearly stating it gathers center note with prioritized neighbors into a token budget. It explicitly distinguishes from sibling read_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?
Directly instructs to 'Prefer this over read_note when you want broad context on a topic'. While it doesn't list when not to use, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hotkeysGet Obsidian HotkeysARead-onlyIdempotent
Read persisted Obsidian hotkey bindings and their actual command IDs from .obsidian/hotkeys.json. This includes configured commands, not the app's full runtime command registry.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. Description adds specific file source and clarifies inclusion of only configured commands, providing useful context beyond annotations.
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 concise sentences with no wasted words. Front-loaded with the main action, then clarifies scope.
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?
Given no parameters, no output schema, and comprehensive annotations, the description provides all necessary information: purpose, source, and scope.
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?
No parameters exist; schema coverage is 100%. Baseline of 4 applies. Description does not need to elaborate on parameters.
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?
Description clearly states it reads persisted hotkey bindings and their command IDs from a specific file. It distinguishes from siblings like set_hotkey by focusing on read-only retrieval of configured commands.
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?
Implied usage: to view user's custom hotkeys, not full registry. No explicit when-not or alternatives mentioned, but the file path and scope provide clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_neighborhoodGet NeighborhoodARead-onlyIdempotent
Get the n-hop subgraph around a note: an explicit node list and edge list, treating links as undirected for hop counting.
| Name | Required | Description | Default |
|---|---|---|---|
| hops | No | Hop radius (default 2). | |
| path | Yes | Note path, title, or alias. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by explaining that links are treated as undirected for hop counting, and that the output is a node list and edge list. This provides context beyond the annotations.
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?
Single sentence, no wasted words, front-loaded with key purpose and output format. Every word 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?
Given no output schema, the description adequately explains the return structure (node list and edge list). It misses format details (e.g., what fields each node/edge has) but overall is sufficient for an agent to understand the tool's basic behavior.
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% with both parameters (hops, path) described. The description adds minimal extra meaning beyond the schema (e.g., 'n-hop' implies hops). Baseline 3 is appropriate since the schema already clarifies the parameters.
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?
Description clearly states verb ('Get'), resource ('n-hop subgraph around a note'), and specifies output ('explicit node list and edge list') with a key detail (undirected links). This distinguishes it from sibling tools like get_backlinks or get_context_bundle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like get_backlinks (which also returns links). The description implies use for a full subgraph but doesn't state exclusion criteria 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.
get_notes_by_tagGet Notes By TagARead-onlyIdempotent
List every note carrying a given tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag without the leading #, e.g. 'project/alpha'. | |
| includeNested | No | Include notes tagged with nested children of this tag (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description adds no further behavioral details beyond the purpose, such as whether notes are returned in sorted order or any limits. It is consistent but not additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is appropriately front-loaded and efficient for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool, the description combined with the schema and annotations provides adequate context. However, it could explicitly state that tag matching is exact (case-sensitive?) and mention the default nesting behavior, though these are partially covered in the parameter descriptions.
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?
Both parameters have detailed descriptions in the schema (100% coverage), so the tool description adds no extra meaning beyond what the schema provides. The description does not elaborate on the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists notes filtered by a given tag, using a specific verb ('List') and resource ('notes'). It is distinct from sibling tools like 'list_notes' (all notes) and 'search_notes' (full-text search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that for broader searches, 'search_notes' or 'list_notes' might be more appropriate, nor does it specify any prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_obsidian_settingsGet Obsidian SettingsARead-onlyIdempotent
Read the Templates folder and enabled/disabled core plugins from persisted vault settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the description adds value by detailing what specific settings are read (Templates folder, core plugins). No contradictions.
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?
Single sentence, front-loaded with the core action—efficient and 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 parameterless read tool with rich annotations, the description fully explains what the tool retrieves, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Baseline is 4 as description need not explain params. It correctly omits param details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the Templates folder and core plugins settings from vault settings, using a specific verb and distinct resource. It stands out from siblings like read_note or search_notes by focusing on settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like vault_overview or read_note. Usage is implied but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_folderList FolderARead-onlyIdempotent
List the immediate child folders, Markdown notes, and attachments in one vault folder.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Vault-relative folder. Omit for the vault root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by specifying 'immediate' children (non-recursive) and the types of items listed (folders, notes, attachments). This provides useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is front-loaded with the verb and scope, making it easy for an agent to quickly understand the tool's purpose.
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 list tool with one optional parameter and no output schema, the description is largely complete. It specifies what is listed and scoped. However, it does not describe the output format (e.g., list of paths or objects), which could be useful.
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% (the parameter 'folder' has a description). The overall description does not add additional meaning to the parameter beyond what the schema already provides, though it contextualizes the parameter within the list operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'immediate child folders, Markdown notes, and attachments', scoped to 'one vault folder'. This distinguishes it from siblings like list_notes (which lists all notes) and vault_overview (broader).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing contents of a single folder, but provides no explicit guidance on when to use this tool versus alternatives like list_notes or vault_overview. No exclusions or when-not-to-use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesList NotesARead-onlyIdempotent
List note paths explicitly, optionally scoped to a folder, with pagination. Use this instead of an empty full-text search when enumerating files. Pass properties to project specific frontmatter fields (e.g. status, project) alongside each note without reading every note individually.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max notes (default 100). | |
| folder | No | Vault-relative folder. Omit for the vault root. | |
| offset | No | Zero-based result offset. | |
| recursive | No | Include nested folders (default true). | |
| properties | No | Frontmatter field names to include per note, e.g. ['status', 'project']. Missing fields are null. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and no destructive hint. The description adds behavioral context: returns paths (not full content), supports folder scoping, pagination, and the ability to project frontmatter fields via the properties parameter. There is no contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the main purpose, followed by a usage guideline, then an explanation of a key parameter. Every sentence serves a purpose 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?
The tool has 5 parameters, all documented in schema, and no output schema. The description explains what is returned (paths and optionally frontmatter fields) and mentions pagination. This is adequate for a read-only list operation, though it could be more explicit about the return format (array, structure).
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. The description adds meaning by explaining the purpose of the properties parameter: 'to project specific frontmatter fields... without reading every note individually.' It also contextualizes limit/offset as pagination. This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List note paths' with optional folder scoping and pagination. It explicitly distinguishes itself from sibling tools like search_notes by advising 'Use this instead of an empty full-text search when enumerating files.' The verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear when-to-use: 'Use this instead of an empty full-text search when enumerating files.' This helps differentiate from search_notes. However, it does not explicitly list when not to use or mention other alternatives among the many 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 TagsARead-onlyIdempotent
List the full tag hierarchy (including nested #parent/child tags) with note counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, making the non-destructive nature clear. The description adds valuable context about the hierarchical output and note counts, which annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It fully conveys the tool's purpose and key details.
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 tool with no output schema, the description completely covers what the tool returns (tag hierarchy with note counts). No additional information is needed.
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?
There are no parameters, and schema description coverage is 100%. The description does not need to add parameter semantics; baseline is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the full tag hierarchy with note counts, distinguishing it from siblings like get_notes_by_tag (which retrieves notes for a specific tag).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., get_notes_by_tag). The description lacks explicit when/when-not or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_noteMove NoteADestructive
Move a note to a new vault-relative path and update every resolvable wikilink/Markdown link that pointed to it. Fails if the destination exists.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | New vault-relative path; .md is added automatically. | |
| from | Yes | Existing note path, title, or alias. | |
| updateLinks | No | Rewrite inbound links (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds crucial behaviors beyond annotations: link updating and failure condition. Annotations say destructiveHint=true but no further details. Description fills gap with concrete 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. Each sentence conveys essential information: action, side effect, and constraint. Front-loaded with verb and resource.
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?
Covers purpose, key behavior, and failure case. Missing prerequisites (e.g., note must exist) and return value. Given no output schema, description could mention success signal. Still fairly complete for a mutation tool with good 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 coverage is 100%, so description adds little beyond schema. It restates 'vault-relative' path and link update behavior, but doesn't clarify parameter types or defaults more than the schema's own descriptions.
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 states a specific verb (Move), resource (note), and key behaviors (update links, fails if destination exists). It distinguishes from sibling tools like rename_note by specifying path change and link updating.
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?
Only implicit usage context: fails on destination exists. No explicit when-to-use, when-not-to-use, or alternatives (e.g., rename_note for just renaming). Sibling tools exist but no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_sectionPatch SectionADestructiveIdempotent
Replace the content under one heading, preserving the heading and the rest of the note.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| content | Yes | New Markdown section content. | |
| heading | Yes | Heading text, without # markers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true and idempotentHint=true. The description adds behavioral context by stating it preserves the heading and rest of the note, going beyond the annotations. However, it does not disclose edge cases like missing heading or multiple matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core operation with zero 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?
Given three parameters, no output schema, and annotations present, the description covers the essential behavior. It lacks details on error handling (e.g., heading not found) but is adequate for a straightforward patch operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described clearly in the schema (e.g., 'Existing note path, title, or alias'). The description adds no additional parameter meaning beyond what the schema already provides.
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 'Replace the content under one heading, preserving the heading and the rest of the note' clearly states the specific verb (replace) and resource (content under a heading), distinguishing it from siblings like replace_text (global replacement) or append_to_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?
The description implies usage for modifying a section under a heading but does not explicitly state when to use this tool vs. alternatives like replace_text or update_frontmatter. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileRead Vault FileARead-onlyIdempotent
Read any indexed vault file. Markdown delegates to read_note; PDF/Office/OpenDocument/EPUB/RTF/text/code/data files return locally extracted, paginated text; supported images return MCP image content. Legacy or unknown binary formats return metadata and a clear unsupported status.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | PDF page number. | |
| path | Yes | Vault-relative file path (or resolvable filename). | |
| limit | No | Maximum text lines (default 500). | |
| sheet | No | XLSX sheet name. | |
| slide | No | PPTX slide number. | |
| offset | No | Zero-based extracted-text line offset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds valuable context not present in annotations: it explains output forms (paginated text, MCP image content, unsupported status), format-type branching, and delegation behavior for Markdown. This exceeds the minimum expected from annotated tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with high information density. The first sentence anchors the tool's core purpose; the second efficiently lists format-specific behavior. Every clause contributes useful details without repetition or irrelevant 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?
This is a multi-format file reader with branching behavior, but the description covers all main output modes: Markdown delegation, text extraction with pagination, image content, and unsupported binary fallback. Combined with complete schema descriptions, this is sufficient for an agent to predict and interpret results.
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 all six parameters are individually documented. The description adds a context-level explanation of pagination and image output, but does not enrich semantics for specific parameters like sheet, slide, or offset. The schema already handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: reading any indexed vault file. It also distinguishes itself from the read_note sibling by specifying that Markdown files delegate to read_note, while other formats return extracted text or image content. This is a specific verb-resource pairing with explicit scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when read_file is appropriate: for PDFs, Office documents, images, and other non-Markdown files. It also implies that Markdown reading should go through read_note. However, it does not explicitly say 'use read_note instead of read_file for Markdown,' so the guidance is clear but slightly indirect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_noteRead NoteARead-onlyIdempotent
Read a note's full content plus its graph context header (outlinks, backlinks, tags, frontmatter). Optionally read just one heading's section.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Note path, title, or alias. | |
| limit | No | Maximum lines to return (default 500). | |
| offset | No | Zero-based line offset within the selected content. | |
| heading | No | Only return the section under this heading. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| tags | No | |
| error | No | |
| title | No | |
| content | No | |
| heading | No | |
| warning | No | |
| outlinks | No | |
| backlinks | No | |
| pagination | No | |
| frontmatter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent hints. The description adds value by specifying the exact returned content (full content + graph context header) and optional heading filtering, which goes beyond the annotation hints.
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 wasted words. The main behavior is front-loaded, and the optional feature is clearly stated. Perfectly concise.
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?
Given the output schema exists to document return values, the description completes the context by explaining what data is returned (content + graph context) and the optional heading filter. All parameters are covered in schema, so no gaps remain.
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% with detailed parameter descriptions. The description reiterates the optional heading feature but does not add new semantic meaning beyond what the schema provides, achieving the baseline score.
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?
Description clearly states the tool reads a note's full content along with graph context (outlinks, backlinks, tags, frontmatter) and optionally a specific heading section. This distinguishes it from siblings like 'get_backlinks' which only returns backlinks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use when you need note content and graph context, or just a heading section. However, it does not explicitly state when not to use this tool or name specific alternatives, leaving a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regex_searchRegex SearchARead-onlyIdempotent
Search note bodies with a JavaScript regular expression and return matching file, line, and excerpt.
| Name | Required | Description | Default |
|---|---|---|---|
| flags | No | Any of i, m, s, u (default i). | |
| limit | No | Max matching lines (default 50). | |
| folder | No | Optional vault-relative folder scope. | |
| pattern | Yes | JavaScript regular expression pattern. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent behavior. The description adds that it uses JavaScript regex and returns file, line, and excerpt, but no contradictions and only incremental disclosure beyond annotations.
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?
Single sentence that is immediately informative and contains no extraneous words. Perfectly front-loaded.
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 tool, the description covers purpose and return values. Could mention pagination or behavior when no matches, but limit parameter already addresses that.
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?
All four parameters are described in the schema with 100% coverage. The description adds minimal extra meaning beyond the schema (e.g., 'JavaScript regular expression'), so baseline of 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?
The description specifies 'Search note bodies with a JavaScript regular expression' and 'return matching file, line, and excerpt', clearly distinguishing it from related tools like search_notes (full-text) or 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?
The description implies usage for regex-based searching but does not explicitly state when to use this tool versus alternatives or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_frontmatter_fieldRemove Frontmatter FieldADestructiveIdempotent
Remove exactly one YAML frontmatter field without replacing the note body.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| field | Yes | Top-level frontmatter field name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructiveHint=true and idempotentHint=true. The description adds that it removes the field without replacing the note body. However, it does not clarify behavior when the field does not exist, which could conflict with the idempotentHint (the operation might error instead of being idempotent). Some ambiguity remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. Every part is essential and the structure is optimal for quick comprehension.
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?
Given the annotations and schema, the description is mostly complete. It could improve by mentioning edge cases (e.g., field not found) or return behavior, but these are not critical for a simple removal operation with idempotentHint.
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 schema already documents both parameters. The description adds only that the field is 'top-level frontmatter field name,' which repeats the schema description. No additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove exactly one YAML frontmatter field') and the constraint ('without replacing the note body'), distinguishing it from siblings like update_frontmatter which modifies fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for removing a single field but does not explicitly state when to use this vs. alternatives, nor provide any when-not guidance or exclusions. With siblings like update_frontmatter and replace_text, clearer differentiation would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tagsRemove TagsADestructiveIdempotent
Remove one or more tags from a note's frontmatter tags array.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| tags | Yes | Tags to remove, with or without a leading #. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds no further behavioral context (e.g., what happens if a tag is missing, if the path is invalid, or side effects). While not contradictory, it misses an opportunity to clarify behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, immediately conveys the core action, and contains no extraneous words. It is front-loaded and efficient.
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 mutating tool with 2 parameters and no output schema, the description is largely sufficient. However, it could mention error handling for non-existent tags or invalid paths. Annotations cover safety aspects. Overall, provides adequate context for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters documented. The description adds minimal value beyond the schema—it restates the purpose. Baseline of 3 is appropriate as the description does not enhance understanding of the parameters' syntax or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'remove', the resource 'tags from a note's frontmatter `tags` array', and implies the scope. It distinguishes from sibling tool 'add_tags' which does the opposite, and 'remove_frontmatter_field' which removes the entire field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to remove tags) but lacks explicit guidance on when not to use it or mention of alternatives. Sibling tools like 'remove_frontmatter_field' or 'add_tags' are not referenced, so an agent might need to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_noteRename NoteADestructive
Rename a note within its current folder and update links that point to it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| newName | Yes | New filename only; use move_note to change folders. | |
| updateLinks | No | Rewrite inbound links (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the tool is destructive. The description adds that it updates links, which is behavioral information beyond annotations. No contradiction; description aligns with destructive nature.
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?
Single concise sentence that is front-loaded with the primary action. No redundant information. Every word 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?
No output schema, but return values are typical for a rename operation. Description does not explain behavior when updateLinks is false or details about path resolution. Somewhat complete but could be richer for a mutation tool with destructive hint.
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%, baseline 3. Description adds extra meaning for 'newName' parameter: 'New filename only; use move_note to change folders.' This guides the agent on correct usage. Also clarifies updateLinks boolean. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it renames a note within its current folder and updates links. The verb 'rename' is specific, and the resource 'note' is unambiguous. The description distinguishes from sibling tools like move_note (which changes folder) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool by stating 'within its current folder', contrasting with move_note for folder changes. However, it does not explicitly provide when-not or list alternatives. An agent would infer the usage context but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_tagRename TagADestructive
Rename a tag vault-wide, across both frontmatter tags arrays and inline #tag text. Defaults to dry-run and creates a rollback snapshot (restorable via rollback_bulk_edit) when applied.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | New tag name, with or without a leading #. | |
| from | Yes | Existing tag name, with or without a leading #. | |
| dryRun | No | Preview only (default true). Set false to apply. | |
| includeNested | No | Also rename child tags under from/ (default false), e.g. project/a -> newname/a. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral details beyond annotations: dry-run default, rollback snapshot creation, and renaming across both frontmatter and inline tags.
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 wasted words, action and scope are front-loaded.
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?
Despite no output schema, the description covers scope, both tag types, safety features, and recovery mechanism, making it complete for a rename tool.
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%, but description adds value by explaining dryRun's default behavior and the rollback context, beyond parameter descriptions.
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 states 'Rename a tag vault-wide' with specific scope and resource, clearly distinguishing from sibling tools like rename_note or add_tags.
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 mentions dry-run default and rollback snapshot for safe usage, implying when to apply changes, but lacks explicit comparison to alternatives like add_tags or remove_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_textReplace TextADestructive
Replace exact text in one note without overwriting the full note. Multiple matches require all: true or an exact expectedOccurrences guard.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Replace every match (default false). | |
| find | Yes | Exact text to find. | |
| path | Yes | Existing note path, title, or alias. | |
| replace | Yes | Replacement text; may be empty. | |
| expectedOccurrences | No | Abort unless this many matches exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description correctly implies modification without full overwrite. However, it does not elaborate on reversibility or side effects, missing an opportunity to add value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no unnecessary words. The main purpose is front-loaded, and the guidance on multiple matches is concise.
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 destructive tool with 5 parameters and no output schema, the description is minimal. It does not explain return values or error conditions, and it omits details about path resolution. Adequate but could be more 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?
With 100% schema description coverage, the baseline is 3. The description adds value by explaining the guard relationship between 'all' and 'expectedOccurrences' for multiple matches, which is not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'replace exact text in one note' and distinguishes from overwriting the full note. It also provides guidance on handling multiple matches, which differentiates it from siblings like bulk_replace or patch_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use 'all' or 'expectedOccurrences' for multiple matches, but does not explicitly state when not to use this tool or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_bulk_editRollback Bulk EditADestructiveIdempotent
Restore every file from a rollback snapshot created by bulk_replace or rename_tag.
| Name | Required | Description | Default |
|---|---|---|---|
| rollbackId | Yes | Rollback ID returned by bulk_replace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, which the description does not contradict. The description adds minimal extra behavioral context (e.g., that it restores 'every file from a rollback snapshot'), but this is largely redundant given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is front-loaded with the key verb 'restore'.
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 tool with one parameter and no output schema, the description is fully complete. It clearly explains the tool's purpose and the source of the required parameter.
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 covers the only parameter with 100% description. The description adds value by stating that rollbackId is returned by bulk_replace, providing context not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('restore every file') and the specific resource ('rollback snapshot created by bulk_replace or rename_tag'). It distinguishes this tool from its siblings by specifying the exact source tools that generate the snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a rollbackId from bulk_replace or rename_tag, providing clear context. However, it does not explicitly state when not to use it or list alternatives beyond the implied sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesSearch FilesARead-onlyIdempotent
Search extracted text from non-Markdown vault files (PDF, DOCX, PPTX, XLSX, OpenDocument, EPUB, RTF, and text/code/data files). Extraction is local, cached, and incremental.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10). | |
| query | No | Full-text query. Omit to list attachments. | |
| folder | No | Optional vault-relative folder scope. | |
| extension | No | Optional extension filter, e.g. pdf or pptx. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is clear. The description adds useful behavioral context beyond those annotations by stating extraction is local, cached, and incremental, which implies privacy and performance characteristics. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the main action and immediately scoped by file formats. The second sentence adds high-value behavioral context without redundancy or filler.
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 search tool with good annotations and full schema coverage, the description is nearly complete: clear purpose, file scopes, and extraction behavior. It could slightly improve by noting result shape or caveats around indexing staleness, but that is minor given the schema and sibling context.
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 each parameter already has meaningful documentation. The description adds broad context about what is searched (extracted text from non-Markdown files), but does not materially extend the semantics of the individual query, limit, folder, or extension parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Search extracted text') and the exact resource scope ('non-Markdown vault files'), specifying concrete file types. This firmly distinguishes it from sibling tools like search_notes, which target Markdown 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?
The description gives clear context for when to use the tool: when searching text inside non-Markdown vault files. It does not explicitly name alternative tools or say 'use search_notes for Markdown', but the 'non-Markdown' scope strongly implies the intended boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesSearch NotesARead-onlyIdempotent
Full-text search over note content and titles, with optional tag/folder filters. Each result includes its outgoing/incoming link counts and tags.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter to notes carrying this tag (nested tags match as a prefix). | |
| limit | No | Max results (default 10). | |
| query | No | Full-text search query (FTS5 syntax). Omit to just filter by tag/folder. | |
| folder | No | Filter to notes under this vault-relative folder path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, so the description adds non-obvious behavioral context by noting that results include outgoing/incoming link counts and tags.
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 succinct sentences, no filler, front-loaded with the core action. Every sentence 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?
Given no output schema, description specifies result content (link counts and tags). Lacks details on sorting or pagination, but limit is in schema. Sufficient for a search tool with good 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 coverage is 100% with detailed parameter descriptions (e.g., 'nested tags match as a prefix'), so the description adds minimal parameter-specific value beyond summarizing the filters. 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?
The description clearly states it performs 'full-text search over note content and titles' with optional filters, which distinguishes it from siblings like list_notes (just list) and get_notes_by_tag (filter by tag only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when full-text search is needed, and the distinction from other search tools (regex_search, list_notes) is clear, though it doesn't explicitly state when not to use or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchSemantic SearchARead-onlyIdempotent
Optional meaning-based search via local multilingual-e5-small embeddings. Requires OBSIDIAN_EVERYWHERE_ENABLE_SEMANTIC=true because the model can exceed 500 MiB RSS; the default low-memory mode keeps graph, FTS, attachment search, and Jaccard related-note search available without loading it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10). | |
| query | Yes | Free-text search query. | |
| folder | No | Optional vault-relative folder scope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds useful behavioral context about the model loading memory requirement (500 MiB RSS) and the env var, which goes beyond the structured annotations. It does not contradict any annotation, though it omits any explicit return 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?
The description is just two sentences, front-loaded with the core purpose, and every clause adds necessary context (enable condition, memory impact, and alternatives). No filler or redundant phrasing.
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?
Given the tool's low complexity (3 params, readOnly annotations), the description covers the critical boundary conditions (env var, memory impact) and differentiations from siblings. It does not mention what the output looks like, but since output schema is absent, this is a minor gap; overall it is complete enough for an agent to understand the tool's purpose and surprises.
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 input schema already describes all three parameters (query, limit, folder) with full coverage (100%). The description does not add any extra semantics beyond what the schema provides, so a baseline score of 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?
The description states 'Optional meaning-based search via local multilingual-e5-small embeddings' and clearly distinguishes it from FTS and other search methods. The verb and resource are explicit, and the alternative methods (FTS, attachment search, Jaccard related-note) are named, making the tool's niche unambiguous.
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 explains when the tool is unavailable (unless the environment variable is set) and suggests that alternatives like FTS and Jaccard search remain usable without loading the model. This gives explicit context for when to choose this tool vs siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_hotkeySet Obsidian HotkeyADestructiveIdempotent
Set persisted hotkey bindings for an exact Obsidian command ID. The app may need a vault reload; command IDs cannot be runtime-validated by the standalone server.
| Name | Required | Description | Default |
|---|---|---|---|
| hotkeys | Yes | Bindings; pass an empty array to clear this command's custom hotkeys. | |
| commandId | Yes | Exact command ID, e.g. insert-template. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and idempotentHint=true, and the description adds valuable behavioral context: the app may need a vault reload and command IDs cannot be runtime-validated. This goes beyond what annotations provide.
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 concise sentences that are front-loaded with the main action. No fluff; every sentence adds value.
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?
Given the 2 parameters, high schema coverage, and annotations, the description covers the essential behavioral aspects. It could mention error behavior or default hotkey behavior, 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% with helpful property descriptions. The description adds a note about validation for commandId but does not significantly enhance understanding beyond the schema. 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?
The description clearly states the tool sets persisted hotkey bindings for a specific Obsidian command ID. It uses a specific verb ('Set') and resource ('hotkey bindings'), and the detail about exact command ID distinguishes it from general hotkey tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use the tool (to set hotkeys) and mentions side effects like vault reload and validation limitations. However, it does not explicitly state when not to use it or name alternatives like get_hotkeys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_templates_folderSet Templates FolderADestructiveIdempotent
Set the persisted folder used by Obsidian's Templates core plugin.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | Vault-relative Templates folder path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true, which align with the description. The description does not add extra behavioral context beyond what annotations provide, such as error handling or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that immediately conveys the purpose. No extraneous information, efficiently front-loaded.
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, the description is minimal but adequate. It could be more complete by explaining the effect on the plugin's behavior or persistence, but it is not insufficient.
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% with a clear parameter description. The tool description adds no additional meaning to the parameter beyond what the schema already provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('set'), the resource ('persisted folder'), and the context ('Obsidian's Templates core plugin'). It uniquely identifies the tool among siblings, as no other sibling sets a templates folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or conditions. The description is purely declarative without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_frontmatterUpdate FrontmatterADestructiveIdempotent
Merge one or more fields into a note's YAML frontmatter without replacing its body.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Existing note path, title, or alias. | |
| fields | Yes | Fields to add or replace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent behavior. Description adds key detail that body is preserved, which is valuable context beyond basic safety flags.
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?
Single sentence, zero redundancy. Every word 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 frontmatter update tool with complete schema and annotations, the description is sufficient. Could mention idempotency but not required.
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 covers both parameters fully. Description mentions 'merge' and 'fields' but adds no extra constraints or format hints, so baseline score 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?
Describes specific action (merge fields into frontmatter) and explicitly states body is not replaced, clearly distinguishing from siblings like replace_text, append_to_note, and remove_frontmatter_field.
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 when to use (updating frontmatter without affecting body), but lacks explicit exclusions or alternatives. Still clear enough for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_baseValidate Obsidian BaseARead-onlyIdempotent
Statically validate YAML and core structural fields in a .base file or fenced base block. Reports the limit that formula semantics and rendering require a live Obsidian app.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Vault-relative .base or Markdown path. | |
| content | No | Base YAML or Markdown containing fenced base blocks; overrides path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safety, idempotency, and non-destructiveness. The description adds value by specifying validation scope and a constraint (requires live Obsidian for formula semantics).
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 concise sentences: first states primary function, second adds an important caveat. No unnecessary 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?
Given the simple parameter set and no output schema, the description provides sufficient detail about what is validated and a key limitation. Could mention the scope of 'core structural fields' but overall adequate.
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 descriptions are clear. The tool description does not add extra parameter-level meaning beyond schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (validate) and the resource (.base file or fenced base block), making it easy to distinguish from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives; the limitation mention is helpful but does not provide usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_overviewVault OverviewARead-onlyIdempotent
Get a high-level picture of the vault: note counts, top tags, hub notes by PageRank, and recently modified notes. Good first call at the start of a conversation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds valuable detail on what specific data is returned (counts, tags, PageRank, recent modifications), enhancing transparency beyond annotations.
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 wasted words. Front-loaded with purpose, then lists specifics, then usage guidance.
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?
Given zero parameters and no output schema, the description fully specifies what the tool returns and when to use it. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema description coverage is 100% trivially. Baseline for 0 parameters is 4. Description does not need to add parameter info.
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?
Clearly states verb 'Get' and resource 'high-level picture of the vault' with specific outputs (note counts, top tags, hub notes by PageRank, recently modified notes). Distinguishes itself from siblings which are more specific operations.
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?
Explicitly says 'Good first call at the start of a conversation,' providing clear guidance on when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_statusVault StatusARead-onlyIdempotent
Report mount-guard state, index freshness, indexed counts, write availability, and the last full reconciliation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds specific metrics reported, which is useful context beyond annotations. Could mention authorization or rate limits but not necessary for a simple status check.
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 'Report', covers all key aspects without waste. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately lists what the tool returns. For a simple status tool, this is complete enough.
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?
No parameters exist, and schema coverage is 100%. Baseline 4 per guidelines for zero parameters. No additional parameter info needed.
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 explicitly states the tool reports specific vault status metrics (mount-guard state, index freshness, indexed counts, write availability, last full reconciliation), clearly distinguishing it from sibling tools like vault_overview or search_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?
The description implies usage for retrieving vault status, but does not explicitly state when to use this tool versus alternatives or provide any exclusions. Adequate but lacks explicit guidance.
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. Dates show when Glama detected each change.
2 tool updates
v0.8.1- Added
read_file - Added
search_files
1 tool update
v0.7.0- Added
vault_status
16 tool updates
v0.6.0- Added
add_tags - Added
apply_template - Added
bulk_remove_frontmatter_field - Added
bulk_update_frontmatter - Changed
find_orphans1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_unresolved1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_hotkeys1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_obsidian_settings1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_related1 field changed- added
Input schema / properties / methodAdded value: +{ + "description": "Similarity method (default jaccard).", + "enum": [ + "jaccard", + "semantic" + ], + "type": "string" +}
- Changed
list_notes1 field changed- added
Input schema / properties / propertiesAdded value: +{ + "description": "Frontmatter field names to include per note, e.g. ['status', 'project']. Missing fields are null.", + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" +}
- Changed
list_tags1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
read_note2 fields changed- added
Output schema / properties / errorAdded value: +{ + "type": "string" +} - removed
Output schema / requiredRemoved value: -[ - "path", - "title", - "content", - "frontmatter", - "outlinks", - "backlinks", - "tags", - "pagination" -]
- Added
remove_tags - Added
rename_tag - Added
semantic_search - Changed
vault_overview1 field changed- added
Input schema / additionalPropertiesAdded value: +false
31 tool updates
v0.1.0- First observed
append_to_note - First observed
bulk_replace - First observed
create_note - First observed
delete_note - First observed
find_orphans - First observed
find_path - First observed
find_unresolved - First observed
get_backlinks - First observed
get_context_bundle - First observed
get_hotkeys - First observed
get_neighborhood - First observed
get_notes_by_tag - First observed
get_obsidian_settings - First observed
get_related - First observed
list_folder - First observed
list_notes - First observed
list_tags - First observed
move_note - First observed
patch_section - First observed
read_note - First observed
regex_search - First observed
remove_frontmatter_field - First observed
rename_note - First observed
replace_text - First observed
rollback_bulk_edit - First observed
search_notes - First observed
set_hotkey - First observed
set_templates_folder - First observed
update_frontmatter - First observed
validate_base - First observed
vault_overview
TDQS
Each tool has a clearly defined and distinct purpose. Despite the large number of tools, descriptions are detailed and differentiate overlapping functionalities like search_notes, regex_search, and semantic_search. No two tools appear to perform the same action.
All tool names follow a consistent verb_noun snake_case pattern (e.g., get_backlinks, create_note, bulk_update_frontmatter). The naming is predictable and makes tool functions easy to infer.
With 38 tools, the count is above the typical 'well-scoped' range of 3-15. However, the server aims to cover a broad domain (Obsidian vault management), and each tool has a specific use case. The count is borderline but still reasonable for the given scope.
The tool set covers virtually all essential operations for an Obsidian vault: note CRUD, search (full-text, regex, semantic), graph exploration, tag and frontmatter management, bulk editing with rollback, and vault settings. There are no obvious missing features.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
- TaprootOAuthcom.taproothq
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to read, write, search, and navigate Obsidian vault notes with support for CRUD operations, full-text search, graph navigation, daily notes, and frontmatter management.4,785-
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with an Obsidian vault via the Local REST API plugin, supporting file operations, search, periodic notes, commands, and semantic search.4,785MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading, writing, searching, and managing an Obsidian vault through Claude, operating directly on markdown files via Node.js fs without requiring the Obsidian app.5,784MIT
- FlicenseAqualityCmaintenanceEnables Claude to create, read, update, and search notes in a local Obsidian vault, with automatic YAML frontmatter and folder management.71-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/junnnnnw00/obsidian-everywhere'
If you have feedback or need assistance with the MCP directory API, please join our Discord server