Skip to main content
Glama
AdrianV101

obsidian-pkm

by AdrianV101

Vault PKM

Give Claude persistent, structured memory across conversations using your Obsidian vault. Read, write, search, and navigate your knowledge base — all from within Claude Code.

Under the hood, this Claude Code plugin provides 20 MCP (Model Context Protocol) tools for note creation, semantic search, graph traversal, metadata queries, and session memory — plus agents, hooks, and skills for seamless workflow integration. Published on npm as obsidian-pkm.

If you find this useful, please star the repo — it helps others discover the plugin.

Watch the demo video

Why

Claude Code has built-in memory, but it's flat text files scoped to individual projects — no structure, no search beyond exact matches, no connections between notes, and no way to query across projects. As knowledge grows, it doesn't scale. This server replaces that with a proper PKM layer: structured notes with enforced metadata, semantic search, a navigable knowledge graph, and cross-project access through a single Obsidian vault.

  • Structured session memory — Every tool call is logged with timestamps and session IDs, so Claude can recall exactly what was read, written, and searched in previous conversations — not just what was saved to a text file.

  • Structured knowledge creation — ADRs, research notes, devlogs, and tasks are created from enforced templates with validated frontmatter — not freeform text dumps. Your vault stays consistent and queryable.

  • Semantic discovery — "Find my notes about caching strategies" works even if you never used the word "caching." Conceptual search surfaces relevant knowledge that keyword search misses.

  • Graph-aware connections — Claude explores your knowledge graph by following wikilinks, discovering related notes by proximity rather than just content. Link suggestions help weave new notes into your existing web of knowledge.

  • Knowledge capture — Decisions, tasks, and research findings are captured by specialized agents in the background without interrupting your coding flow.

Without this, knowledge stays fragmented across per-project memory files and chat logs. With it, your AI assistant maintains a unified knowledge base that compounds over time.

How It Compares

Vault PKM

remember

Claude built-in memory

Knowledge base

Your Obsidian vault (markdown files you own)

Compressed conversation logs (.remember/ dir)

CLAUDE.md + auto-memory files

Scope

Cross-project (one vault for everything)

Per-project

Per-project (git-repo scoped)

Semantic search

OpenAI embeddings

Graph traversal

Wikilink BFS, link health audits

Structured notes

13 templates with validated frontmatter

Plain markdown

Plain markdown

Metadata queries

Filter by type, status, tags, dates, custom fields

Session memory

Activity log (every tool call with timestamps)

Tiered daily summaries (Haiku-compressed)

Manual (user writes CLAUDE.md)

Setup effort

Medium (vault path + optional OpenAI key)

Low (auto hooks, no config)

None (built-in)

MCP tools

20

0 (hooks-based)

0

Agents

3 (explorer, capture, auditor)

0

0

remember is great for lightweight session continuity with minimal setup. Vault PKM is for developers who want a structured, searchable, interconnected knowledge base that grows with every project.

Related MCP server: obsidian-ai-curator

Features

Knowledge Creation & Editing

Tool

Description

vault_write

Create notes from templates with enforced frontmatter (ADRs, research, devlogs, tasks, etc.)

vault_append

Add content to notes, with positional insert (after/before heading, end of section)

vault_edit

Surgical string replacement for precise edits

vault_update_frontmatter

Atomic YAML frontmatter updates (set, create, remove fields; validates enums by note type)

Tool

Description

vault_search

Full-text keyword search across markdown files

vault_semantic_search

Conceptual similarity search via OpenAI embeddings — finds related notes even with different wording

vault_query

Query by YAML frontmatter (type, status, tags, dates, custom fields) with sorting

vault_tags

Discover all tags with per-note counts; folder scoping, glob filters, inline tag parsing

vault_suggest_links

Suggest relevant notes to link based on content similarity

Graph & Connections

Tool

Description

vault_links

Wikilink analysis (incoming and outgoing links for a note)

vault_neighborhood

Graph exploration via BFS wikilink traversal — discover related notes by proximity

vault_add_links

Add annotated wikilinks to a note's section with deduplication

vault_link_health

Audit link quality — find orphans, broken links, weak connections, ambiguous links

Reading & Navigation

Tool

Description

vault_read

Read note contents (pagination by heading, tail, chunk, line range; auto-redirects large files)

vault_peek

Inspect file metadata and structure without reading full content

vault_list

List files and folders

vault_recent

Recently modified files

Organization & Maintenance

Tool

Description

vault_move

Move/rename files with automatic wikilink updating across the vault

vault_trash

Soft-delete to .trash/ (Obsidian convention), warns about broken incoming links

Session Memory

Tool

Description

vault_activity

Cross-conversation memory — logs every tool call with timestamps and session IDs

Agents, Skills & Commands

Agents (3) run autonomously in foreground or background:

Agent

Purpose

vault-explorer

Research existing knowledge before creating notes

pkm-capture

Devlog entries + knowledge capture after commits and work blocks

link-auditor

Audit vault link health after bulk note changes

Skills (6) are guided workflows triggered by slash commands:

Skill

Purpose

pkm-write

Duplicate checking, link discovery, and annotations when creating notes

pkm-explore

Graph + semantic exploration to map existing knowledge on a topic

pkm-session-end

Session wrap-up: devlog, undocumented work capture, link health audit

add-task

Fast task capture from a title with duplicate detection, priority shorthands, and due date

triage-tasks

Surface open tasks as a numbered list with git completion hints; batch-update via shorthand (e.g. 1,3 done | 2 active)

