Obsidian MCP Server
Enables interaction with an Obsidian vault through direct filesystem access, providing tools for reading, creating, updating, and searching notes, managing tags and links, analyzing images, and performing bulk operations.
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 MCP ServerFind all notes tagged with #research and summarize the key findings."
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 MCP Server
š Version 2.0 Released!
Major improvements in v2.0:
ā” 5x faster searches with persistent SQLite indexing
š¼ļø Image support - View and analyze images from your vault
š Powerful regex search - Find complex patterns in your notes
šļø Property search - Query by frontmatter properties (status, priority, etc.)
š One-command setup - Auto-configure Claude Desktop with
uvx --from obsidian-mcp obsidian-mcp-configure --vault-path /path/to/your/vaultš Direct filesystem access - No plugins required, works offline
š¦ 90% less memory usage - Efficient streaming architecture
A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with your Obsidian vault. This server provides tools for reading, creating, searching, and managing notes in Obsidian through direct filesystem access with blazing-fast performance thanks to intelligent indexing.
Related MCP server: Obsidian MCP Server
Features
š Read & write notes - Full access to your Obsidian vault with automatic overwrite protection
š Lightning-fast search - Find notes instantly by content, tags, properties, or modification date with persistent indexing
š¼ļø Image analysis - View and analyze images embedded in notes or stored in your vault
š Regex power search - Use regular expressions to find code patterns, URLs, or complex text structures
šļø Property search - Query notes by frontmatter properties with operators (=, >, <, contains, exists)
š Browse vault - List and navigate your notes and folders by directory
š·ļø Tag management - Add, remove, and organize tags (supports hierarchical tags, frontmatter, and inline tags)
š Link management - Find backlinks, analyze outgoing links, and identify broken links
āļø Smart rename - Rename notes with automatic link updates throughout your vault
š Note insights - Get statistics like word count and link analysis
šÆ AI-optimized - Clear error messages and smart defaults for better AI interactions
š Secure - Direct filesystem access with path validation
ā” Performance optimized - Persistent SQLite index, concurrent operations, and streaming for large vaults
š Bulk operations - Create folder hierarchies and move entire folders with all their contents
Prerequisites
Obsidian vault on your local filesystem
Python 3.10+ installed on your system
Node.js (optional, for running MCP Inspector)
Installation
Quick Install with Auto-Configuration (Claude Desktop)
New in v2.0! Configure Claude Desktop automatically with one command:
# Install and configure in one step
uvx --from obsidian-mcp obsidian-mcp-configure --vault-path /path/to/your/vaultThis command will:
ā Automatically find your Claude Desktop config
ā Add the Obsidian MCP server
ā Migrate old REST API configs to v2.0
ā Create a backup of your existing config
ā Work on macOS, Windows, and Linux
Manual Configuration
Locate your Obsidian vault:
Find the path to your Obsidian vault on your filesystem
Example:
/Users/yourname/Documents/MyVaultorC:\Users\YourName\Documents\MyVault
Configure your AI tool:
Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "obsidian": { "command": "uvx", "args": ["obsidian-mcp"], "env": { "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault" } } } }Add to your Cursor settings:
Project-specific:
.cursor/mcp.jsonin your project directoryGlobal:
~/.cursor/mcp.jsonin your home directory
{ "mcpServers": { "obsidian": { "command": "uvx", "args": ["obsidian-mcp"], "env": { "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault" } } } }Then: Open Settings ā Cursor Settings ā Enable MCP
Edit your Windsurf config file:
Location:
~/.codeium/windsurf/mcp_config.json
{ "mcpServers": { "obsidian": { "command": "uvx", "args": ["obsidian-mcp"], "env": { "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault" } } } }Then: Open Windsurf Settings ā Advanced Settings ā Cascade ā Add Server ā Refresh
Restart your AI tool to load the new configuration.
That's it! The server will now be available in your AI tool with access to your Obsidian vault.
Note: This uses
uvxwhich automatically downloads and runs the server in an isolated environment. Most users won't need to install anything else. If you don't haveuvinstalled, you can also usepipx install obsidian-mcpand change the command to"obsidian-mcp"in the config.
Try It Out
Here are some example prompts to get started:
"Show me all notes I modified this week"
"Create a new daily note for today with my meeting agenda"
"Search for all notes about project planning"
"Read my Ideas/startup.md note"
Development Installation
Clone the repository:
git clone https://github.com/natestrong/obsidian-mcp cd obsidian-mcpSet up Python environment:
# Using pyenv (recommended) pyenv virtualenv 3.12.9 obsidian-mcp pyenv activate obsidian-mcp # Or using venv python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtConfigure environment variables:
export OBSIDIAN_VAULT_PATH="/path/to/your/obsidian/vault"Run the server:
python -m obsidian_mcp.serverAdd to Claude Desktop (for development):
Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "obsidian": { "command": "/path/to/python", "args": ["-m", "obsidian_mcp.server"], "cwd": "/path/to/obsidian-mcp", "env": { "PYTHONPATH": "/path/to/obsidian-mcp", "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault" } } } }
Project Structure
obsidian-mcp/
āāā obsidian_mcp/
ā āāā server.py # Main entry point with rich parameter schemas
ā āāā tools/ # Tool implementations
ā ā āāā note_management.py # CRUD operations
ā ā āāā search_discovery.py # Search and navigation
ā ā āāā organization.py # Tags, moves, metadata
ā ā āāā link_management.py # Backlinks, outgoing links, broken links
ā āāā models/ # Pydantic models for validation
ā ā āāā obsidian.py # Note, SearchResult, VaultItem models
ā āāā utils/ # Shared utilities
ā ā āāā filesystem.py # Direct filesystem access
ā ā āāā validators.py # Path validation, sanitization
ā ā āāā validation.py # Comprehensive parameter validation
ā āāā constants.py # Constants and error messages
āāā tests/
ā āāā run_tests.py # Test runner
ā āāā test_filesystem_integration.py # Integration tests
āāā docs/ # Additional documentation
āāā requirements.txt # Python dependencies
āāā CLAUDE.md # Instructions for Claude Code
āāā README.mdAvailable Tools
Note Management
read_note
Read the content and metadata of a specific note.
Parameters:
path: Path to the note (e.g., "Daily/2024-01-15.md")
Returns:
{
"path": "Daily/2024-01-15.md",
"content": "# Daily Note\n\nContent here...",
"metadata": {
"tags": ["daily", "journal"],
"aliases": [],
"frontmatter": {}
}
}create_note
Create a new note or update an existing one.
Parameters:
path: Path where the note should be createdcontent: Markdown content of the note (consider adding tags for organization)overwrite(default:false): Whether to overwrite existing notes
Best Practices:
Add relevant tags when creating notes to maintain organization
Use
list_tagsto see existing tags and maintain consistencyTags can be added as inline hashtags (
#tag) or in frontmatter
update_note
Update the content of an existing note.
ā ļø IMPORTANT: By default, this tool REPLACES the entire note content. Always read the note first if you need to preserve existing content.
Parameters:
path: Path to the note to updatecontent: New markdown content (REPLACES existing content unless using append)create_if_not_exists(default:false): Create if doesn't existmerge_strategy(default:"replace"): How to handle content"replace": Overwrites entire note content (default)"append": Adds new content to the end of existing content
Safe Update Pattern:
ALWAYS read first to preserve content
Modify the content as needed
Update with the complete new content
Or use append mode to add content to the end
edit_note_section
Edit a specific section of a note identified by a markdown heading.
Parameters:
path: Path to the note to editsection_identifier: Markdown heading that identifies the section (e.g., "## Tasks", "### Status")content: Content to insert, replace, or appendoperation(default:"insert_after"): How to edit the section"insert_after": Add content after the section heading"insert_before": Add content before the section heading"replace": Replace entire section including heading"append_to_section": Add content at the end of the section
create_if_missing(default:false): Create section if it doesn't exist
Example usage:
# Add tasks to a specific section
await edit_note_section(
"Daily/2024-01-15.md",
"## Tasks",
"- [ ] Review PR\n- [ ] Update docs",
operation="append_to_section"
)
# Update a status section
await edit_note_section(
"Projects/Website.md",
"### Current Status",
"### Current Status\n\nPhase 2 completed!",
operation="replace"
)Use cases:
Adding items to task lists without rewriting the whole note
Updating status sections in project notes
Building up notes incrementally by section
Inserting content at precise locations
delete_note
Delete a note from the vault.
Parameters:
path: Path to the note to delete
Search and Discovery
search_notes
Search for notes containing specific text or tags.
Parameters:
query: Search query (supports Obsidian search syntax)context_length(default:100): Number of characters to show around matchesmax_results(default:50): Maximum number of results to return (1-500)
Search Syntax:
Text search:
"machine learning"Tag search:
tag:projectortag:#projectHierarchical tags:
tag:project/web(exact match)Parent search:
tag:project(finds project, project/web, project/mobile)Child search:
tag:web(finds project/web, design/web)
Path search:
path:Daily/Property search:
property:status:activeorproperty:priority:>2Combined:
tag:urgent TODO
Returns:
{
"results": [...], // Array of matched notes
"total_count": 150, // Total matches found
"limit": 50, // max_results used
"truncated": true // More results available
}Property Search Examples:
property:status:active- Find notes where status = "active"property:priority:>2- Find notes where priority > 2property:author:*john*- Find notes where author contains "john"property:deadline:*- Find notes that have a deadline propertyproperty:rating:>=4- Find notes where rating >= 4property:tags:project- Find notes with "project" in their tags arrayproperty:due_date:<2024-12-31- Find notes with due dates before Dec 31, 2024
search_by_date
Search for notes by creation or modification date.
Parameters:
date_type(default:"modified"): Either "created" or "modified"days_ago(default:7): Number of days to look backoperator(default:"within"): Either "within" (last N days) or "exactly" (exactly N days ago)
Returns:
{
"query": "Notes modified within last 7 days",
"count": 15,
"results": [
{
"path": "Daily/2024-01-15.md",
"date": "2024-01-15T10:30:00",
"days_ago": 1
}
]
}Example usage:
"Show me all notes modified today" ā
search_by_date("modified", 0, "within")"Show me all notes modified this week" ā
search_by_date("modified", 7, "within")"Find notes created in the last 30 days" ā
search_by_date("created", 30, "within")"What notes were modified exactly 2 days ago?" ā
search_by_date("modified", 2, "exactly")
search_by_regex
Search for notes using regular expressions for advanced pattern matching.
Parameters:
pattern: Regular expression pattern to search forflags(optional): List of regex flags ("ignorecase", "multiline", "dotall")context_length(default:100): Characters to show around matchesmax_results(default:50): Maximum number of results
When to use:
Finding code patterns (functions, imports, syntax)
Searching for structured data
Complex text patterns that simple search can't handle
Common patterns:
# Find Python imports
"(import|from)\\s+fastmcp"
# Find function definitions
"def\\s+\\w+\\s*\\([^)]*\\):"
# Find TODO comments
"(TODO|FIXME)\\s*:?\\s*(.+)"
# Find URLs
"https?://[^\\s)>]+"
# Find code blocks
"```python([^`]+)```"Returns:
{
"pattern": "def\\s+search\\w*",
"count": 2,
"results": [
{
"path": "code/utils.py",
"match_count": 3,
"matches": [
{
"match": "def search_notes",
"line": 42,
"context": "...async def search_notes(query)..."
}
]
}
]
}search_by_property
Search for notes by their frontmatter property values with advanced filtering.
Parameters:
property_name: Name of the property to search forvalue(optional): Value to compare againstoperator(default:"="): Comparison operatorcontext_length(default:100): Characters of note content to include
Operators:
"=": Exact match (case-insensitive)"!=": Not equal">","<",">=","<=": Numeric/date comparisons"contains": Property value contains the search value"exists": Property exists (value parameter ignored)
Supported Property Types:
Text/String: Standard text comparison
Numbers: Automatic numeric comparison for operators
Dates: ISO format (YYYY-MM-DD) with intelligent date parsing
Arrays/Lists: Searches within array items, comparisons use array length
Legacy properties: Automatically handles
tagātags,aliasāaliasesmigrations
Returns:
{
"property": "status",
"operator": "=",
"value": "active",
"count": 5,
"results": [
{
"path": "Projects/Website.md",
"matches": ["status = active"],
"context": "status: active\n\n# Website Redesign Project...",
"property_value": "active"
}
]
}Example usage:
Find all active projects:
search_by_property("status", "active")Find high priority items:
search_by_property("priority", "2", ">")Find notes with deadlines:
search_by_property("deadline", operator="exists")Find notes by partial author:
search_by_property("author", "john", "contains")
list_notes
List notes in your vault with optional recursive traversal.
Parameters:
directory(optional): Specific directory to list (e.g., "Daily", "Projects")recursive(default:true): List all notes recursively
Returns:
{
"directory": "Daily",
"recursive": true,
"count": 365,
"notes": [
{"path": "Daily/2024-01-01.md", "name": "2024-01-01.md"},
{"path": "Daily/2024-01-02.md", "name": "2024-01-02.md"}
]
}list_folders
List folders in your vault with optional recursive traversal.
Parameters:
directory(optional): Specific directory to list fromrecursive(default:true): Include all nested subfolders
Returns:
{
"directory": "Projects",
"recursive": true,
"count": 12,
"folders": [
{"path": "Projects/Active", "name": "Active"},
{"path": "Projects/Archive", "name": "Archive"},
{"path": "Projects/Ideas", "name": "Ideas"}
]
}Organization
create_folder
Create a new folder in the vault, including all parent folders in the path.
Parameters:
folder_path: Path of the folder to create (e.g., "Research/Studies/2024")create_placeholder(default:true): Whether to create a placeholder file
Returns:
{
"folder": "Research/Studies/2024",
"created": true,
"placeholder_file": "Research/Studies/2024/.gitkeep",
"folders_created": ["Research", "Research/Studies", "Research/Studies/2024"]
}Note: This tool will create all necessary parent folders. For example, if "Research" exists but "Studies" doesn't, it will create both "Studies" and "2024".
move_note
Move a note to a new location, optionally with a new name.
Parameters:
source_path: Current path of the notedestination_path: New path for the note (can include new filename)update_links(default:true): Update links if filename changes
Features:
Can move to a different folder:
move_note("Inbox/Note.md", "Archive/Note.md")Can move AND rename:
move_note("Inbox/Old.md", "Archive/New.md")Automatically detects if filename changes and updates all wiki-style links
No link updates needed for simple folder moves (Obsidian links work by name)
Preserves link aliases when updating
Returns:
{
"success": true,
"source": "Inbox/Quick Note.md",
"destination": "Projects/Project Plan.md",
"renamed": true,
"details": {
"links_updated": 5,
"notes_updated": 3
}
}rename_note
Rename a note and automatically update all references to it throughout your vault.
Parameters:
old_path: Current path of the notenew_path: New path for the note (must be in same directory)update_links(default:true): Automatically update all wiki-style links
Returns:
{
"success": true,
"old_path": "Projects/Old Name.md",
"new_path": "Projects/New Name.md",
"operation": "renamed",
"details": {
"links_updated": 12,
"notes_updated": 8,
"link_update_details": [
{"note": "Daily/2024-01-15.md", "updates": 2},
{"note": "Ideas/Related.md", "updates": 1}
]
}
}Features:
Automatically finds and updates all
[[wiki-style links]]to the renamed notePreserves link aliases (e.g.,
[[Old Name|Display Text]]ā[[New Name|Display Text]])Handles various link formats:
[[Note]],[[Note.md]],[[Note|Alias]]Shows which notes were updated for transparency
Can only rename within the same directory (use
move_noteto change directories)
move_folder
Move an entire folder and all its contents to a new location.
Parameters:
source_folder: Current folder path (e.g., "Projects/Old")destination_folder: New folder path (e.g., "Archive/Projects/Old")update_links(default:true): Update links in other notes (future enhancement)
Returns:
{
"source": "Projects/Completed",
"destination": "Archive/2024/Projects",
"moved": true,
"notes_moved": 15,
"folders_moved": 3,
"links_updated": 0
}add_tags
Add tags to a note's frontmatter.
Parameters:
path: Path to the notetags: List of tags to add (without # prefix)
Supports hierarchical tags:
Simple tags:
["project", "urgent"]Hierarchical tags:
["project/web", "work/meetings/standup"]Mixed:
["urgent", "project/mobile", "status/active"]
update_tags
Update tags on a note - either replace all tags or merge with existing.
Parameters:
path: Path to the notetags: New tags to set (without # prefix)merge(default:false): If true, adds to existing tags. If false, replaces all tags
Perfect for AI workflows:
User: "Tell me what this note is about and add appropriate tags"
AI: [reads note] "This note is about machine learning research..."
AI: [uses update_tags to set tags: ["ai", "research", "neural-networks"]]remove_tags
Remove tags from a note's frontmatter.
Parameters:
path: Path to the notetags: List of tags to remove
batch_update_properties
Batch update properties across multiple notes.
Parameters:
search_criteria: How to find notes - must include one of:query: Search query string (e.g., "tag:project status:active")folder: Folder path with optionalrecursiveflagfiles: Explicit list of file paths
property_updates(optional): Properties to add/update in frontmatterproperties_to_remove(optional): List of property names to removeadd_tags(optional): Tags to add (additive)remove_tags(optional): Tags to removeremove_inline_tags(default:false): Also remove tags from note body
Examples:
# Archive completed projects
{
"search_criteria": {"query": "tag:project status:completed"},
"property_updates": {"archived": true, "year": 2024},
"add_tags": ["archived"]
}
# Remove draft tags everywhere
{
"search_criteria": {"query": "tag:draft"},
"remove_tags": ["draft"],
"remove_inline_tags": true
}Returns:
{
"total_notes": 10,
"updated": 8,
"failed": 2,
"details": [...],
"errors": [...]
}get_note_info
Get metadata and statistics about a note without retrieving its full content.
Parameters:
path: Path to the note
Returns:
{
"path": "Projects/AI Research.md",
"exists": true,
"metadata": {
"tags": ["ai", "research"],
"aliases": [],
"frontmatter": {}
},
"stats": {
"size_bytes": 4523,
"word_count": 823,
"link_count": 12
}
}Image Management
read_image
View an image from your vault. Images are automatically resized to a maximum width of 800px for optimal display in Claude Desktop.
Parameters:
path: Path to the image file (e.g., "Attachments/screenshot.png")
Returns:
A resized image object that can be viewed directly in Claude Desktop
Supported formats:
PNG, JPG/JPEG, GIF, BMP, WebP
view_note_images
Extract and view all images embedded in a note.
Parameters:
path: Path to the note containing images
Returns:
{
"note_path": "Projects/Design Mockups.md",
"image_count": 3,
"images": [
{
"path": "Attachments/mockup1.png",
"alt_text": "Homepage design",
"image": "<FastMCP Image object>"
}
]
}Use cases:
Analyze screenshots and diagrams in your notes
Review design mockups and visual documentation
Extract visual information for AI analysis
list_tags
List all unique tags used across your vault with usage statistics.
Parameters:
include_counts(default:true): Include usage count for each tagsort_by(default:"name"): Sort by "name" or "count"include_files(default:false): Include list of file paths that contain each tag
Returns:
{
"items": [
{
"name": "project",
"count": 42,
"files": ["Projects/Web.md", "Projects/Mobile.md"] // if include_files=true
},
{"name": "meeting", "count": 38},
{"name": "idea", "count": 15}
],
"total": 25,
"scope": {"include_counts": true, "sort_by": "name", "include_files": false}
}Note: Hierarchical tags are listed as separate entries, showing both parent and full paths.
Performance Notes:
Fast for small vaults (<1000 notes)
May take several seconds for large vaults
Uses concurrent batching for optimization
Link Management
ā” Performance Note: Link management tools have been heavily optimized in v1.1.5:
84x faster link validity checking
96x faster broken link detection
2x faster backlink searches
Includes automatic caching and batch processing
find_orphaned_notes
Find notes that may need organization or cleanup based on various criteria.
Parameters:
orphan_type(default:"no_backlinks"): Criteria for identifying orphaned notes"no_backlinks": Notes with no incoming links (most common)"no_links": Notes with no incoming OR outgoing links"no_tags": Notes without any tags"no_metadata": Notes with minimal/no frontmatter properties"isolated": Notes with no links AND no tags
exclude_folders(optional): List of folders to exclude (default: ["Templates", "Archive", "Daily"])min_age_days(optional): Only include notes older than this many days
Returns:
{
"count": 23,
"orphaned_notes": [
{
"path": "Random Thoughts/Old Idea.md",
"reason": "No incoming links",
"modified": "2023-06-15T10:30:00Z",
"size": 245,
"word_count": 42
}
],
"stats": {
"total_notes_scanned": 500,
"excluded_folders": ["Templates", "Archive", "Daily"],
"orphan_type": "no_backlinks"
}
}Use cases:
Regular vault maintenance and cleanup
Finding forgotten or disconnected notes
Identifying notes that need better organization
Preparing for vault reorganization
get_backlinks
Find all notes that link to a specific note.
Parameters:
path: Path to the note to find backlinks forinclude_context(default:true): Whether to include text context around linkscontext_length(default:100): Number of characters of context to include
Returns:
{
"target_note": "Projects/AI Research.md",
"backlink_count": 5,
"backlinks": [
{
"source_path": "Daily/2024-01-15.md",
"link_text": "AI Research",
"link_type": "wiki",
"context": "...working on the [[AI Research]] project today..."
}
]
}Use cases:
Understanding which notes reference a concept or topic
Discovering relationships between notes
Building a mental map of note connections
get_outgoing_links
List all links from a specific note.
Parameters:
path: Path to the note to extract links fromcheck_validity(default:false): Whether to check if linked notes exist
Returns:
{
"source_note": "Projects/Overview.md",
"link_count": 8,
"links": [
{
"path": "Projects/AI Research.md",
"display_text": "AI Research",
"type": "wiki",
"exists": true
}
]
}Use cases:
Understanding what a note references
Checking note dependencies before moving/deleting
Exploring the structure of index or hub notes
find_broken_links
Find all broken links in the vault, a specific directory, or a single note.
Parameters:
directory(optional): Specific directory to check (defaults to entire vault)single_note(optional): Check only this specific note for broken links
Returns:
{
"directory": "/",
"broken_link_count": 3,
"affected_notes": 2,
"broken_links": [
{
"source_path": "Projects/Overview.md",
"broken_link": "Projects/Old Name.md",
"link_text": "Old Project",
"link_type": "wiki"
}
]
}Use cases:
After renaming or deleting notes
Regular vault maintenance
Before reorganizing folder structure
Testing
Running Tests
# Run all tests
python tests/run_tests.py
# Or with pytest directly
pytest tests/Tests create temporary vaults for isolation and don't require a running Obsidian instance.
Testing with MCP Inspector
Set your vault path:
export OBSIDIAN_VAULT_PATH="/path/to/your/vault"Run the MCP Inspector:
npx @modelcontextprotocol/inspector python -m obsidian_mcp.serverOpen the Inspector UI at
http://localhost:5173Test the tools interactively with your actual vault
Integration with Claude Desktop
For development installations, see the Development Installation section above.
Enhanced Error Handling
The server provides detailed, actionable error messages to help AI systems recover from errors:
Example Error Messages
Invalid Path:
Invalid note path: '../../../etc/passwd'.
Valid paths must: 1) End with .md or .markdown, 2) Use forward slashes (e.g., 'folder/note.md'),
3) Not contain '..' or start with '/', 4) Not exceed 255 characters.
Example: 'Daily/2024-01-15.md' or 'Projects/My Project.md'Empty Search Query:
Search query cannot be empty.
Valid queries: 1) Keywords: 'machine learning',
2) Tags: 'tag:#project', 3) Paths: 'path:Daily/',
4) Combined: 'tag:#urgent TODO'Invalid Date Parameters:
Invalid date_type: 'invalid'.
Must be either 'created' or 'modified'.
Use 'created' to find notes by creation date, 'modified' for last edit dateTroubleshooting
"Vault not found" error
Ensure the OBSIDIAN_VAULT_PATH environment variable is set correctly
Verify the path points to an existing Obsidian vault directory
Check that you have read/write permissions for the vault directory
Tags not showing up
Ensure tags are properly formatted (with or without # prefix)
Tags in frontmatter should be in YAML array format:
tags: [tag1, tag2]Inline tags should use the # prefix:
#project #urgentTags inside code blocks are automatically excluded
"File too large" error
The server has a 10MB limit for note files and 50MB for images
This prevents memory issues with very large files
Consider splitting large notes into smaller ones
"Module not found" error
Ensure your virtual environment is activated
Run from the project root:
python -m obsidian_mcp.serverVerify all dependencies are installed:
pip install -r requirements.txt
Empty results when listing notes
Specify a directory when using
list_notes(e.g., "Daily", "Projects")Root directory listing requires recursive implementation
Check if notes are in subdirectories
Tags not updating
Ensure notes have YAML frontmatter section for frontmatter tags
Frontmatter must include a
tags:field (even if empty)The server now properly reads both frontmatter tags and inline hashtags
Best Practices for AI Assistants
Preventing Data Loss
Always read before updating: The
update_notetool REPLACES content by defaultUse append mode for additions: When adding to existing notes, use
merge_strategy="append"Check note existence: Use
read_noteto verify a note exists before modifyingBe explicit about overwrites: Only use
overwrite=truewhen intentionally replacing content
Recommended Workflows
Safe note editing:
Read the existing note first
Modify the content as needed
Update with the complete new content
Adding to daily notes:
Use
merge_strategy="append"to add entries without losing existing contentUse
edit_note_sectionto add content to specific sections (like "## Tasks" or "## Notes")
Creating new notes:
Use
create_notewithoverwrite=false(default) to prevent accidental overwritesAdd relevant tags to maintain organization
Use
list_tagsto see existing tags and avoid creating duplicates
Organizing with tags:
Check existing tags with
list_tagsbefore creating new onesMaintain consistent naming (e.g., use "project" not "projects")
Use tags to enable powerful search and filtering
Security Considerations
Vault path access - The server only accesses the specified vault directory
The server validates all paths to prevent directory traversal attacks
File operations are restricted to the vault directory
Large files are rejected to prevent memory exhaustion
Path validation prevents access to system files
Development
Code Style
Uses FastMCP framework for MCP implementation
Pydantic models for type safety and validation
Modular architecture with separated concerns
Comprehensive error handling and user-friendly messages
Adding New Tools
Create tool function in appropriate module under
src/tools/Add Pydantic models if needed in
src/models/Register the tool in
src/server.pywith the@mcp.tool()decoratorInclude comprehensive docstrings
Add tests in
tests/Test with MCP Inspector before deploying
Changelog
v2.1.6 (2025-01-30)
š Find orphaned notes - New
find_orphaned_notestool for comprehensive vault maintenanceMultiple orphan criteria: no backlinks, no links, no tags, no metadata, or isolated notes
Configurable folder exclusions and age filtering
Returns detailed statistics including size and word count for each orphaned note
Helps identify forgotten or disconnected notes that need organization
š Bug fixes:
Fixed JSON string parsing for tag parameters in multiple tools
Fixed various errors in
find_orphaned_notesimplementation
v2.1.5 (2025-01-30)
š New find_orphaned_notes tool - Find notes that need organization
Multiple criteria: no backlinks, no links, no tags, no metadata, or isolated
Smart defaults exclude Templates, Archive, and Daily folders
Optional age filtering to exclude recent work-in-progress notes
Returns paths, reasons, and metadata for each orphaned note
v2.1.4 (2025-01-30)
š Enhanced default search - Search now automatically includes both filename AND content matches
Filename matches are ranked higher for intuitive "find note by name" behavior
No more need to use
path:prefix for common searchesAdded
match_typefield to distinguish filename vs content matches
š Fixed quote validation - Notes with quotes in filenames now work correctly
v2.1.3 (2025-01-30)
š·ļø Enhanced list_tags - Added
include_filesoption to get all files containing each tagš§ Fixed update_tags - Properly handles bullet list YAML format without creating malformed frontmatter
š Batch update properties - New
batch_update_propertiestool for bulk metadata operationsUpdate any frontmatter property across multiple notes
Add/remove tags with optional inline tag removal from note body
Search by query, folder, or explicit file list
Proper YAML structure preservation
š§¹ Code cleanup - Removed deprecated OBSIDIAN_REST_API_KEY references from codebase
š Better error messages - More actionable feedback following MCP best practices
v2.0.3 (2025-01-24)
āļø Section-based editing - New
edit_note_sectiontool for precise content insertion and updatesšÆ Four edit operations - Insert before/after headings, replace sections, or append to section ends
š Smart section detection - Case-insensitive markdown heading matching with hierarchy support
š§ Create missing sections - Optionally create sections if they don't exist
š Preserve note structure - Edit specific parts without rewriting entire notes
v2.0.2 (2025-01-24)
šÆ Simplified architecture - Removed memory index, SQLite is now the only search method
š Search transparency - Added metadata to search results (total_count, truncated, limit)
āļø Configurable search limits - Exposed max_results parameter (1-500, default 50)
š§¹ Reduced tool clutter - Removed unnecessary index management tools
š Reasoning-friendly improvements - Enhanced all tools with proper Field annotations and comprehensive docstrings
š Better AI reasoning - Added "When to use" and "When NOT to use" sections to all tools
ā” Performance notes - Added explicit performance guidance for expensive operations
š§ Cleaner codebase - Removed ~500 lines of memory index code, reducing maintenance burden
v2.0.0 (2025-01-24)
š Complete architecture overhaul - Migrated from REST API to direct filesystem access
ā” 5x faster searches with persistent SQLite indexing that survives between sessions
š¼ļø Image support - View and analyze images from your vault with automatic resizing
š Regex power search - Find complex patterns with optimized streaming
šļø Property search - Query notes by frontmatter properties with advanced operators
šÆ One-command setup - Auto-configure Claude Desktop with
uvx --from obsidian-mcp obsidian-mcp-configureš¦ 90% less memory usage - Efficient streaming architecture
š No plugins required - Works offline without needing Obsidian to be running
⨠Incremental indexing - Only re-indexes changed files
š§ Migration support - Automatically detects and migrates old REST API configs
š·ļø Enhanced hierarchical tag support - Full support for Obsidian's nested tag system
Search parent tags to find all children (e.g.,
tag:projectfindsproject/web)Search child tags across any hierarchy (e.g.,
tag:webfindsproject/web,design/web)Exact hierarchical matching (e.g.,
tag:project/web)
š Improved metadata handling - Better alignment with Obsidian's property system
Automatic migration of legacy properties (
tagātags,aliasāaliases)Array/list property searching (find items within arrays)
Date property comparisons with ISO format support
Numeric comparisons for array lengths
š AI-friendly tool definitions - Updated all tool descriptions for better LLM understanding
Added hierarchical tag examples to all tag-related tools
Enhanced property search documentation
Clearer parameter descriptions following MCP best practices
v1.1.8 (2025-01-15)
š§ Fixed FastMCP compatibility issue that prevented PyPI package from running
š¦ Updated to FastMCP 2.8.1 for better stability
š Fixed Pydantic V2 deprecation warnings (migrated to @field_validator)
⨠Changed FastMCP initialization to use 'instructions' parameter
š Improved compatibility with uvx and pipx installation methods
v1.1.7 (2025-01-10)
š Changed default API endpoint to HTTP (
http://127.0.0.1:27123) for easier setupš Updated documentation to reflect HTTP as default, HTTPS as optional
š§ Added note about automatic trailing slash handling in URLs
⨠Improved first-time user experience with zero-configuration setup
v1.1.6 (2025-01-10)
š Fixed timeout errors when creating or updating large notes
ā” Added graceful timeout handling for better reliability with large content
š§ Improved error reporting to prevent false failures on successful operations
v1.1.5 (2025-01-09)
ā” Massive performance optimization for link management:
84x faster link validity checking
96x faster broken link detection
2x faster backlink searches
Added automatic caching and batch processing
š§ Optimized concurrent operations for large vaults
š Enhanced documentation for performance considerations
v1.1.4 (2025-01-09)
š Added link management tools for comprehensive vault analysis:
get_backlinks- Find all notes linking to a specific noteget_outgoing_links- List all links from a note with validity checkingfind_broken_links- Identify broken links for vault maintenance
š§ Fixed URL construction to support both HTTPS (default) and HTTP endpoints
š Enhanced link parsing to handle both wiki-style and markdown links
ā” Optimized backlink search to handle various path formats
v1.1.3 (2025-01-09)
š Fixed search_by_date to properly find notes modified today (days_ago=0)
⨠Added list_folders tool for exploring vault folder structure
⨠Added create_folder tool that creates full folder hierarchies
⨠Added move_folder tool for bulk folder operations
⨠Added update_tags tool for AI-driven tag management
š Fixed tag reading to properly handle both frontmatter and inline hashtags
⨠Added list_tags tool to discover existing tags with usage statistics
ā” Optimized performance with concurrent batching for large vaults
š Improved documentation and error messages following MCP best practices
šÆ Enhanced create_note to encourage tag usage for better organization
v1.1.2 (2025-01-09)
Fixed PyPI package documentation
v1.1.1 (2025-01-06)
Initial PyPI release
Publishing (for maintainers)
To publish a new version to PyPI:
# 1. Update version in pyproject.toml
# 2. Clean old builds
rm -rf dist/ build/ *.egg-info/
# 3. Build the package
python -m build
# 4. Check the package
twine check dist/*
# 5. Upload to PyPI
twine upload dist/* -u __token__ -p $PYPI_API_KEY
# 6. Create and push git tag
git tag -a v2.0.2 -m "Release version 2.0.2"
git push origin v2.0.2Users can then install and run with:
# Using uvx (recommended - no installation needed)
uvx obsidian-mcp
# Or install globally with pipx
pipx install obsidian-mcp
obsidian-mcp
# Or with pip
pip install obsidian-mcp
obsidian-mcpConfiguration
Performance and Indexing
The server now includes a persistent search index using SQLite for dramatically improved performance:
Key Features:
Instant startup - No need to rebuild index on every server start
Incremental updates - Only re-indexes files that have changed
60x faster searches - SQLite queries are much faster than scanning all files
Lower memory usage - Files are loaded on-demand rather than all at once
Configuration Options:
Set these environment variables to customize behavior:
# Set logging level (default: INFO, options: DEBUG, INFO, WARNING, ERROR)
export OBSIDIAN_LOG_LEVEL=DEBUGThe search index is stored in your vault at .obsidian/mcp-search-index.db.
Performance Notes
Search indexing - With persistent index, only changed files are re-indexed
Concurrent operations - File operations use async I/O for better performance
Large vaults - Incremental indexing makes large vaults (10,000+ notes) usable
Image handling - Images are automatically resized to prevent memory issues
Migration from REST API Version
If you were using a previous version that required the Local REST API plugin:
You no longer need the Obsidian Local REST API plugin - This server now uses direct filesystem access
Replace
OBSIDIAN_REST_API_KEYwithOBSIDIAN_VAULT_PATHin your configurationRemove any
OBSIDIAN_API_URLsettingsThe new version is significantly faster and more reliable
All features work offline without requiring Obsidian to be running
Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-tool)Write tests for new functionality
Ensure all tests pass
Commit your changes (
git commit -m 'Add amazing tool')Push to the branch (
git push origin feature/amazing-tool)Open a Pull Request
License
MIT License - see LICENSE file for details
Acknowledgments
Anthropic for creating the Model Context Protocol
Obsidian team for the amazing note-taking app
coddingtonbear for the original Local REST API plugin (no longer required)
dsp-ant for the FastMCP framework
Available Tools
27 toolsadd_tags_toolA
Add tags to a note's frontmatter.
When to use:
Organizing notes with tags
Creating hierarchical tag structures (e.g., project/web, work/meetings/standup)
Bulk tagging operations
Adding metadata for search
Tag format:
Simple tags: "project", "urgent"
Hierarchical tags: "project/web", "work/meetings/standup"
Tags are automatically added without duplicates
When NOT to use:
Adding tags in note content (use update_note)
Replacing all tags (use update_tags with merge=False)
Returns: Updated tag list for the note
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note | |
| tags | Yes | List of tags to add to the note. Don't include the # symbol - it will be added automatically. Supports hierarchical tags with forward slashes. | |
| ctx | No |
TDQS
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 effectively describes key behaviors: tags are added to frontmatter (not content), hierarchical structures are supported, duplicates are automatically prevented, and it returns the updated tag list. However, it doesn't mention error conditions, permission requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, when to use, tag format, when not to use, returns) and every sentence adds value. There's no redundant information, and the most important information (what the tool does) is presented first.
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 mutation tool with no annotations and no output schema, the description does an excellent job covering purpose, usage guidelines, parameter semantics, and behavioral traits. The main gap is the lack of explicit error handling information or permission requirements, which would be helpful for a tool that modifies notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema description coverage (2 of 3 parameters documented in schema), the description adds valuable context about tag format (simple vs. hierarchical) and the automatic handling of duplicates. While it doesn't explicitly discuss the 'path' parameter or the optional 'ctx' parameter, it provides meaningful semantic information about the core 'tags' parameter beyond what the schema offers.
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 specific action ('Add tags') and target ('to a note's frontmatter'), distinguishing it from sibling tools like update_note (for content) and update_tags (for replacement). It provides a precise verb+resource combination that leaves no ambiguity about the tool's function.
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 includes explicit 'When to use' and 'When NOT to use' sections with clear alternatives named (update_note for content tagging, update_tags with merge=False for replacement). This provides comprehensive guidance on when to select this tool versus other available options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_properties_toolA
Batch update properties across multiple notes.
When to use:
Updating metadata across many notes (status, priority, etc.)
Bulk tag operations (add/remove tags from multiple notes)
Archiving projects (set archived=true, add year property)
Cleaning up properties (remove outdated fields)
Normalizing metadata across your vault
Search criteria options:
query: Use search syntax (tag:project, folder:Archive, property:status:active)
folder: Process all notes in a folder (with optional recursive flag)
files: Explicit list of file paths
Property operations:
Add/update any frontmatter property
Remove properties by name
Special handling for tags (add/remove with deduplication)
Remove inline #tags from note body (optional)
Examples:
Archive completed projects: query="tag:project status:completed", property_updates={"archived": true, "year": 2024}
Clean up draft tags: query="tag:draft", remove_tags=["draft"], remove_inline_tags=true
Update all notes in folder: folder="Projects/2023", property_updates={"year": 2023}
When NOT to use:
Single note updates (use update_note, add_tags, etc.)
Complex content changes (this only updates frontmatter)
Returns: { "total_notes": 10, # Total notes found matching criteria "updated": 8, # Successfully updated notes "failed": 2, # Failed updates "details": [...], # List of changes per note "errors": [...] # List of errors with paths and reasons }
| Name | Required | Description | Default |
|---|---|---|---|
| search_criteria | Yes | How to find notes to update. Must include one of: 'query' (search string), 'folder' (folder path), or 'files' (list of paths). Use 'query' for complex searches, 'folder' for directory operations, 'files' for specific notes. | |
| property_updates | No | ||
| properties_to_remove | No | ||
| add_tags | No | ||
| remove_tags | No | ||
| remove_inline_tags | No | Also remove tags from note body (inline #tags). Only applies when remove_tags is specified. | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a mutation tool (implied by 'update'), handles bulk operations, supports specific search criteria, manages frontmatter and tags with deduplication, and includes error handling (shown in the return structure). However, it doesn't mention permissions, rate limits, or irreversible changes, leaving some gaps.
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 well-structured with clear sections (purpose, usage guidelines, search criteria, property operations, examples, exclusions, returns) and every sentence adds value. It's front-loaded with the core purpose and efficiently uses bullet points and examples without 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?
Given the tool's complexity (7 parameters, mutation operations, no annotations, no output schema), the description is largely complete. It covers purpose, usage, parameters, and return values in detail. However, it lacks explicit mention of behavioral risks (e.g., data loss potential) and doesn't explain the 'ctx' parameter, leaving minor 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?
Schema description coverage is low (29%), but the description compensates well by explaining parameter semantics in 'Search criteria options' and 'Property operations' sections. It clarifies the purpose of 'search_criteria', 'property_updates', 'add_tags', 'remove_tags', and 'remove_inline_tags', though it doesn't cover all 7 parameters (e.g., 'ctx' is unexplained).
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 purpose with specific verbs ('batch update properties across multiple notes') and distinguishes it from sibling tools like 'update_note_tool' for single-note updates. It explicitly names the resource (notes) and scope (batch 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?
The description provides explicit 'When to use' scenarios with concrete examples (e.g., archiving projects, bulk tag operations) and a 'When NOT to use' section that names specific alternatives ('use update_note, add_tags, etc.'). This clearly guides the agent on when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folder_toolA
Create a new folder in the vault, including all parent folders in the path.
When to use:
Setting up project structure in advance
Creating deep folder hierarchies (e.g., "Research/Studies/2024")
Creating archive folders before moving notes
Establishing organizational hierarchy
Preparing folders for future content
When NOT to use:
If you're about to create a note in that path (folders are created automatically)
For temporary organization (just create notes directly)
Note: Will create all necessary parent folders. For example, "Research/Studies/2024" will create Research, Research/Studies, and Research/Studies/2024 if they don't exist.
Returns: Creation status with list of folders created and placeholder file path
| Name | Required | Description | Default |
|---|---|---|---|
| folder_path | Yes | Path of the folder to create | |
| create_placeholder | No | Whether to create a placeholder file (.gitkeep or README.md) | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behaviors: it creates all necessary parent folders (with a concrete example), mentions placeholder file creation, and describes the return format. It doesn't cover potential errors, permissions, or rate limits, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with clear sections (purpose, usage guidelines, note, returns), each sentence adds value, and it's appropriately sized for a tool with behavioral complexity. No wasted words while maintaining completeness.
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 mutation tool with no annotations and no output schema, the description provides good coverage: clear purpose, usage guidelines, behavioral details, and return format description. It could mention error conditions or permissions, but addresses most critical aspects 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?
With 67% schema description coverage (2 of 3 parameters documented), the description adds meaningful context beyond the schema. It explains the parent-folder creation behavior for 'folder_path' and mentions placeholder files which relates to 'create_placeholder', though it doesn't address the undocumented 'ctx' parameter. This compensates well for the coverage gap.
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 specific action ('Create a new folder in the vault') and resource ('folder'), including the key behavioral trait of creating parent folders. It distinguishes from sibling tools like 'create_note_tool' by focusing exclusively on folder creation rather than note creation.
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 explicit 'When to use' and 'When NOT to use' sections with concrete scenarios, including a direct alternative ('create notes directly') and a specific sibling tool scenario ('folders are created automatically' with create_note_tool). This gives clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_note_toolA
Create a new note or overwrite an existing one.
When to use:
Creating new notes with specific content
Setting up templates or structured notes
Programmatically generating documentation
When NOT to use:
Updating existing notes (use update_note unless you want to replace entirely)
Appending content (use update_note with merge_strategy="append")
Returns: Created note information with path and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Where to create the new note in your vault. Folders will be created automatically if needed. | |
| content | Yes | The markdown content for your note. Can include headings (#), tags (#tag), links ([[other note]]), and frontmatter. | |
| overwrite | No | Set to true to replace an existing note at this location. Use carefully as this deletes the original content. | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it can overwrite/delete existing content (destructive potential), mentions 'use carefully' for overwrite parameter, and describes the return format ('Created note information with path and metadata'). It doesn't cover rate limits or authentication needs, but provides solid operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured with clear sections (purpose, when to use, when not to use, returns), front-loads the core functionality, and every sentence adds value. No wasted words while maintaining completeness.
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 mutation tool with no annotations and no output schema, the description provides excellent context about behavior, usage boundaries, and return values. It covers the destructive potential of overwrite and distinguishes from alternatives. The main gap is lack of explicit error handling or permission requirements, but otherwise quite 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 75% schema description coverage, the description adds meaningful context beyond the schema. While it doesn't detail individual parameters, it explains the tool's overall behavior with parameters (creating/overwriting notes, setting up templates) that helps understand how parameters work together. The 'Returns' section also provides output 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 tool's purpose with specific verbs ('create' and 'overwrite') and resource ('note'), distinguishing it from siblings like update_note_tool. It explicitly mentions both creation and replacement functionality, which is more specific than just 'create'.
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 explicit 'When to use' and 'When NOT to use' sections with clear alternatives named (update_note with specific strategies). It distinguishes this tool from update_note_tool for complete replacements versus partial updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_note_toolA
Delete a note from the vault permanently.
When to use:
Removing outdated or duplicate notes
Cleaning up temporary drafts
Part of a move operation (delete after successful copy)
When NOT to use:
Archiving (use move_note to Archive folder instead)
Temporary removal (no undo available)
ā ļø WARNING: This operation cannot be undone. The note will be permanently deleted.
Returns: Deletion confirmation with the path of the deleted note
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note to delete from your vault | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing critical behavioral traits: it's a destructive operation ('permanently deleted'), has no undo capability, and includes a warning about irreversibility. It also mentions the return format (confirmation with path), though it could elaborate on error cases or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage guidelines, warnings, returns), front-loaded with the core action, and every sentence adds value without redundancy. It's appropriately sized for a destructive tool needing careful explanation.
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 no annotations and no output schema, the description does a good job covering purpose, usage, warnings, and return values. It could be more complete by detailing error scenarios (e.g., what happens if the path doesn't exist) or auth requirements, but it's largely sufficient 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?
Schema description coverage is 50% (only 'path' has a description, 'ctx' is undocumented). The description doesn't add parameter-specific details beyond what's in the schema for 'path', and doesn't explain the 'ctx' parameter at all. Baseline 3 is appropriate as the schema covers half the parameters adequately.
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 specific action ('Delete a note from the vault permanently') with the resource ('note'), distinguishing it from siblings like move_note_tool or archive operations. It explicitly mentions permanent deletion, which differentiates it from temporary removal or archiving 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 explicit 'When to use' scenarios (removing outdated notes, cleaning drafts, move operations) and 'When NOT to use' guidance (archiving, temporary removal), including a named alternative (move_note to Archive folder). This gives clear context for when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_note_section_toolA
Edit a specific section of a note identified by a markdown heading.
When to use:
Adding content to a specific section without rewriting the whole note
Updating a particular section (like status updates, task lists)
Inserting content at precise locations in structured notes
Building up notes incrementally by section
When NOT to use:
Simple append to end of note (use update_note with merge_strategy='append')
Replacing entire note content (use update_note)
Creating a new note (use create_note)
Section identification:
Sections are identified by markdown headings (# ## ### etc.)
Match is case-insensitive
First matching heading is used if duplicates exist
Section includes content until next heading of same/higher level
Operations:
insert_after: Add content immediately after the section heading
insert_before: Add content immediately before the section heading
replace: Replace entire section including the heading
append_to_section: Add content at the end of the section
Returns: Edit status including whether section was found or created
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note to edit | |
| section_identifier | Yes | Markdown heading that identifies the section (e.g., '## Tasks', '### Status') | |
| content | Yes | Content to insert, replace, or append to the section | |
| operation | No | How to edit the section. 'insert_after' = add content after heading, 'insert_before' = add before heading, 'replace' = replace entire section, 'append_to_section' = add to end of section | insert_after |
| create_if_missing | No | Create the section at the end of the note if it doesn't exist | |
| ctx | No |
TDQS
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 effectively describes key behaviors: section identification rules (case-insensitive, first match, content boundaries), operations (insert_after, insert_before, replace, append_to_section), and the create_if_missing option. However, it lacks details on error handling, permissions, or rate limits, which are relevant for a mutation tool. The description does not contradict any annotations, as none are present.
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 well-structured with clear sections (purpose, usage guidelines, section identification, operations, returns), each sentence adds value, and it avoids redundancy. It is appropriately sized for a tool with 6 parameters and complex behavior, front-loading the core purpose and usage guidelines 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 tool's complexity (6 parameters, mutation operation, no annotations, no output schema), the description is largely complete: it covers purpose, usage, behavioral rules, and parameter semantics. However, it lacks output details (only mentions 'Edit status' vaguely) and doesn't address potential errors or side effects, which are important for a tool that modifies notes. This minor gap prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is high (83%), so the baseline is 3. The description adds meaningful context beyond the schema: it explains how 'section_identifier' works with markdown headings and matching rules, clarifies the 'operation' options with practical examples, and mentions the 'create_if_missing' behavior. This compensates for the 17% coverage gap and provides valuable semantic understanding, though it doesn't detail all parameters (e.g., 'ctx' is unexplained).
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 starts with a clear, specific statement: 'Edit a specific section of a note identified by a markdown heading.' This explicitly states the verb ('edit'), resource ('specific section of a note'), and mechanism ('identified by a markdown heading'), distinguishing it from sibling tools like update_note_tool or create_note_tool. The purpose is unambiguous and well-articulated.
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 includes explicit 'When to use' and 'When NOT to use' sections, listing four use cases and three exclusions with named alternatives (e.g., 'use update_note with merge_strategy='append''). This provides clear, actionable guidance on when to select this tool over its siblings, such as update_note_tool for whole-note edits or create_note_tool for new notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_broken_links_toolA
Find all broken links in the vault, a specific directory, or a single note.
When to use:
After renaming or deleting notes
Regular vault maintenance
Before reorganizing folder structure
Cleaning up after imports
Checking links in a specific note
When NOT to use:
Just getting outgoing links without needing broken status (use get_outgoing_links)
Finding backlinks (use get_backlinks)
Returns: All broken links found in the specified scope
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | ||
| single_note | No | ||
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It describes what the tool does (finds broken links) and the scope, but lacks details on behavioral traits like performance implications, error handling, or output format beyond 'All broken links found'. It doesn't mention whether this is a read-only operation or has side effects, though 'find' implies read-only.
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 well-structured with clear sections (purpose, when to use, when not to use, returns) and uses bullet points for readability. Every sentence adds value without redundancy, making it efficient and easy to parse.
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 complexity (3 parameters, no annotations, no output schema), the description does a good job covering purpose, usage guidelines, and high-level parameter semantics. However, it lacks details on the output format (beyond 'All broken links found') and doesn't address potential behavioral aspects like performance or errors, leaving some gaps for a tool with 3 parameters.
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 0%, so the description must compensate. It explains the scope parameters ('vault, a specific directory, or a single note'), which aligns with the 'directory' and 'single_note' parameters. However, it doesn't explicitly mention the 'ctx' parameter or provide detailed examples of parameter usage beyond the high-level scope description.
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 purpose with specific verb ('find') and resource ('broken links'), and distinguishes it from siblings by mentioning alternatives like get_outgoing_links and get_backlinks. It explicitly defines the scope ('in the vault, a specific directory, or a single note'), making it highly specific.
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 includes explicit 'When to use' and 'When NOT to use' sections with concrete scenarios (e.g., 'After renaming or deleting notes', 'Regular vault maintenance') and named alternatives (get_outgoing_links, get_backlinks). This provides comprehensive guidance on when to select this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_orphaned_notes_toolA
Find orphaned notes that may need organization or cleanup.
When to use:
Regular vault maintenance and cleanup
Finding forgotten or disconnected notes
Identifying notes that need better organization
Preparing for vault reorganization
Finding candidates for archival or deletion
Orphan types explained:
no_backlinks: Notes with no incoming links (most common definition)
no_links: Notes with no incoming OR outgoing links (completely isolated)
no_tags: Notes without any tags (untagged content)
no_metadata: Notes with minimal/no frontmatter properties
isolated: Notes with no links AND no tags (truly disconnected)
Default exclusions:
Templates folder (usually contains reference notes)
Archive folder (already organized)
Daily folder (daily notes often standalone)
When NOT to use:
Finding specific notes (use search_notes)
Getting all notes in a folder (use list_notes)
Finding notes by content (use search tools)
Performance note:
Scans entire vault and checks links/metadata for each note
For vaults >1000 notes, this may take 10-30 seconds
Returns: List of orphaned notes with paths, reasons, and metadata. Results are sorted by modification date (oldest first).
Example response: { "count": 23, "orphaned_notes": [ { "path": "Random Thoughts/Old Idea.md", "reason": "No incoming links", "modified": "2023-06-15T10:30:00Z", "size": 245, "word_count": 42 } ], "stats": { "total_notes_scanned": 500, "excluded_folders": ["Templates", "Archive", "Daily"], "orphan_type": "no_backlinks" } }
| Name | Required | Description | Default |
|---|---|---|---|
| orphan_type | No | What makes a note 'orphaned'. Choose the criteria that best fits your organization needs. | no_backlinks |
| exclude_folders | No | ||
| min_age_days | No | ||
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. It discloses performance characteristics ('Scans entire vault', 'may take 10-30 seconds for vaults >1000 notes'), default exclusions (e.g., 'Templates folder'), and what the tool returns (list of notes with metadata). It doesn't contradict any 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 well-structured with clear sections (e.g., 'When to use', 'Orphan types explained', 'Performance note'), front-loaded key information, and every sentence adds value without redundancy. It's appropriately sized for the tool's complexity.
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 complexity (4 parameters, no annotations, no output schema), the description is highly complete. It covers purpose, usage, parameters, behavior, performance, exclusions, and includes an example response, providing all necessary context for an agent to use it effectively.
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 low (25%), but the description compensates by explaining 'orphan types' in detail (e.g., 'no_backlinks: Notes with no incoming links'), clarifying 'default exclusions' (e.g., 'Templates folder'), and mentioning 'min_age_days' context ('Helps exclude recent work-in-progress'). It adds meaningful context 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 tool's purpose with specific verb ('Find') and resource ('orphaned notes'), and distinguishes it from siblings by explaining what makes notes 'orphaned' (e.g., 'no_backlinks', 'no_links'). It explicitly differentiates from tools like 'search_notes' and 'list_notes'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use (e.g., 'Regular vault maintenance and cleanup', 'Finding forgotten or disconnected notes') and when NOT to use (e.g., 'Finding specific notes (use search_notes)', 'Getting all notes in a folder (use list_notes)'), including clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backlinks_toolA
Find all notes that link to a specific note (backlinks).
When to use:
Understanding which notes reference a concept or topic
Discovering relationships between notes
Finding notes that depend on the current note
Building a mental map of note connections
When NOT to use:
Finding links FROM a note (use get_outgoing_links)
Searching for broken links (use find_broken_links)
Performance note:
Fast for small vaults (<100 notes)
May take several seconds for large vaults (1000+ notes)
Consider using search_notes for specific link queries
Returns: All notes linking to the target with optional context
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note to find backlinks for | |
| include_context | No | Include the text surrounding each link to understand why the link was made | |
| context_length | No | How much surrounding text to show for each link (in characters) | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing performance characteristics ('Fast for small vaults', 'May take several seconds for large vaults') and return format information ('All notes linking to the target with optional context'). It doesn't mention authentication needs or rate limits, but provides useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, when to use, when not to use, performance note, returns) and each sentence adds value. It could be slightly more concise by combining some usage scenarios, but overall it's efficiently organized and front-loaded with the core 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 tool with no annotations and no output schema, the description provides good context about performance, usage scenarios, and return format. It covers the essential behavioral aspects and distinguishes from alternatives. The main gap is lack of output structure details, but given the tool's relative simplicity, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the description doesn't add significant parameter information beyond what's in the schema. The 'Returns' section mentions 'optional context' which relates to the include_context parameter, but doesn't explain the 'ctx' parameter or add meaningful semantics beyond the schema's descriptions. Baseline 3 is appropriate given the decent schema coverage.
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 purpose with a specific verb ('Find') and resource ('all notes that link to a specific note'), and explicitly distinguishes it from sibling tools like get_outgoing_links and find_broken_links. The opening sentence 'Find all notes that link to a specific note (backlinks)' is precise 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 explicit 'When to use' and 'When NOT to use' sections with clear alternatives named (get_outgoing_links, find_broken_links, search_notes). It gives specific scenarios for usage and explicitly tells the agent when to choose other tools instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_note_info_toolA
Get metadata and statistics about a note without reading its content.
When to use:
Checking note properties quickly (tags, dates, size)
Getting frontmatter without loading content
Gathering statistics (word count, link count)
Verifying note exists and getting basic info
Batch processing note metadata
When NOT to use:
Reading note content (use read_note)
Searching for notes (use search tools)
Modifying metadata (use specific update tools)
Returns: Note metadata including path, existence, dates, size, frontmatter properties, and statistics (word count, link count, tag count, image presence)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note to analyze | |
| ctx | No |
TDQS
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 effectively communicates that this is a read-only operation ('without reading its content'), describes what information is returned, and clarifies it's for metadata/statistics only. However, it doesn't mention potential limitations like rate limits, authentication requirements, or error conditions.
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 well-structured with clear sections (purpose, usage guidelines, returns) and every sentence adds value. It's front-loaded with the core purpose, followed by practical guidance, and concludes with return details. No wasted words or redundant 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 annotations and no output schema, the description provides excellent context about what the tool does, when to use it, and what it returns. The 'Returns' section effectively documents the output structure. The main gap is the lack of explicit behavioral constraints (like rate limits or permissions), but overall it's quite complete for this complexity level.
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 description coverage is 50% (only the 'path' parameter has a description), but the description compensates by providing context about what the 'path' parameter represents ('Path to the note to analyze') and includes examples in the schema. The 'ctx' parameter remains undocumented, but the description's overall clarity about the tool's purpose helps contextualize parameter usage.
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 purpose with specific verbs ('get metadata and statistics') and resource ('about a note'), explicitly distinguishing it from sibling tools like read_note and search tools by emphasizing it doesn't read content. The first sentence provides a concise, accurate summary of the tool's function.
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 includes explicit 'When to use' and 'When NOT to use' sections that provide clear guidance on appropriate contexts and name specific alternative tools (read_note, search tools, update tools). This gives the agent precise direction on when to select this tool versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_outgoing_links_toolA
List all links from a specific note (outgoing links).
When to use:
Understanding what a note references
Checking note dependencies before moving/deleting
Exploring the structure of index or hub notes
Validating links after changes
When NOT to use:
Finding notes that link TO this note (use get_backlinks)
Searching across multiple notes (use find_broken_links)
Returns: All outgoing links with their types and optional validity status
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note to extract links from | |
| check_validity | No | Also check if each linked note actually exists in your vault | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining what the tool returns ('All outgoing links with their types and optional validity status') and the optional validity checking behavior. It doesn't mention performance characteristics, rate limits, or authentication needs, but covers core functionality adequately.
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 well-structured with clear sections (purpose, when to use, when not to use, returns), front-loaded with the core functionality, and every sentence adds value. No wasted words or redundant 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 read-only tool with no annotations and no output schema, the description does an excellent job covering purpose, usage guidelines, and return values. The main gap is the lack of output format details (structure of returned links), but given the tool's relative simplicity and clear behavioral description, it's mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (2 of 3 parameters have descriptions). The description adds value by explaining the purpose of validity checking ('Also check if each linked note actually exists in your vault'), which complements the schema. However, it doesn't provide additional context for the 'path' parameter beyond what's 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 specific action ('List all links') and resource ('from a specific note'), with explicit differentiation from sibling tools like get_backlinks and find_broken_links. The title 'outgoing links' reinforces the directional nature of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'When to use' scenarios (understanding references, checking dependencies, exploring structure, validating links) and 'When NOT to use' cases with named alternatives (get_backlinks for inbound links, find_broken_links for cross-note searches). This gives comprehensive guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_folders_toolA
List folders in the vault or a specific directory.
When to use:
Exploring vault organization structure
Verifying folder names before creating notes
Checking if a specific folder exists
Understanding the hierarchy of the vault
When NOT to use:
Listing notes (use list_notes instead)
Searching for content (use search_notes)
Returns: Folder structure with paths and names
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | ||
| recursive | No | Whether to include all nested subfolders | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses behavioral traits: it's a read operation (implied by 'List'), returns folder structure with paths and names, and mentions optional directory parameter with default behavior. However, it doesn't specify pagination, rate limits, or error conditions, leaving some gaps.
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 well-structured with clear sections (purpose, when to use, when not to use, returns). Every sentence adds value: the first states the core function, the bullet points provide practical guidance, and the returns section clarifies output. 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 read-only tool with no output schema, the description is mostly complete: it covers purpose, usage guidelines, and output format. However, with no annotations and incomplete parameter documentation (missing 'ctx'), there are minor gaps in behavioral context and parameter understanding.
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 only 33% (1 of 3 parameters described in schema). The description compensates by explaining the directory parameter's purpose ('specific directory to list folders from') and default behavior ('defaults to root'), and mentions recursive behavior in the schema. However, it doesn't address the 'ctx' parameter at all, which remains undocumented.
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 purpose with specific verb ('List') and resource ('folders in the vault or a specific directory'). It distinguishes from siblings by explicitly mentioning when NOT to use it for listing notes or searching content, which are handled by other tools like list_notes and 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 provides explicit 'When to use' scenarios (exploring structure, verifying names, checking existence, understanding hierarchy) and 'When NOT to use' cases with named alternatives (list_notes for notes, search_notes for content). This gives clear guidance on tool selection versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notes_toolA
List notes in the vault or a specific directory.
When to use:
Getting an overview of vault structure
Finding notes in a specific folder
Checking what notes exist before bulk operations
Understanding vault organization
When NOT to use:
Searching for specific content (use search_notes)
Finding notes by properties (use search_by_property)
Just counting notes (this loads full paths)
Performance notes:
Fast for directories with <100 notes
May be slower for large vaults (1000+ notes) with recursive=True
Returns: Hierarchical structure of notes with paths and folder organization
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | ||
| recursive | No | Include notes from all subfolders. Set to false for only immediate children. | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and adds valuable behavioral context: performance characteristics (fast for <100 notes, slower for large vaults with recursive=True), what it returns (hierarchical structure with paths), and a warning about loading full paths versus just counting. It doesn't contradict any annotations since none exist.
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 well-structured with clear sections (purpose, when to use, when not to use, performance notes, returns). Every sentence adds value without redundancy. It's appropriately sized for the tool's complexity and front-loaded with essential 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?
Given no annotations, no output schema, and low schema coverage, the description does an excellent job providing context. It covers purpose, usage guidelines, performance characteristics, and return format. The main gap is that it doesn't fully document all parameters, but it provides enough context for effective 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 description coverage is only 33% (1 of 3 parameters described), but the description compensates well. It explains the directory parameter's purpose ('list notes in the vault or a specific directory') and implies recursive behavior in performance notes. While it doesn't detail all parameters explicitly, it provides meaningful context beyond the sparse 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 tool's purpose with specific verb ('List') and resource ('notes in the vault or a specific directory'), distinguishing it from siblings like search_notes or list_folders. It explicitly defines the scope of listing notes versus other 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?
The description provides explicit 'When to use' and 'When NOT to use' sections with clear alternatives named (search_notes, search_by_property). It gives specific scenarios for usage and exclusions, making it easy to choose between this tool and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tags_toolA
List all unique tags used across the vault with usage statistics.
When to use:
Before adding tags to maintain consistency
Getting an overview of your tagging taxonomy
Finding underused or overused tags
Discovering tag variations (e.g., 'project' vs 'projects')
Understanding hierarchical tag structures in your vault
Finding all files that use a specific tag (with include_files=true)
Hierarchical tags:
Lists both parent and full hierarchical paths (e.g., both "project" and "project/web")
Shows how nested tags are organized in your vault
Helps identify opportunities for better tag organization
File paths (with include_files=true):
Returns a list of all file paths that contain each tag
Useful for bulk operations on files with specific tags
Paths are relative to vault root
When NOT to use:
Getting tags for a specific note (use get_note_info)
Searching notes by tag (use search_notes with tag: prefix)
Performance note:
For vaults with <1000 notes: Fast (1-3 seconds)
For vaults with 1000-5000 notes: Moderate (3-10 seconds)
For vaults with >5000 notes: May be slow (10+ seconds)
Uses batched concurrent requests to optimize performance
include_files=true adds minimal overhead
Returns: All unique tags with optional usage counts and file paths
| Name | Required | Description | Default |
|---|---|---|---|
| include_counts | No | Show how many times each tag is used across your vault | |
| sort_by | No | Sort tags alphabetically by 'name' or by popularity with 'count' | name |
| include_files | No | Include the list of file paths that contain each tag | |
| ctx | No |
TDQS
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 does this well by explaining performance characteristics (speed based on vault size), implementation details ('Uses batched concurrent requests'), and the effect of include_files parameter. It doesn't cover error conditions or authentication needs, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (When to use, Hierarchical tags, File paths, When NOT to use, Performance note, Returns). While comprehensive, some sections could be more concise (e.g., the 'When to use' bullet list has some redundancy). Overall, it's appropriately sized for the tool's complexity.
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 moderate complexity (4 parameters, no output schema, no annotations), the description provides excellent completeness. It covers purpose, usage guidelines, parameter implications, performance characteristics, hierarchical tag behavior, file path details, and return value information. This fully compensates for the lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (3 of 4 parameters well-described). The description adds significant value beyond the schema by explaining the implications of include_files=true (returns file paths, useful for bulk operations, paths relative to vault root) and providing context about hierarchical tags. However, it doesn't fully explain the ctx parameter, which has no schema description.
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 purpose: 'List all unique tags used across the vault with usage statistics.' It specifies the verb ('List'), resource ('unique tags'), and scope ('across the vault'), and distinguishes itself from siblings like get_note_info and search_notes by explicitly stating when not to use it. This provides excellent differentiation.
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 includes explicit 'When to use' and 'When NOT to use' sections, naming specific alternatives (get_note_info, search_notes with tag: prefix). It also provides contextual guidance like 'Before adding tags to maintain consistency' and 'Finding all files that use a specific tag (with include_files=true)', giving comprehensive usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_folder_toolA
Move an entire folder and all its contents to a new location.
When to use:
Reorganizing vault structure
Archiving completed projects
Consolidating related notes
Seasonal organization (e.g., moving to year-based archives)
When NOT to use:
Moving individual notes (use move_note instead)
Moving to a subfolder of the source (creates circular reference)
Returns: Move status with count of notes and folders moved
| Name | Required | Description | Default |
|---|---|---|---|
| source_folder | Yes | Current folder path to move | |
| destination_folder | Yes | New location for the folder | |
| update_links | No | Whether to update links in other notes (future enhancement) | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a mutation operation (implied by 'move'), it handles bulk content ('all its contents'), and it returns status with counts. However, it lacks details on permissions, error conditions, or rate limits, which would be helpful for a destructive operation.
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 well-structured with clear sections (purpose, usage guidelines, returns), uses bullet points for readability, and every sentence adds value without redundancy. It's appropriately sized for the tool's complexity and front-loaded with the core action.
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 moderate complexity (4 parameters, no output schema, no annotations), the description is largely complete: it covers purpose, usage, and return values. However, it could better address potential pitfalls (e.g., what happens if the destination exists) and the unexplained 'ctx' parameter, leaving minor 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?
Schema description coverage is 75%, so the schema documents most parameters well. The description adds value by implicitly clarifying that 'source_folder' and 'destination_folder' refer to paths for moving operations, and it hints at the 'update_links' parameter's purpose ('future enhancement'). It doesn't fully compensate for the 25% gap (e.g., 'ctx' is unexplained), but provides useful context 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 specific action ('Move an entire folder and all its contents') and resource ('folder'), distinguishing it from sibling tools like 'move_note' which handles individual notes. The verb 'move' is precise and the scope 'entire folder and all its contents' is explicit.
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 explicit 'When to use' scenarios (e.g., reorganizing vault structure, archiving projects) and 'When NOT to use' cases (e.g., moving individual notes, creating circular references), including a named alternative ('move_note'). This gives clear guidance on tool selection versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_note_toolA
Move a note to a new location, optionally with a new name.
When to use:
Reorganizing notes into different folders
Moving AND renaming in one operation
Archiving completed projects
Consolidating scattered notes
When NOT to use:
Just renaming within same folder (use rename_note for clarity)
Copying notes (use read_note + create_note instead)
Moving entire folders (use move_folder)
Link updating:
Automatically detects if filename changes during move
Updates all [[wiki-style links]] only when name changes
Preserves link aliases and formatting
No updates needed for simple folder moves (links work by name)
Returns: Move confirmation with path changes and link update details
| Name | Required | Description | Default |
|---|---|---|---|
| source_path | Yes | Current location of the note to move | |
| destination_path | Yes | New location for the note. Folders will be created if needed. | |
| update_links | No | Automatically update all [[wiki links]] if the filename changes during move | |
| ctx | No |
TDQS
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 and does so effectively. It explains link updating behavior (automatic detection, wiki-style link updates, preservation of aliases), folder creation behavior, and what the tool returns. It doesn't mention permissions, rate limits, or error conditions, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage guidelines, link updating, returns) and every sentence adds value. It's appropriately sized for a tool with complex behavior and no annotations, with no redundant 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?
Given the tool's complexity (mutation with link updating), no annotations, and no output schema, the description provides comprehensive context. It covers purpose, usage guidelines, behavioral details, parameter semantics, and return information, making it complete enough for an agent to understand and use the tool effectively.
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 75% schema description coverage, the description adds meaningful context beyond the schema. It explains the link updating behavior tied to the 'update_links' parameter and clarifies that 'destination_path' creates folders if needed. The 'ctx' parameter remains undocumented, but the description compensates well for the schema's partial coverage.
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 purpose with specific verbs ('move', 'rename') and resource ('note'), and distinguishes it from sibling tools like rename_note, create_note, and move_folder. The opening sentence 'Move a note to a new location, optionally with a new name' is precise and actionable.
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 explicit 'When to use' and 'When NOT to use' sections with clear alternatives named (rename_note, read_note + create_note, move_folder). This gives comprehensive guidance on when to select this tool versus other available options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_image_toolA
Read an image file from the Obsidian vault for analysis.
When to use:
Analyzing specific image files from the vault
Examining standalone images (not embedded in notes)
Processing images for detailed analysis
When NOT to use:
Getting images embedded in notes (use view_note_images instead)
Searching for images (use list_notes with appropriate filters)
Returns: Image object that Claude can analyze and describe
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the image file relative to vault root | |
| include_metadata | No | Include file size and other metadata about the image | |
| ctx | No |
TDQS
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 effectively explains what the tool does (reads image files for analysis), what it returns (Image object that Claude can analyze), and distinguishes it from related operations. However, it doesn't mention potential limitations like file size constraints, supported formats beyond what's in the schema pattern, or error conditions.
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 well-structured with clear sections (purpose, when to use, when not to use, returns) and every sentence adds value. It's front-loaded with the core purpose and efficiently organized without wasted words. The bullet-point format enhances readability while maintaining 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?
For a read operation with no annotations and no output schema, the description provides good context about what the tool does, when to use it, and what it returns. It covers the essential aspects well, though it could benefit from mentioning potential error cases or limitations. Given the straightforward nature of an image reading tool, the description 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 description coverage is 67% (2 of 3 parameters have descriptions). The description doesn't explicitly discuss parameters, but the 'path' parameter's purpose is implied through the tool's overall purpose. The 'include_metadata' and 'ctx' parameters aren't mentioned, but with moderate schema coverage and the tool's straightforward purpose, the description provides sufficient context for understanding the primary parameter's role.
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 purpose with specific verb ('Read') and resource ('image file from the Obsidian vault'), and distinguishes it from sibling tools by specifying it's for standalone images rather than embedded ones. The opening sentence 'Read an image file from the Obsidian vault for analysis' provides immediate clarity about the tool's function.
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 explicit 'When to use' and 'When NOT to use' sections with clear alternatives named (view_note_images and list_notes). It gives specific scenarios for appropriate use (analyzing specific image files, examining standalone images) and explicitly contrasts with sibling tools for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_note_toolA
Read the content and metadata of a specific note.
When to use:
Displaying note contents to the user
Analyzing or processing existing note data
ALWAYS before updating a note to preserve existing content
Verifying a note exists before making changes
When NOT to use:
Searching multiple notes (use search_notes instead)
Getting only metadata (use get_note_info for efficiency)
Viewing images in a note (use view_note_images instead)
Returns:
Note content and metadata including tags, aliases, and frontmatter.
Image references () are preserved in the content but images are not loaded.
IMPORTANT: If the note contains image references, proactively offer to analyze them: "I can see this note contains [N] images. Would you like me to analyze/examine them for you?" Then use view_note_images to load and analyze the images if requested.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Note location within your vault (e.g., 'Projects/AI Research.md'). Use forward slashes for folders. | |
| ctx | No |
TDQS
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 effectively describes the tool's behavior: it's a read operation (implied by 'Read'), returns content and metadata with specific details (tags, aliases, frontmatter), preserves image references without loading them, and includes proactive user interaction guidance for handling images. It covers key aspects like output format and user interaction patterns, though it doesn't mention error handling or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections ('When to use,' 'When NOT to use,' 'Returns,' 'IMPORTANT'), making it easy to scan. It is appropriately sized for the tool's complexity, with each sentence adding value (e.g., usage scenarios, output details, user interaction advice). However, the 'IMPORTANT' section is somewhat verbose and could be more 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 tool's moderate complexity (2 parameters, no output schema, no annotations), the description is highly complete. It covers purpose, usage guidelines, behavioral details (including output format and image handling), and proactive user interaction. It effectively compensates for the lack of annotations and output schema, providing all necessary context for an AI 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only 'path' has a description, 'ctx' does not). The description adds no explicit parameter information beyond what's in the schema, but it implicitly clarifies the tool's focus on a single note via 'specific note,' which aligns with the 'path' parameter. Since there are only 2 parameters and the schema covers the critical 'path' parameter well, the description compensates adequately without redundancy, though it doesn't address the undocumented 'ctx' parameter.
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 purpose as 'Read the content and metadata of a specific note,' which is a specific verb+resource combination. It distinguishes from siblings like 'search_notes' (for multiple notes), 'get_note_info' (for metadata only), and 'view_note_images' (for images), providing clear differentiation.
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 includes explicit 'When to use' and 'When NOT to use' sections with specific scenarios and named alternatives. It provides clear guidance on when to use this tool versus siblings like 'search_notes,' 'get_note_info,' and 'view_note_images,' including efficiency considerations and workflow advice (e.g., 'ALWAYS before updating a note').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tags_toolA
Remove specific tags from a note's frontmatter.
When to use:
Cleaning up outdated tags
Removing temporary tags (like 'draft' or 'review')
Tag maintenance and reorganization
After completing tagged tasks
When NOT to use:
Removing all tags (use update_tags with empty list)
Replacing tags (use update_tags with merge=False)
Note: Only removes exact matches. To remove all subtags of a hierarchical tag, list them explicitly or use update_tags.
Returns: Updated tag list after removal, with count of removed tags
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note | |
| tags | Yes | Tags to remove from the note (without # prefix). Removes exact matches only. | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it specifies 'Only removes exact matches' (important constraint), explains hierarchical tag handling, and describes the return value (updated tag list with count). However, it doesn't mention potential errors (e.g., if note doesn't exist) 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, when to use, when not to use, note, returns) and every sentence earns its place. It's front-loaded with the core purpose and efficiently communicates necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides good coverage: clear purpose, usage guidelines, behavioral constraints, and return value description. It could be more complete by addressing error cases or permission requirements, but it covers the essential context well given the 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?
With 67% schema description coverage (2 of 3 parameters documented in schema), the description adds meaningful context: it clarifies that tags should be provided 'without # prefix' and that removal is 'exact matches only', which complements the schema's tag description. The 'ctx' parameter remains undocumented in both schema and description, but the description provides good coverage for the core 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 specific action ('Remove specific tags from a note's frontmatter') and distinguishes it from sibling tools like 'update_tags_tool' and 'add_tags_tool'. It specifies the exact resource (tags in note frontmatter) and scope (exact matches 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 provides explicit 'When to use' scenarios (cleaning up outdated tags, removing temporary tags, etc.) and 'When NOT to use' guidance with named alternatives (use update_tags for removing all tags or replacing tags). It clearly differentiates this tool from sibling update_tags_tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_note_toolA
Rename a note and automatically update all references to it.
When to use:
Changing a note's title to better reflect its content
Fixing typos in note names
Standardizing naming conventions
Updating temporary names to permanent ones
When NOT to use:
Moving notes to different folders (use move_note)
Creating a copy with new name (use read_note + create_note)
Important:
Can only rename within the same directory
Automatically updates all [[wiki-style links]] throughout vault
Preserves link aliases like [[old name|display text]]
Shows which notes were updated for transparency
Returns: Rename confirmation with link update details
| Name | Required | Description | Default |
|---|---|---|---|
| old_path | Yes | Current path of the note to rename | |
| new_path | Yes | New path for the note (must be in same directory) | |
| update_links | No | Automatically update all [[wiki links]] to this note across the vault | |
| ctx | No |
TDQS
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 effectively describes key behaviors: the tool automatically updates wiki-style links, preserves link aliases, shows which notes were updated, and has constraints like 'Can only rename within the same directory'. However, it lacks details on error conditions, permissions, or rate limits, which slightly limits transparency.
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 well-structured with clear sections ('When to use', 'When NOT to use', 'Important', 'Returns'), front-loaded with the core purpose, and every sentence adds value without redundancy. It efficiently conveys necessary information in a compact format.
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 complexity (a mutation tool with 4 parameters, no annotations, and no output schema), the description is mostly complete. It covers purpose, usage, behavioral traits, and return details. However, it lacks explicit error handling or permission requirements, which are important for a tool that modifies data, leaving a minor gap in 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?
Schema description coverage is 75%, so the schema already documents most parameters well. The description adds meaningful context beyond the schema by explaining the purpose of parameters implicitly (e.g., 'Automatically updates all [[wiki-style links]]' relates to update_links) and clarifying constraints like 'must be in same directory' for new_path. This compensates well for the 25% coverage gap.
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 purpose with a specific verb ('Rename') and resource ('a note'), and explicitly distinguishes it from sibling tools by mentioning what it does not do (e.g., 'Moving notes to different folders (use move_note)'). This provides clear differentiation from alternatives like move_note or create_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 includes explicit 'When to use' and 'When NOT to use' sections with concrete examples (e.g., 'Changing a note's title', 'Fixing typos') and named alternatives (e.g., 'use move_note', 'use read_note + create_note'). This gives comprehensive guidance on when to select this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_date_toolA
Search for notes by creation or modification date.
When to use:
Finding recently modified notes
Locating notes created in a specific time period
Reviewing activity from specific dates
When NOT to use:
Content-based search (use search_notes)
Finding notes by tags or path (use search_notes)
Returns: Notes matching the date criteria with paths and timestamps
| Name | Required | Description | Default |
|---|---|---|---|
| date_type | No | Which date to search by: when the note was first created or last modified | modified |
| days_ago | No | How many days back to search from today. 0 = today, 1 = yesterday, 7 = last week | |
| operator | No | 'within' = all notes in the last N days, 'exactly' = only notes from exactly N days ago | within |
| ctx | No |
TDQS
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 effectively describes the tool's behavior by specifying what it returns ('Notes matching the date criteria with paths and timestamps'), which is crucial for understanding output. However, it lacks details on potential limitations like result ordering, pagination, or error conditions.
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 well-structured with clear sections (purpose, usage guidelines, returns), front-loaded with the core purpose, and every sentence adds value without redundancy. It efficiently communicates essential information in a compact format.
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 moderate complexity (4 parameters, no output schema, no annotations), the description provides good contextual completeness. It covers purpose, usage guidelines, and return values, which is sufficient for a search tool. However, without an output schema, it could benefit from more detail on the return structure (e.g., format of 'paths and timestamps').
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 description coverage is 75%, with three parameters well-documented (date_type, days_ago, operator) and one (ctx) lacking description. The tool description doesn't add parameter details beyond the schema, but since coverage is high and the undocumented 'ctx' parameter appears to be a common context parameter (implied by its name and null default), the description is adequate. A baseline of 3 is adjusted upward due to the high schema coverage compensating for the description's lack of parameter elaboration.
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 purpose as 'Search for notes by creation or modification date,' which is a specific verb+resource combination. It distinguishes itself from sibling tools like 'search_notes' (for content-based search) and 'search_by_property_tool' or 'search_by_regex_tool' by focusing exclusively on date-based filtering.
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 includes explicit 'When to use' and 'When NOT to use' sections, providing clear guidance on appropriate scenarios (e.g., finding recently modified notes) and alternatives (e.g., using 'search_notes' for content-based search). This directly addresses sibling tool differentiation and usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_property_toolA
Search for notes by their frontmatter property values.
When to use:
Finding notes with specific metadata (status, priority, etc.)
Filtering by numeric properties (rating > 4, priority <= 2)
Filtering by date properties (deadline < "2024-12-31")
Searching within array/list properties (tags, aliases, categories)
Checking which notes have certain properties defined
Building database-like queries on your notes
Property types supported:
Text/String: Exact match or contains
Numbers: Comparison operators work numerically
Dates: ISO format (YYYY-MM-DD) with intelligent comparison
Arrays/Lists: Searches within list items, comparisons use list length
Legacy properties: Automatically handles tagātags, aliasāaliases migrations
When NOT to use:
Content search (use search_notes instead)
Tag search (use search_notes with tag: prefix)
Path/filename search (use search_notes with path: prefix)
Examples:
Find active projects: property_name="status", value="active"
Find high priority: property_name="priority", operator=">", value="2"
Find notes with deadlines: property_name="deadline", operator="exists"
Find notes by author: property_name="author", operator="contains", value="john"
Find notes with tag in list: property_name="tags", value="project"
Find past deadlines: property_name="due_date", operator="<", value="2024-01-01"
Returns: Notes matching the property criteria with values displayed
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | The frontmatter property to search for (e.g., 'status', 'priority'). These are metadata fields at the top of notes. | |
| value | No | ||
| operator | No | How to compare: '=' exact match, '!=' not equal, '>/</>=/<=' for numbers/dates, 'contains' partial match, 'exists' just checks presence | = |
| context_length | No | Characters of note content to include | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It effectively discloses key behavioral traits: it's a read-only search tool (implied by 'search'), supports various property types and operators, handles legacy migrations, and returns notes with values displayed. However, it lacks details on rate limits, error handling, or pagination, preventing a perfect score.
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 well-structured with clear sections (purpose, when to use, property types, when not to use, examples, returns), each sentence adds value without redundancy. It's appropriately sized for a complex tool with 5 parameters and no annotations, making it easy to scan and understand.
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 complexity (5 parameters, 60% schema coverage, no annotations, no output schema), the description is largely complete. It covers purpose, usage, parameters, and return behavior. However, it lacks explicit output details (e.g., format, pagination) and full parameter documentation (e.g., ctx), leaving minor 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?
Schema description coverage is 60%, and the description compensates well by explaining parameter semantics beyond the schema. It clarifies that property_name refers to 'frontmatter property values' and provides examples of usage for property_name, value, and operator (e.g., 'exists' checks presence). However, it doesn't fully address context_length or ctx, leaving some gaps.
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 purpose: 'Search for notes by their frontmatter property values.' It specifies the verb ('search'), resource ('notes'), and scope ('frontmatter property values'), distinguishing it from siblings like search_notes_tool (content search) and search_by_date_tool (date-specific).
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 explicitly provides 'When to use' with six specific scenarios (e.g., filtering by metadata, numeric properties, dates) and 'When NOT to use' with three clear exclusions (content search, tag search, path search), naming alternatives like search_notes. This comprehensive guidance helps the agent choose correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_regex_toolA
Search for notes using regular expressions for advanced pattern matching.
When to use:
Finding complex patterns (URLs, code syntax, structured data)
Searching with wildcards and special characters
Case-sensitive or multi-line pattern matching
Finding TODO/FIXME comments with context
When NOT to use:
Simple text search (use search_notes instead)
Searching by tags or properties (use dedicated tools)
Common patterns:
URLs: r"https?://[^\s]+"
Email: r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}"
TODO comments: r"(TODO|FIXME)\s*:.*"
Markdown headers: r"^#{1,6}\s+.*"
Code blocks: r"
\w*\n[\s\S]*?"
Returns: Notes containing regex matches with match details and context
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Regular expression pattern for advanced searches. Use for finding URLs, code patterns, TODO items, etc. | |
| flags | No | ||
| context_length | No | Characters to show around matches | |
| max_results | No | Maximum number of notes to return. Use smaller values for faster responses. | |
| ctx | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the tool returns 'Notes containing regex matches with match details and context,' and the 'Common patterns' section implies it supports complex regex features. However, it doesn't mention performance considerations like speed or resource usage, which could be relevant for a regex search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage guidelines, patterns, returns), front-loaded key information, and every sentence adds value (e.g., specific examples, explicit alternatives). It's appropriately sized for a tool with 5 parameters and no annotations.
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 complexity (regex-based search, 5 parameters, no annotations, no output schema), the description is mostly complete: it covers purpose, usage, parameters via examples, and output behavior. However, it lacks details on error handling, performance implications (e.g., regex complexity impact), or the 'ctx' parameter's purpose, leaving minor 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?
Schema description coverage is 60%, so the description must compensate. It adds significant value: the 'Common patterns' section provides concrete regex examples (e.g., for URLs, emails, TODO comments) that clarify the 'pattern' parameter beyond the schema's examples, and the 'Returns' section explains output semantics. However, it doesn't detail all parameters like 'ctx' or fully explain 'flags' 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 tool's purpose: 'Search for notes using regular expressions for advanced pattern matching.' It specifies the verb ('search'), resource ('notes'), and method ('regular expressions'), distinguishing it from sibling tools like 'search_notes_tool' for simple text search and 'search_by_property_tool' for property-based searches.
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 explicit guidance with 'When to use' and 'When NOT to use' sections, listing specific scenarios (e.g., finding complex patterns, URLs, TODO comments) and naming alternatives ('use search_notes instead' for simple text search, 'use dedicated tools' for tags/properties). This clearly differentiates it from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notes_toolA
Search for notes by filename or content, with smart ranking.
DEFAULT BEHAVIOR (NEW): Searches BOTH note filenames AND content automatically. Filename matches are ranked higher than content matches for better discovery.
When to use:
Finding a note when you know part of its name (just type the name)
Finding notes containing specific content
Locating notes with specific tags
Searching within specific folders
Finding notes by frontmatter properties
Search modes:
Default: searches BOTH filenames and content (filename matches ranked higher) Example: "tag refactor" finds "Obsidian Tag Refactor.md" AND notes mentioning "tag refactor"
"path:text" - searches ONLY in filenames/paths
"tag:tagname" - searches by tag (supports hierarchical tags)
"property:name:value" - searches by frontmatter properties
Examples:
Find a note by name: "Project Tracker" (will find "Project Tracker.md" first)
Search content only: Use explicit path: prefix to exclude: "path:Project"
Find by tag: "tag:important" or "tag:project/web"
Find by property: "property:status:active"
Tag search supports hierarchical tags:
"tag:project" finds all project-related tags including project/web, project/mobile
"tag:web" finds any tag ending with "web" like project/web, design/web
When NOT to use:
Searching by date (use search_by_date instead)
Listing all notes (use list_notes for better performance)
Reading a specific note when you know the exact path (use read_note directly)
Returns: Search results with matched notes, relevance scores, and context. Filename matches have higher scores than content matches. Response includes match_type field: "filename" or "content".
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query that matches BOTH filenames and content by default. Just type a note name to find it! Use prefixes for specific search types: 'tag:' for tags, 'path:' for ONLY filenames, 'property:' for metadata. | |
| context_length | No | How much text to show around each match for context. Higher values show more surrounding content. | |
| max_results | No | Maximum number of results to return. Use smaller values for faster responses and larger values for comprehensive searches. | |
| ctx | No |
TDQS
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 effectively describes key behaviors: default search mode (both filenames and content), ranking logic (filename matches ranked higher), search modes with prefixes, hierarchical tag support, and return format (results with scores, match_type). It doesn't mention performance characteristics like rate limits or authentication needs, but covers most operational aspects well.
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 well-structured with clear sections (default behavior, when to use, search modes, examples, when not to use, returns) and uses bullet points for readability. While comprehensive, some sections could be more concise (e.g., the examples are detailed but necessary). Every sentence adds value, but the overall length is substantial though justified by the tool's complexity.
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 moderate complexity (4 parameters, no output schema, no annotations), the description is highly complete. It covers purpose, usage guidelines, behavioral details, parameter semantics through examples, and return format. The lack of output schema is compensated by explicitly describing the response structure (results with scores, match_type). No significant gaps remain for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already documents most parameters well. The description adds valuable context beyond the schema: it explains the query parameter's default behavior (searches both filenames and content), provides multiple search mode examples with prefixes, and clarifies tag hierarchy support. However, it doesn't add meaningful information about the other parameters (context_length, max_results, ctx) beyond what's in their 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 the tool searches for notes by filename or content with smart ranking. It specifies the verb 'search' and resource 'notes', distinguishing it from siblings like list_notes (listing all notes) and search_by_date (searching by date). The opening sentence is specific and immediately communicates the core functionality.
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 explicit guidance on when to use this tool (e.g., finding notes by name, content, tags, folders, properties) and when NOT to use it (e.g., searching by date, listing all notes, reading a specific note with exact path). It names specific alternative tools (search_by_date, list_notes, read_note) for excluded use cases, offering clear decision boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_note_toolA
Update the content of an existing note.
ā ļø IMPORTANT: By default, this REPLACES the entire note content. Always read the note first if you need to preserve existing content.
When to use:
Updating a note with completely new content (replace)
Adding content to the end of a note (append)
Programmatically modifying notes
When NOT to use:
Making small edits (read first, then update with full content)
Creating new notes (use create_note instead)
Returns: Update status with path, metadata, and operation performed
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Which note to update in your vault | |
| content | Yes | New content for the note. By default this REPLACES all existing content. Use merge_strategy='append' to add to the end instead. | |
| create_if_not_exists | No | Automatically create the note if it doesn't exist yet | |
| merge_strategy | No | How to handle existing content. 'replace' = overwrite everything (default), 'append' = add new content to the end | replace |
| ctx | No |
TDQS
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 effectively describes key traits: the default destructive behavior ('REPLACES the entire note content'), the need to read first to preserve content, and the return format ('Update status with path, metadata, and operation performed'). However, it lacks details on permissions, rate limits, or error handling, leaving some gaps.
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 well-structured and front-loaded, starting with the core purpose followed by important warnings and usage guidelines. Each sentence earns its place: the first states the action, the warning highlights critical behavior, and the bullet points provide clear context without redundancy. It's appropriately sized for a tool with multiple parameters and behavioral nuances.
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 complexity (5 parameters, no annotations, no output schema), the description does a good job covering key aspects: purpose, usage, behavioral traits, and some parameter context. However, it doesn't fully explain the return values beyond a brief mention, and with no output schema, more detail on the 'Update status' would be helpful. It's mostly complete but has minor 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?
Schema description coverage is high at 80%, setting a baseline of 3. The description adds value by explaining the default behavior ('REPLACES the entire note content') and mentioning the 'append' option for 'merge_strategy', which complements the schema. It also implicitly clarifies that 'path' identifies the note and 'content' is the new text, though it doesn't detail all parameters like 'create_if_not_exists' or 'ctx'.
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 ('Update') and resource ('content of an existing note'), making the purpose specific. It distinguishes from sibling tools like 'create_note_tool' (for creating new notes) and 'edit_note_section_tool' (for small edits), which helps differentiate its role in the toolset.
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 explicit guidance with dedicated 'When to use' and 'When NOT to use' sections. It specifies scenarios like replacing content, appending, and programmatic modifications, while warning against small edits (suggesting 'read first') and directing to 'create_note' for new notes. This clearly defines when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tags_toolA
Update tags on a note - either replace all tags or merge with existing.
When to use:
After analyzing a note's content to suggest relevant tags
Reorganizing tags across your vault
Setting consistent tags based on note types or projects
AI-driven tag suggestions ("What is this note about? Add appropriate tags")
When NOT to use:
Just adding a few tags (use add_tags)
Just removing specific tags (use remove_tags)
Returns: Previous tags, new tags, and operation performed
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note | |
| tags | Yes | New tags for the note. Empty list removes all tags. Don't include # symbols. Supports hierarchical tags with forward slashes. | |
| merge | No | True = add these tags to existing ones, False = replace all tags with this new list | |
| ctx | No |
TDQS
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 effectively explains the tool's behavior: it can replace or merge tags, and an empty tags list removes all tags (as noted in the schema). It also describes the return values. However, it doesn't mention potential side effects like error conditions or permissions needed, which keeps it from a perfect score.
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 well-structured with clear sections (purpose, usage guidelines, returns) and uses bullet points for readability. Every sentence adds value, such as distinguishing from siblings and explaining parameter behavior, with no wasted words. It's appropriately sized for the tool's complexity.
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 annotations and no output schema, the description does a good job covering purpose, usage, and behavior. It explains the return values and key parameters. However, it doesn't address potential errors or edge cases (e.g., what happens if the path doesn't exist), which would enhance completeness for a mutation tool with 4 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the description doesn't need to fully compensate. It adds value by clarifying the 'merge' parameter's semantics ('True = add these tags to existing ones, False = replace all tags with this new list') and implies usage of 'tags' and 'path' in context. However, it doesn't explain the 'ctx' parameter, which has no description in the schema, leaving a minor gap.
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 starts with a clear, specific statement: 'Update tags on a note - either replace all tags or merge with existing.' This explicitly states the verb ('update'), resource ('tags on a note'), and distinguishes it from siblings like add_tags_tool and remove_tags_tool by mentioning replacement vs. merging. It goes beyond just restating the name/title.
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 includes explicit 'When to use' and 'When NOT to use' sections with concrete scenarios (e.g., 'After analyzing a note's content to suggest relevant tags') and named alternatives (e.g., 'use add_tags' or 'use remove_tags'). This provides clear guidance on when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_note_images_toolA
Extract and analyze images embedded in a note.
When to use:
Analyzing images referenced in a note's markdown content
Examining visual content within notes (screenshots, diagrams, etc.)
Extracting specific images from notes for analysis
When NOT to use:
Reading standalone image files (use read_image instead)
Getting note content without images (use read_note instead)
Returns: List of Image objects that Claude can analyze and describe
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the note containing images | |
| image_index | No | ||
| max_width | No | Resize images wider than this to save memory. Images smaller than this are unchanged. | |
| ctx | No |
TDQS
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 effectively describes what the tool does (extract/analyze embedded images), specifies the return format (List of Image objects), and mentions that Claude can analyze/describe them. It doesn't cover error conditions, performance characteristics, or memory implications of image processing, but provides solid core behavioral information.
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 well-structured with clear sections (purpose, when to use, when not to use, returns). Each sentence earns its place by providing essential information without redundancy. The front-loaded purpose statement immediately communicates the tool's function.
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 annotations and no output schema, the description provides good contextual completeness. It explains what the tool does, when to use it, what it returns, and distinguishes it from alternatives. The main gap is lack of explicit mention of the 'max_width' parameter's memory-saving purpose, but overall it's quite comprehensive given the structured data limitations.
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 50% schema description coverage, the description doesn't mention any parameters directly. However, the schema provides good documentation for the 4 parameters, including clear descriptions and examples for 'path' and 'image_index'. The description doesn't add parameter-specific context beyond what's implied by the tool's purpose, meeting the baseline for moderate schema coverage.
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 purpose with specific verbs ('extract and analyze') and resources ('images embedded in a note'), distinguishing it from siblings like read_note (text only) and read_image (standalone files). The first sentence provides a concise, accurate summary of functionality.
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 includes explicit 'When to use' and 'When NOT to use' sections with named alternatives (read_image, read_note). This provides clear guidance on when this tool is appropriate versus when to use sibling tools, covering both inclusion and exclusion criteria.
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.
27 tool updates
v2.1.6- First observed
add_tags_tool - First observed
batch_update_properties_tool - First observed
create_folder_tool - First observed
create_note_tool - First observed
delete_note_tool - First observed
edit_note_section_tool - First observed
find_broken_links_tool - First observed
find_orphaned_notes_tool - First observed
get_backlinks_tool - First observed
get_note_info_tool - First observed
get_outgoing_links_tool - First observed
list_folders_tool - First observed
list_notes_tool - First observed
list_tags_tool - First observed
move_folder_tool - First observed
move_note_tool - First observed
read_image_tool - First observed
read_note_tool - First observed
remove_tags_tool - First observed
rename_note_tool - First observed
search_by_date_tool - First observed
search_by_property_tool - First observed
search_by_regex_tool - First observed
search_notes_tool - First observed
update_note_tool - First observed
update_tags_tool - First observed
view_note_images_tool
TDQS
Most tools have distinct purposes with clear boundaries, such as read_note vs. get_note_info, or add_tags vs. update_tags. However, there is some overlap between search_notes and search_by_property/search_by_date, which could cause confusion about which to use for specific queries, though descriptions help clarify.
Tool names follow a consistent snake_case pattern with clear verb_noun structures, such as create_note, delete_note, update_note, and search_notes. This predictability makes it easy to understand each tool's function at a glance across the entire set.
With 27 tools, the count feels heavy for a note-taking server, though it covers a broad range of operations. While comprehensive, it may overwhelm users with too many specialized tools, such as separate search_by_date and search_by_property tools, where a more unified search could suffice.
The tool set provides complete CRUD and lifecycle coverage for Obsidian vault management, including note creation, reading, updating, deletion, moving, renaming, tagging, searching, and maintenance tasks like finding broken links or orphaned notes. No obvious gaps exist for the domain.
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.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analyā¦
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, aā¦
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with Obsidian vaults, providing tools for reading, creating, editing and managing notes and tags.3,468733MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Obsidian vaults through direct filesystem access, supporting note management, lightning-fast search with SQLite indexing, image analysis, tag/link management, and bulk operations.MIT
- 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.3,468-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Obsidian vaults via direct filesystem access for managing notes, folders, and metadata. It features advanced search capabilities and multi-layer caching to provide efficient, real-time access to your personal knowledge base.3,468MIT
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/adrienthebo/obsidian-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server