tackle-task

Work a task end-to-end: read, explore vault context, route to the right workflow tier, close when done

Commands (2) for setup and configuration:

Command

Purpose

/vault-pkm:setup

Configure vault path, API keys, and permissions

/vault-pkm:init-project

Connect a code repository to a vault project folder

Prerequisites

  • Node.js >= 20 (Node 18 is EOL; uses native fetch and ES modules)

  • An MCP-compatible client such as Claude Code

Prebuilt native binaries are included for Node 20/22 on Linux x64, macOS (x64/arm64), and Windows x64. Most users need nothing else. If the prebuilt fails, you'll need C++ build tools — see Troubleshooting.

Quick Start

1. Install the Plugin

claude plugin marketplace add anthropics/claude-plugins-community
claude plugin install vault-pkm@claude-community

2. Configure

Run the setup skill in Claude Code:

/vault-pkm:setup

The setup skill walks you through vault path, API keys, tool permissions, and verification. Hooks are registered automatically by the plugin system.

Important: Restart your Claude Code session after setup completes so the MCP server picks up the new configuration.

3. Scaffold Your Vault (optional)

If you need templates and the PARA folder structure, run the vault scaffolding wizard:

npx obsidian-pkm init

This is separate from the plugin install above — it only sets up your vault's directory structure (PARA folders, note templates). Nothing is written until you confirm each step.

Note: The first npx run downloads and compiles native dependencies, which may take 30-60 seconds. Subsequent runs are instant.

Step 1 — Vault path. Point to an existing Obsidian vault or create a new one. The wizard resolves ~, $HOME, and relative paths automatically. Safety checks prevent using system directories (/, /home, etc.) as a vault. For existing non-empty directories you can use it as-is, create a subfolder inside it, or wipe it (with triple confirmation). You'll be offered an optional backup before any changes.

Step 2 — Note templates. Copies template files into <vault>/05-Templates/. Three options:

  • Full set — all 13 templates (adr, daily-note, devlog, fleeting-note, literature-note, meeting-notes, moc, note, permanent-note, project-index, research-note, task, troubleshooting-log)

  • Minimal — just note.md (a single generic template)

  • Skip — for users with their own templates

Existing templates are never overwritten.

Step 3 — PARA folder structure. Creates 7 top-level folders with _index.md stubs:

Folder

Purpose

00-Inbox/

Quick captures and unsorted notes

01-Projects/

Active project folders

02-Areas/

Ongoing areas of responsibility

03-Resources/

Reference material and reusable knowledge

04-Archive/

Completed or inactive items

05-Templates/

Note templates

06-System/

System configuration and metadata

Each _index.md has type: moc frontmatter. Existing folders and index files are skipped.

4. Verify It Works

Open Claude Code and try:

List the folders in my vault

Claude should call vault_list and show your vault's directory structure. If it works, the server is connected and ready.

5. Enable Semantic Search (optional)

Add your OpenAI API key to ~/.claude/settings.json under the env block:

{
  "env": {
    "VAULT_PATH": "/path/to/vault",
    "VAULT_PKM_OPENAI_KEY": "sk-your-key-here"
  }
}

Use VAULT_PKM_OPENAI_KEY (preferred) to avoid conflicts with project-level OpenAI keys. OPENAI_API_KEY is also accepted as a fallback. The previously-documented OBSIDIAN_PKM_OPENAI_KEY still works as a deprecated fallback — plan to rename it in your config. Restart Claude Code after saving.

Optional: VAULT_PKM_VAULT_NAME — overrides the vault name used in obsidian:// links emitted in tool output. Defaults to basename(VAULT_PATH), which is correct for most setups. Set this only if your on-disk folder name differs from the vault name you registered in Obsidian (e.g. VAULT_PATH=/Users/me/Notes but Obsidian shows the vault as My PKM).

This enables vault_semantic_search and vault_suggest_links. Uses text-embedding-3-large with a SQLite + sqlite-vec index stored at .obsidian/semantic-index.db. The index rebuilds automatically — delete the DB file to force a full re-embed.

The server works with any Obsidian vault. The included templates assume this layout:

Vault/
├── 00-Inbox/
├── 01-Projects/
│   └── ProjectName/
│       ├── _index.md
│       ├── planning/
│       ├── research/
│       └── development/decisions/
├── 02-Areas/
├── 03-Resources/
├── 04-Archive/
├── 05-Templates/          # Note templates loaded by vault_write
└── 06-System/

Templates

vault_write loads all .md files from 05-Templates/ at startup and enforces frontmatter on every note created. Run npx obsidian-pkm init to install them automatically, or copy the files from templates/ manually.

13 included templates: adr, daily-note, devlog, fleeting-note, literature-note, meeting-notes, moc, note, permanent-note, project-index, research-note, task, troubleshooting-log. Add your own templates to 05-Templates/ and they become available to vault_write automatically.

Task notes enforce status (pending, active, done, cancelled) and priority (low, normal, high, urgent) enums. All other note types accept any string values for these fields.

CLAUDE.md for Your Projects

sample-project/CLAUDE.md is a template you can drop into any code repository to wire up Claude Code with your vault. It defines context loading, documentation rules, and ADR/devlog conventions.

Module dependencies:

graph LR
    CC[Claude Code] -->|MCP protocol| IDX[index.js]
    IDX --> HND[handlers.js]
    IDX --> E[embeddings.js]
    IDX --> A[activity.js]
    HND --> H[helpers.js]
    HND --> G[graph.js]
    HND --> U[utils.js]
    HND -->|read/write| V[(Obsidian Vault)]
    E -->|embeddings API| OAI[OpenAI]
    E -->|vector store| DB[(SQLite + sqlite-vec)]
    A -->|activity log| DB2[(SQLite)]

File layout:

├── index.js          # MCP server setup, tool registration, lifecycle
├── handlers.js       # Tool handler implementations
├── helpers.js        # Pure functions (path security, filtering, templates, frontmatter)
├── graph.js          # Wikilink resolution and BFS graph traversal
├── embeddings.js     # Semantic index (OpenAI embeddings, SQLite + sqlite-vec)
├── activity.js       # Activity log (session tracking, SQLite)
├── utils.js          # Shared utilities (frontmatter parsing, file listing)
├── cli.js            # CLI entry point (routes `init` subcommand or starts server)
├── init.js           # Vault scaffolding wizard (templates, PARA folders)
├── .claude-plugin/   # Plugin packaging
│   └── plugin.json   # Plugin manifest (identity, components, permissions)
├── hooks/            # Claude Code hooks (context loading, project resolution, session start)
├── agents/           # Specialized agents (vault-explorer, pkm-capture, link-auditor)
├── skills/           # PKM workflow skills (pkm-write, pkm-explore, pkm-session-end, add-task, triage-tasks, tackle-task)
├── commands/         # Slash commands (setup, init-project)
├── templates/        # Obsidian note templates
├── tests/            # Test suite (Node.js built-in test runner)
├── sample-project/   # Sample CLAUDE.md for your repos
└── docs/             # Supplementary documentation

index.js initializes the semantic index and activity log, then injects them into createHandlers(). All paths passed to tools are relative to vault root. The server includes path security to prevent directory traversal.

How It Works

Knowledge creation is template-based. vault_write loads templates from 05-Templates/, substitutes Templater-compatible variables (<% tp.date.now("YYYY-MM-DD") %>, <% tp.file.title %>), and validates required frontmatter fields (type, created, tags). This ensures every note in your vault has consistent metadata — making it queryable, sortable, and discoverable from day one. Task notes enforce enum validation on status and priority; other types accept project, deciders, due, and source.

Knowledge discovery works at two levels. Keyword search (vault_search) finds exact terms. Semantic search embeds notes using OpenAI and finds conceptually related content — so "managing overwhelm" surfaces notes about "cognitive load" even if those exact words never appear together. The semantic index watches for file changes in real-time and syncs across machines via Obsidian Sync.

Knowledge connections are maintained through Obsidian's [[wikilink]] graph. vault_neighborhood traverses links via BFS to discover related notes by proximity, while vault_suggest_links recommends connections you haven't made yet. vault_move rewrites wikilinks across the vault when you reorganize, and vault_trash warns about links that would break.

Session memory records every tool call with timestamps and session IDs, so Claude can recall what was read, written, or searched in previous conversations. This turns ephemeral chat sessions into a continuous thread of work.

Knowledge capture uses the pkm-capture agent to update the project devlog and persist PKM-worthy content from a session (decisions, research findings, tasks, bug root causes) in one pass. It is triggered automatically after git commits via a PreToolUse hook, or can be dispatched manually after significant work blocks. Runs in the background without interrupting the coding flow.

Fuzzy path resolution lets read-only tools accept short names instead of full vault paths. vault_read({ path: "devlog" }) resolves to 01-Projects/MyApp/development/devlog.md automatically (.md extension optional). Folder-scoped tools like vault_list, vault_search, and vault_query accept partial folder names — folder: "MyApp" resolves to 01-Projects/MyApp. Ambiguous matches return an error listing candidates. Write/destructive tools always require exact paths.

Troubleshooting

better-sqlite3 build fails during install You need C++ build tools. See Prerequisites for your platform. On Linux, sudo apt install build-essential python3 usually fixes it.

Server starts but all tool calls fail with ENOENT Your VAULT_PATH is wrong or missing. The server validates this at startup and exits with a clear error. Run /vault-pkm:setup to reconfigure the vault path.

vault_write says "no templates available" Run npx obsidian-pkm init to install templates, or copy the templates/ files from this repo into your vault's 05-Templates/ directory. The server loads templates from there at startup.

Semantic search not appearing in tool list Set VAULT_PKM_OPENAI_KEY in ~/.claude/settings.json. See Enable Semantic Search. Without it, vault_semantic_search and vault_suggest_links are hidden entirely.

Server not showing up in Claude Code after install Run claude mcp list to check. If vault-pkm is missing, reinstall the plugin: claude plugin install vault-pkm@claude-community. Then run /vault-pkm:setup to configure it.

Semantic index not updating after file changes Check your Node version with node -v. The file watcher uses fs.watch({ recursive: true }) which requires Node.js >= 20.

Not sure if everything is set up correctly? Run npx obsidian-pkm doctor for a diagnostic checklist that validates your Node version, vault path, templates, API keys, and native dependencies.

Contributing

Contributions are welcome! Please read CONTRIBUTING.md for development setup, code style guidelines, and the pull request process before submitting changes.

See CHANGELOG.md for release history, SECURITY.md to report vulnerabilities, and PRIVACY.md for how the plugin handles your data.

License

MIT

Available Tools

18 tools
vault_activityA

Query or clear the activity log. Shows tool calls made across sessions with timestamps and arguments. Use action 'query' to retrieve entries, 'clear' to delete entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFilter by file path substring in arguments
toolNoFilter by tool name (e.g., 'vault_read', 'vault_write')
limitNoMax entries to return (query only, default: 50)
sinceNoFilter entries on or after this ISO timestamp (e.g., '2026-02-08')
actionNoAction to perform (default: query)query
beforeNoFilter entries before this ISO timestamp
sessionNoFilter by session ID

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses that 'clear' deletes entries, which is a destructive action, and that it shows tool calls across sessions. However, it does not warn about the irreversibility of clear, whether filters apply to clear, or any authentication or rate-limit concerns. This leaves some behavioral gaps.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and contains no filler. Every word contributes to understanding the tool's function, making it highly concise and well-structured.

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

Completeness3/5

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

The description is adequate for a tool with 7 parameters and no output schema, but it leaves important ambiguities. It does not clarify whether 'clear' respects the filter parameters or affects all entries, nor does it describe the output format for 'query' beyond mentioning timestamps and arguments. These gaps mean the description is not fully complete for an agent to invoke the tool confidently.

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

Parameters3/5

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

The schema description coverage is 100%, so the baseline is 3. The description does not add meaningful semantics beyond the schema; it only restates the 'action' parameter ('query' and 'clear'). The schema already documents all parameters well, so no extra value is provided.

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

Purpose5/5

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

The description clearly states the tool queries or clears the activity log, with a specific verb and resource. It distinguishes itself from sibling tools by explicitly focusing on activity logs, making its purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool (to view or clean activity logs) and even explains the two actions ('query' and 'clear'). While it does not explicitly mention alternatives or when not to use it, the context is clear and no exclusions are needed given the unique purpose.

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

vault_appendA

Append content to an existing file, optionally under a specific heading. When 'position' is specified, heading is required and must exist in the file. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to vault root
contentYesContent to append
headingNoOptional: append under this heading (e.g., '## Notes')
positionNoWhere to insert relative to heading. after_heading: right after the heading line. before_heading: right before the heading line. end_of_section: at the end of the section (before the next same-or-higher-level heading, or EOF). Requires heading.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses a non-obvious output format ('Paths in this tool's output are formatted as markdown links...') and a precondition ('heading is required and must exist in the file'). This adds significant context beyond a simple append operation. However, it omits error behavior (e.g., file not found) and permission details, though a 4 is justified given the specific behaviors shared.

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

Conciseness5/5

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

The description is three sentences, each with a distinct purpose: the first states the core action and its optional heading feature, the second explains the output path formatting, and the third gives a practical instruction for relaying paths. No filler or redundancy; the most important information is front-loaded.

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

Completeness4/5

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

For a tool with 4 parameters, no output schema, and no annotations, the description covers the core append action, the position/heading dependency, and a key output-format behavior that affects how results should be interpreted. It stops short of describing error handling or the exact return format, but these are not critical for selecting or invoking the tool. The description feels sufficient for an agent to use the tool correctly.

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

Parameters4/5

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

The schema already provides descriptions for all 4 parameters (100% coverage), so the baseline is 3. The description adds meaningful semantic value by clarifying the relationship between heading and position ('When 'position' is specified, heading is required and must exist in the file') and by noting how paths should be handled ('pass only the bracket text... never the full markdown link'). This goes beyond the schema's individual parameter descriptions.

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

Purpose5/5

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

The description begins with a specific verb+resource combination: 'Append content to an existing file', which clearly distinguishes it from sibling tools like vault_write (creation) and vault_edit (modification). It also adds a distinguishing feature: 'optionally under a specific heading', making the tool's unique purpose and scope immediately clear.

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

Usage Guidelines3/5

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

The description implies usage for existing files ('Append content to an existing file') but does not explicitly state when to prefer this over alternatives. It does provide a clear constraint for position usage ('When 'position' is specified, heading is required and must exist in the file'), but this is a parameter rule, not tool-selection guidance. No explicit exclusions or alternative references are given.

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

vault_editA

Edit a file by replacing an exact string match. The old_string must appear exactly once in the file for safety. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to vault root
new_stringYesReplacement string
old_stringYesExact string to find (must match exactly once)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It adds meaningful behavioral details beyond the schema: the 'must appear exactly once' safety check and the markdown-link output format for paths. This gives an agent useful knowledge about safety and how to handle output, though it does not disclose error behavior or permission requirements.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core action, then the safety constraint, and finally the output-format note. Every sentence provides necessary information with no redundancy or filler. It is an model of conciseness.

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

Completeness3/5

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

The tool is moderately simple, but the description omits the full return value or output structure (only path formatting is mentioned). With no output schema and many sibling tools, more detail about what to expect after editing would improve completeness. Still, the core behavior and key constraints are covered.

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

Parameters4/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description adds extra value by clarifying how the `path` parameter should be used (pass only bracket text) and reinforces the `old_string` uniqueness requirement. This is above the baseline for high coverage.

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

Purpose5/5

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

The description clearly states the verb ('Edit') and resource ('a file'), with a specific method ('replacing an exact string match'). This distinguishes it from sibling tools like vault_write, vault_append, and vault_update_frontmatter, which imply other edit mechanisms. The exact-once constraint further clarifies the tool's specific behavior.

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

Usage Guidelines3/5

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

The description implies usage when an exact string replacement is needed, and the uniqueness constraint gives a clear precondition. However, it does not explicitly compare with alternatives like vault_write or vault_append, nor does it state when *not* to use this tool. Usage guidance is left to inference rather than direct instruction.

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

vault_listA

List files and folders in the vault. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoPath relative to vault root (supports partial names, e.g. 'MyApp'; default: root)
patternNoGlob pattern to filter (e.g., '*.md')
recursiveNoList recursively

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavior burden. It discloses the markdown-link output format and instructs how to extract plain paths for other tools, which is key behavioral context beyond the schema.

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

Conciseness5/5

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

Three purposeful sentences, each earning its place: purpose stated first, then output format, then a crucial usage instruction. No waste.

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

Completeness4/5

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

The description adequately covers the tool's output format and path-handling behavior, which are the main non-obvious aspects. Schema covers parameters. It could mention sorting or hidden files, but these are minor for a listing tool.

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

Parameters3/5

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

Schema coverage is 100%, so the schema fully documents parameters. The description adds only a minor example of a path value, not substantial semantic detail beyond the schema.

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

Purpose5/5

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

The description clearly states 'List files and folders in the vault' with a specific verb and resource, distinguishing it from sibling tools like vault_read or vault_write.

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

Usage Guidelines3/5

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

Usage is implied as a listing tool, but the description offers no explicit guidance on when to prefer it over alternatives like vault_search or vault_recent, and no exclusions.

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

vault_moveA

Move or rename a markdown file within the vault. Automatically updates wikilinks in all files that reference the moved file. Both paths must be exact. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
new_pathYesDestination path (exact, must not already exist)
old_pathYesCurrent file path (exact path required)
update_linksNoUpdate wikilinks in other files pointing to this note (default: true)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states the automatic wikilink update side effect, the exact-path requirement, and the markdown link output format. It does not detail error conditions or reversibility, but covers the most impactful behaviors.

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

Conciseness5/5

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

The description is tightly written, with each sentence serving a distinct purpose: the action, the side effect, the path constraint, and the output format usage. It wastes no words and front-loads the primary function.

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

Completeness4/5

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

Given there is no output schema, the description effectively explains the output shape (markdown links) and the side effect of link updating. It does not cover error scenarios (e.g., missing old_path) or the return value for a successful move, but overall it provides sufficient context for an agent to use the tool correctly.

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

Parameters4/5

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

The schema covers all three parameters (100% coverage), so the baseline is 3. The description adds value by reinforcing the exactness of both paths and providing crucial guidance on how to interpret and pass path values (using only the bracket text, not the full markdown link) to other tools.

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

Purpose5/5

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

The description clearly states the tool's function: 'Move or rename a markdown file within the vault.' It also specifies the key side effect of automatically updating wikilinks, which distinguishes it from sibling tools like vault_write or vault_edit.

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

Usage Guidelines4/5

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

The description provides clear operational context: paths must be exact, and it explains how to handle the output path format when passing paths to other vault tools. However, it does not explicitly mention when to use this tool instead of alternatives or provide exclusion criteria.

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

vault_neighborhoodA

Explore the graph neighborhood around a note by traversing wikilinks. Returns notes grouped by hop distance from the starting note, with frontmatter metadata for each node. Useful for understanding clusters, finding related context, and discovering connections. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the starting note (supports short names, e.g. 'devlog')
depthNoTraversal depth — how many hops to follow (default: 2, max: 5)
directionNoLink direction to follow (default: both)both
semantic_limitNoMax semantic results to include (default: 5)
include_semanticNoAppend semantically related but unlinked notes (requires VAULT_PKM_OPENAI_KEY, default: false)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It clearly states the output structure (grouped by hop distance, frontmatter metadata) and a significant output formatting quirk (paths as markdown links with obsidian:// URLs). This adds substantial behavioral context beyond the schema, though it doesn't cover failure modes or performance characteristics.

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

Conciseness5/5

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

The description is a single, well-organized paragraph of three sentences, each serving a distinct purpose: stating what the tool does, articulating its value, and providing essential formatting usage. No filler, and the critical markdown-link caveat earns its place.

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

Completeness4/5

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

Given no output schema, the description adequately explains the return format (grouped by hop distance, with frontmatter metadata) and the special link formatting. It also includes use-case context and integration guidance for other vault tools. Minor gaps include not specifying what happens for missing paths or very large result sets, but that's beyond the essential context for a read-only exploration tool.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already well-documented in the input schema. The description adds no further parameter-specific detail; the only related note (passing bracket text to other tools) concerns output handling rather than input semantics. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Explore the graph neighborhood around a note by traversing wikilinks.' It further differentiates the tool by stating output is 'grouped by hop distance from the starting note' with frontmatter metadata, which distinguishes it from sibling tools like vault_links or vault_search.

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

Usage Guidelines4/5

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

Provides explicit use-case guidance: 'Useful for understanding clusters, finding related context, and discovering connections.' It also includes a critical practical instruction about preserving markdown link formatting when relaying paths to users and passing only bracket text to other tools. However, it doesn't explicitly name when not to use this tool or compare directly with sibling alternatives.

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

vault_peekA

Inspect a file's metadata and structure without reading full content. Returns file size, frontmatter, heading outline with approximate section sizes, and a brief preview. Use this to plan which sections to read from large files. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to vault root (supports fuzzy resolution: 'devlog' resolves to full path)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and discloses return values (size, frontmatter, headings, preview), the non-reading behavior, and the markdown link format for paths. It omits edge-case behaviors but provides solid transparency for a read-only inspection tool.

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

Conciseness5/5

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

The description is compact and front-loaded, with the core purpose in the first sentence. It efficiently combines return value details, usage guidance, and path formatting instructions with no wasted words.

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

Completeness5/5

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

Given the simple schema, no annotations, and no output schema, the description fully covers what the tool does, what it returns, when to use it, and how to handle its output paths. This is complete enough for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The input schema already describes the path parameter with fuzzy resolution (100% coverage), so the description adds no direct parameter details. The path formatting instruction is about output handling rather than the input parameter, keeping this at the baseline.

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

Purpose5/5

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

The description clearly states that the tool inspects a file's metadata and structure without reading full content, and enumerates specific outputs (file size, frontmatter, heading outline, preview). This distinguishes it from vault_read, which reads full content.

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

Usage Guidelines4/5

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

Explicitly instructs to use this tool to plan which sections to read from large files, and the phrase 'without reading full content' implies an alternative to vault_read. However, it does not explicitly name alternatives or state when not to use this tool.

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

vault_queryA

Query notes by YAML frontmatter metadata (type, status, tags, dates, custom fields, sorting). Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoALL tags must be present (case-insensitive)
typeNoFilter by note type (exact match)
limitNoMax results to return
folderNoLimit search to this folder (supports partial names, e.g. 'MyApp')
statusNoFilter by status (exact match)
sort_byNoSort results by this frontmatter field. Smart ordering: priority uses rank (urgent>high>normal>low), dates sort chronologically, others alphabetically. Nulls sort last.
tags_anyNoANY tag must be present (case-insensitive)
sort_orderNoSort direction (default: asc)asc
created_afterNoNotes created on or after this date (YYYY-MM-DD)
custom_fieldsNoFilter by arbitrary frontmatter fields (exact match). Use null to match missing fields.
created_beforeNoNotes created on or before this date (YYYY-MM-DD)

TDQS

A4.2/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden. It discloses a key behavioral trait: output paths are markdown links with instructions on how to handle them. This goes beyond the schema, though it does not explicitly state read-only behavior (implied by 'Query').

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

Conciseness5/5

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

Three sentences: the first states the purpose, the second and third explain a unique output format and usage rule. No wasted words, information is front-loaded.

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

Completeness4/5

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

With no output schema, the description partially explains return values by revealing the link format and how to use paths. It lacks an explicit statement of full return structure, but for a query tool, this is sufficient given the detailed input schema and the tool's simple output concept.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond listing categories already in the schema. The link-handling note is about output, not parameters, so no extra semantic value for params is provided.

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

Purpose5/5

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

The description clearly states the tool's action and resource: 'Query notes by YAML frontmatter metadata', listing key filter fields. This differentiates it from siblings like vault_search (full-text) by emphasizing metadata-based querying.

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

Usage Guidelines4/5

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

The description implies usage for metadata-based queries, which provides clear context. It also gives specific handling instructions for output paths (preserve link form, pass bracket text to other tools), but does not explicitly exclude alternatives or mention when to use a different tool.

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

vault_readA

Read the contents of a markdown file from the vault. Supports pagination: read a single section by heading, last N lines, last N heading-level sections, chunk number, or line range. Files exceeding ~80k characters auto-redirect to peek data (file structure/outline) unless a pagination param or force=true is specified. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to vault root (supports short names, e.g. 'devlog')
tailNoReturn the last N lines of the file. Frontmatter is always prepended.
chunkNoRead a specific chunk of the file (1-indexed). Each chunk is ~80k characters. Use vault_peek to see total chunks.
forceNoBypass auto-redirect for large files. WARNING: only use when full content is essential, as large files degrade model performance. Hard-capped at ~400k chars (~100k tokens).
linesNoRead a range of lines from the file (1-indexed, inclusive).
headingNoRead only the section under this heading (exact match, case-sensitive). Returns heading line + content until next same-or-higher-level heading.
section_levelNoHeading level for tail_sections (1=`#`, 2=`##`, etc). Default: 2.
tail_sectionsNoReturn the last N sections at the specified heading level. Frontmatter is always prepended.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and delivers. It discloses auto-redirect behavior for large files, a hard cap of ~400k chars, performance degradation warnings for force, and the markdown-link output format. It also instructs the agent on how to transform paths before passing to other tools, adding operational nuance beyond a simple read.

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

Conciseness5/5

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

The description is a compact, front-loaded block of four sentences. Each sentence earns its place: purpose, pagination capabilities, auto-redirect behavior, and path-link handling. No filler or redundant restatement of the schema.

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

Completeness5/5

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

Despite having no output schema, the description explains what data is returned (file contents or peek structure on redirect), how paths are formatted, and the performance envelope. The auto-redirect resolution and force cap address edge cases, making the description complete for a tool of this complexity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds semantic grouping by summarizing the pagination modes (heading, tail, sections, chunks, line range) and links them to the auto-redirect threshold. The force parameter's warning and the chunk param's reference to vault_peek go beyond the raw schema, enriching parameter understanding.

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

Purpose5/5

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

The description opens with 'Read the contents of a markdown file from the vault', a specific verb+resource pairing that clearly distinguishes the tool from siblings like vault_peek, vault_search, or vault_write. It further elaborates on pagination modes, reinforcing what the tool does and its scope.

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

Usage Guidelines5/5

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

Guidance is explicit: large files auto-redirect to peek data unless a pagination param or force=true, and force is discouraged unless essential. It names vault_peek as an alternative for browsing chunks and outlines when to use pagination params, giving clear when-to-use vs when-not-to-use context.

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

vault_recentA

Get recently modified files. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of files to return
folderNoOptional: limit to this folder (supports partial names, e.g. 'MyApp')

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavior disclosure. It usefully reveals that output paths are markdown links with obsidian:// URIs and instructs how to handle them. However, it does not clarify what 'recent' means or mention ordering, but the disclosed link behavior is significant.

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

Conciseness4/5

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

The description is three sentences: the first states the purpose, and the next two provide critical output-handling instructions. Every sentence contributes value, though the guidance about markdown links could be more compact.

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

Completeness3/5

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

There is no output schema, so the description should explain return values. It explains the path format but omits what other fields are returned, how files are ordered, or how 'recent' is defined. This is a notable gap for a list tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both 'limit' and 'folder' clearly. The description adds no extra meaning about these parameters, so it meets the baseline but does not exceed it.

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

Purpose5/5

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

The description starts with 'Get recently modified files', which clearly states the verb and resource. The 'recently modified' qualifier distinguishes it from sibling tools like vault_list or vault_search, even though it doesn't explicitly name them.

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

Usage Guidelines3/5

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

The description gives clear context that this tool is for retrieving recently modified files, but it does not explicitly state when to use it over alternatives like vault_activity or vault_list. There are no exclusions or alternate tool references, so 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.

vault_tagsA

Discover all tags used across the vault with per-note occurrence counts. Useful for exploring tag conventions, finding hierarchical tag trees, and understanding vault organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoOptional: limit to this folder (supports partial names, e.g. 'MyApp')
patternNoGlob-like filter: 'pkm/*' (hierarchical), '*research*' (substring), 'dev*' (prefix)
include_inlineNoAlso parse inline #tags from note bodies (default: false, frontmatter only)

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description bears the full burden of behavioral disclosure. It only states 'Discover' which implies a read operation, but it doesn't explicitly confirm the tool is non-mutating, nor does it describe the return format or potential performance implications, leaving gaps for the agent.

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

Conciseness5/5

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

The two-sentence description is compact and front-loaded with the main purpose, followed by usage context. Every sentence adds value with no redundancy.

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

Completeness3/5

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

For a simple read-only tool with all-optional parameters and no output schema, the description gives the core function and use cases. However, without annotations or output schema, it leaves out specifics about the returned structure and safety profile, making it adequate but not fully complete.

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

Parameters3/5

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

The schema provides 100% coverage with detailed descriptions for all three parameters (folder, pattern, include_inline), so the baseline is 3. The tool description itself adds no extra parameter semantics, staying at that baseline.

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

Purpose5/5

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

The description clearly states the tool discovers all tags used across the vault with per-note occurrence counts, using a specific verb and resource. This distinguishes it from sibling tools like vault_search or vault_list, which address other facets of vault access.

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

Usage Guidelines4/5

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

The description includes 'Useful for exploring tag conventions, finding hierarchical tag trees, and understanding vault organization,' which gives clear context for when to use it. However, it does not mention any alternatives or exclusions for when this tool should not be used, so it is slightly below the top score.

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

vault_trashA

Soft-delete a file by moving it to .trash/ (Obsidian convention). Reports files with broken incoming links as warnings. Use vault_move to relocate files instead. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file to trash (exact path required)

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It discloses the key behavior (soft-delete via moving to .trash/), the side effect of reporting broken incoming links as warnings, and the output format (markdown links with obsidian://). It also provides crucial handling instructions for output paths, which goes beyond basic expectation.

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

Conciseness5/5

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

The description is three sentences, each serving a distinct purpose: what it does, the alternative, and output formatting instructions. It is front-loaded with the main action and contains no fluff or redundant information.

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

Completeness4/5

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

The description is quite complete for a simple one-parameter tool with no output schema. It covers the operation, the alternative, the output format, and path handling. A minor gap is the lack of explicit return value details (e.g., success message or structure of warnings), but the 'Reports files with broken incoming links as warnings' partially addresses output. Overall, it provides sufficient context for correct use.

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

Parameters4/5

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

The input schema already covers the path parameter with a description, so the baseline is 3. The description adds meaningful value by clarifying that paths in output are formatted as markdown links, and instructs to pass only the bracket text (e.g., '01-Projects/Foo/note.md') to other tools' path arguments. This is essential for correct cross-tool usage and thus elevates the score.

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

Purpose5/5

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

The description clearly states the tool's function: 'Soft-delete a file by moving it to .trash/ (Obsidian convention).' It uses a specific verb and resource, and also distinguishes itself from the sibling tool vault_move by explicitly recommending it for relocation. The mention of broken incoming link warnings adds further specificity.

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

Usage Guidelines5/5

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

The description gives explicit guidance on when to use an alternative: 'Use vault_move to relocate files instead.' It also clarifies the output format and how to handle paths when interacting with other tools, providing context for when to use this tool for soft-deletion and how to avoid misusing the returned path format.

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

vault_update_frontmatterA

Update YAML frontmatter fields in an existing note. Parses existing frontmatter, updates specified fields, preserves everything else. Set a field to null to remove it. Protected fields (type, created, tags) cannot be removed. Field values are validated against the note's type (e.g. task status must be: pending, active, done, cancelled; task priority must be: low, normal, high, urgent). Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to vault root (exact path required)
fieldsYesFields to update. Set value to null to remove a field. Arrays (like tags) are replaced wholesale.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It explains null-removal semantics, protected fields, validation rules (with concrete examples), and the markdown link output format, giving the agent comprehensive insight into expected behavior.

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

Conciseness5/5

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

The description is dense but every sentence earns its place, covering purpose, edge cases, validation, and output formatting. It is well-structured and front-loaded with the primary action.

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

Completeness5/5

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

For a tool with only two parameters and no output schema, the description is remarkably complete. It addresses behavioral edge cases, parameter constraints, and cross-tool usage, leaving little ambiguity for an agent.

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

Parameters4/5

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

The input schema already has 100% coverage for both parameters. The description adds meaningful context for the 'fields' parameter by specifying protected fields and validation against note type, going beyond the schema's basic null-removal and array-replacement notes.

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

Purpose5/5

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

The description explicitly states 'Update YAML frontmatter fields in an existing note' with a specific verb and resource. It clearly distinguishes from sibling tools like vault_edit or vault_write by focusing solely on frontmatter and detailing its behavior (parses, updates specified fields, preserves everything else).

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

Usage Guidelines4/5

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

The description implies the tool's specific use case for updating frontmatter, but it does not explicitly state when to use it over alternatives or provide exclusions. It does include cross-tool guidance on how to pass paths to other vault tools, which offers contextual usage hints.

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

vault_writeA

Create a new note from a template. Notes must be created from templates to ensure proper frontmatter.

Available templates: (No templates found - add .md files to 05-Templates/)

Built-in variables (auto-substituted):

  • <% tp.date.now("YYYY-MM-DD") %> - Current date

  • <% tp.file.title %> - Derived from output path filename

Required: frontmatter.tags - provide at least one tag for the note. Optional: frontmatter.status, frontmatter.priority, frontmatter.project, frontmatter.deciders, frontmatter.due, frontmatter.source (depending on template type). Pass custom <%...%> variables via the 'variables' parameter. Paths in this tool's output are formatted as markdown links [vault-relative-path.md](obsidian://...) so users can Cmd/Ctrl-click to open in Obsidian. Preserve the link form when relaying paths to the user; pass only the bracket text (e.g. 01-Projects/Foo/note.md) to other vault tools' path arguments, never the full markdown link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesOutput path relative to vault root
templateYesTemplate name (filename without .md from 05-Templates/)
variablesNoCustom variables for <%...%> patterns in body (key-value string pairs)
createDirsNoCreate parent directories if they don't exist
frontmatterNoFrontmatter fields to set (e.g., {tags: ['tag1', 'tag2'], status: 'active'})

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds useful behavioral context: template requirement, built-in variables, required frontmatter, and the markdown-link path format for output. However, it omits key behavioral traits such as whether it overwrites existing files, error handling, or the exact return value, which are important for a create/mutation tool.

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

Conciseness4/5

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

The description is front-loaded with the primary purpose and then organized into clear sections (templates, variables, requirements, path formatting). It is relatively long but each section earns its place by conveying necessary usage details. The 'No templates found' note is somewhat environment-specific but does not detract much.

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

Completeness3/5

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

With no output schema and no annotations, the description needs to explain what the tool returns and its failure modes. It partially does this by describing the output path format, but it does not mention overwrite behavior, success/failure indicators, or how to interpret the response. This leaves important gaps for a tool with 5 parameters and nested objects.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters well. The description adds some extra meaning by explaining built-in variable substitution and reiterating that frontmatter.tags is required, but it does not significantly expand on the schema's parameter descriptions. The 'variables' parameter description in the schema is already adequate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Create a new note from a template.' This clearly distinguishes it from sibling tools like vault_edit and vault_append, which modify or extend existing notes. The template requirement is explicit and ties directly to the tool's core function.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: to create new notes and to ensure proper frontmatter via templates. It also explains required tags and variable handling. However, it does not explicitly name alternatives or state when not to use this tool (e.g., for editing existing notes, use vault_edit).

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.

  1. 18 tool updatesv3.10.1
    • First observedvault_activity
    • First observedvault_add_links
    • First observedvault_append
    • First observedvault_edit
    • First observedvault_link_health
    • First observedvault_links
    • First observedvault_list
    • First observedvault_move
    • First observedvault_neighborhood
    • First observedvault_peek
    • First observedvault_query
    • First observedvault_read
    • First observedvault_recent
    • First observedvault_search
    • First observedvault_tags
    • First observedvault_trash
    • First observedvault_update_frontmatter
    • First observedvault_write

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: read vs. peek vs. search vs. list; write vs. append vs. edit vs. update_frontmatter; links vs. neighborhood vs. link_health. There is no overlapping or confusing tool.

Naming Consistency4/5

All tools use the 'vault_' prefix with snake_case names. Some are verb-noun (vault_read, vault_write) while others are noun-like (vault_tags, vault_neighborhood), but the pattern is predictable and consistent in style.

Tool Count4/5

18 tools is slightly heavy but reasonable for a PKM server covering reading, writing, editing, linking, searching, querying, and vault maintenance. Each tool earns its place, but the count is at the upper edge of the ideal range.

Completeness5/5

The tool surface provides complete coverage of note lifecycle (create, read, update, delete), link management, metadata querying, and vault inspection. No obvious dead ends or missing critical operations for the domain.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Built on Obsidian Vault, this MCP server integrates with Claude Code to provide personal knowledge management including note saving, full-text search, code graph extraction, and context resumption.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives Claude AI direct access to your Obsidian vault, enabling natural language search, note creation, file management, and automated workflows.
    5,784
    9
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A Python MCP server that gives Claude long-term memory and full context of everything by connecting to an Obsidian vault, enabling context retrieval, note management, and automatic graph linking.
    -

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AdrianV101/obsidian-pkm-plugin'

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