Obsidian MCP Extended
Provides comprehensive tools for interacting with Obsidian vaults, including filesystem-native operations (backlinks, tags, tasks, Dataview fields, Kanban boards, link analysis, canvas files, templates) and API-based plugins (Dataview DQL, Templater, workspace management, command execution) when the Obsidian Local REST API plugin is active.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Obsidian MCP Extended find broken links in vault"
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 Extended
A comprehensive MCP server for Obsidian with 45 tools across hybrid filesystem-native and API-based architectures. Extends obsidian-mcp with advanced plugin control, backlinks, tag management, and analytics.
Note: This project extends the base
obsidian-mcpserver. The original README is preserved as README.upstream.md.
๐ Features
Hybrid Architecture
Filesystem-Native Tools (33 tools) - Work completely offline, no Obsidian required:
โ Direct file access for maximum performance
โ Zero Obsidian plugins needed
โ Instant startup, minimal memory
โ Full offline capability
API-Based Tools (12 tools) - Enhanced features when Obsidian is running:
๐ Real-time workspace control
๐ Advanced plugin integration (Templater, Dataview DQL)
๐ Command palette access
๐ Requires Local REST API plugin
Related MCP server: obsidian-mcp-pro
๐ฆ Complete Tool List (45 Tools)
๐ Backlink Analysis (2 tools - Filesystem)
get_backlinks_fs- Find all notes linking to a specific noteget_broken_links_fs- Identify broken wikilinks in vault
๐ท๏ธ Tag Management (4 tools - Filesystem)
analyze_note_tags_fs- Extract frontmatter and inline tagsadd_tag_fs- Add tags to note frontmatterremove_tag_fs- Remove tags from frontmattersearch_by_tag_fs- Find notes by tag
โ๏ธ Smart Content Insertion (4 tools - Filesystem)
insert_after_heading_fs- Insert content after specific headingsinsert_after_block_fs- Insert after block referencesupdate_frontmatter_field_fs- Update/add frontmatter fieldsappend_to_note_fs- Append content to note end
๐ Statistics & Analytics (2 tools - Filesystem)
note_statistics_fs- Comprehensive stats for individual notesvault_statistics_fs- Aggregate vault statistics
โ Tasks Plugin (5 tools - Filesystem)
search_tasks- Search tasks with emoji metadata (๐ โซ๐โ )create_task- Create tasks with metadatatoggle_task_status- Toggle complete/incompleteupdate_task_metadata- Update due dates, priority, recurrenceget_task_statistics- Task completion analytics
๐ Dataview Inline Fields (4 tools - Filesystem)
extract_dataview_fields- Parse all syntax variants (::, [], ())search_by_dataview_field- Find notes by field valuesadd_dataview_field- Add inline fieldsremove_dataview_field- Remove inline fields
๐ Kanban Boards (5 tools - Filesystem)
parse_kanban_board- Parse markdown Kanban structureadd_kanban_card- Add cards to columnsmove_kanban_card- Move cards between columnstoggle_kanban_card- Toggle card completionget_kanban_statistics- Board analytics
๐ Enhanced Link Tracking (5 tools - Filesystem)
get_link_graph- Complete vault link graphfind_orphaned_notes- Identify isolated notesfind_hub_notes- Find highly connected notesanalyze_link_health- Vault connectivity metricsget_note_connections- Multi-level connection exploration
๐จ Canvas Files (5 tools - Filesystem)
parse_canvas- Parse JSON Canvas v1.0 filesadd_canvas_node- Add text/file nodesadd_canvas_edge- Connect nodes with edgesremove_canvas_node- Delete nodesget_canvas_node_connections- Analyze node relationships
๐ Templates (3 tools - Filesystem)
expand_template- Simple {{variable}} expansioncreate_note_from_template_fs- Apply templates offlinelist_templates- Browse available templates
๐ Dataview Query API (4 tools - Requires Obsidian + Dataview)
execute_dataview_query- Execute full DQL queries (LIST/TABLE/TASK)list_notes_by_tag_dql- DQL tag-based querieslist_notes_by_folder_dql- DQL folder queriestable_query_dql- Create tabular data views
๐ Templater Plugin API (3 tools - Requires Obsidian + Templater)
render_templater_template- Dynamic template renderingcreate_note_from_template_api- Create notes from Templater templatesinsert_templater_template- Insert templates at cursor
๐ Workspace Management (6 tools - Requires Obsidian)
get_active_file- Get currently active fileopen_file- Open files in Obsidianclose_active_file- Close current filenavigate_back- Navigate backward in historynavigate_forward- Navigate forward in historytoggle_edit_mode- Switch edit/preview mode
๐ Command Execution (3 tools - Requires Obsidian)
execute_command- Run Obsidian commandslist_commands- List all available commandssearch_commands- Search commands by name/ID
๐ Quick Start
Prerequisites
# Python 3.11+ required
python --version
# Install uv (recommended package manager)
curl -LsSf https://astral.sh/uv/install.sh | shInstallation
# Clone repository
git clone https://github.com/aleksakarac/obsidian-mcp.git
cd obsidian-mcp
# Install with uv (recommended)
uv pip install .
# Or with pip
pip install .Configuration
For Filesystem-Only Tools (No Obsidian Required)
Add to your Claude Code config (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/obsidian-mcp",
"run",
"obsidian-mcp"
],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}For Full Hybrid Mode (Filesystem + API Tools)
Install Local REST API plugin in Obsidian
Configure plugin settings:
Enable HTTPS: No (use HTTP for localhost)
API Key: Generate a secure key
Port: 27124 (default)
Update Claude Code config:
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/obsidian-mcp",
"run",
"obsidian-mcp"
],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault",
"OBSIDIAN_REST_API_KEY": "your-api-key-here",
"OBSIDIAN_API_URL": "http://localhost:27124"
}
}
}
}๐ Usage Examples
Tasks Plugin (Filesystem-Native)
# Search for high-priority incomplete tasks
search_tasks(
status="incomplete",
priority="high",
sort_by="due_date",
limit=10
)
# Create task with metadata
create_task(
file_path="Projects/Current.md",
content="Review PR #123",
priority="high",
due_date="2025-11-01",
tags=["code-review", "urgent"]
)Dataview Fields (Filesystem-Native)
# Extract all inline fields
extract_dataview_fields(file_path="Project Notes.md")
# Find notes where status=active
search_by_dataview_field(
field_name="status",
field_value="active"
)Kanban Boards (Filesystem-Native)
# Parse board structure
parse_kanban_board(file_path="Boards/Sprint.md")
# Move card between columns
move_kanban_card(
file_path="Boards/Sprint.md",
card_text="Implement authentication",
from_column="To Do",
to_column="In Progress"
)Link Analysis (Filesystem-Native)
# Find orphaned notes
find_orphaned_notes()
# Get link graph
get_link_graph()
# Analyze vault health
analyze_link_health()Dataview Queries (Requires Obsidian)
# Execute DQL query
execute_dataview_query(
query="TABLE status, due FROM #project WHERE status = 'active'"
)Workspace Control (Requires Obsidian)
# Open file
open_file(file_path="Daily/2025-10-22.md")
# Get active file
get_active_file()
# Execute command
execute_command(command_id="editor:toggle-bold")๐๏ธ Architecture
Hybrid Design Philosophy
Filesystem-First Approach:
Everything that CAN be filesystem-native, IS filesystem-native
Direct file access for reading/writing markdown
Zero dependencies on Obsidian plugins for core features
Full offline capability
API Enhancement:
API tools complement filesystem tools
Provide features impossible without Obsidian (workspace UI, command execution)
Enable plugin integration (Templater, Dataview DQL)
Graceful degradation with clear error messages
Technology Stack
FastMCP: MCP protocol implementation
Pydantic: Type-safe data models with validation
Python Standard Library: Zero external dependencies for filesystem operations
httpx: Async HTTP client for API tools
Performance
Filesystem Tools:
1,000 notes: < 3 seconds for full vault scans
Single note operations: < 100ms
Link graph generation: < 10 seconds for 1,000 notes
API Tools:
Command execution: < 500ms
Query execution: Depends on Dataview plugin
Workspace operations: < 200ms
๐งช Testing
See TESTING.md for comprehensive testing documentation.
# Run all tests
uv run pytest
# Run specific test suite
uv run pytest tests/unit/test_tasks.py -v
# Run with coverage
uv run pytest --cov=src --cov-report=html๐ Development
Project Structure
obsidian-mcp/
โโโ src/
โ โโโ models/ # Pydantic data models
โ โโโ tools/ # MCP tool implementations
โ โโโ utils/ # Shared utilities (patterns, API client)
โ โโโ server.py # FastMCP server with tool registrations
โโโ tests/
โ โโโ unit/ # Unit tests for tools
โ โโโ integration/ # End-to-end workflow tests
โโโ specs/ # Feature specifications
โโโ pyproject.toml # Project configurationAdding New Tools
Create tool module in
src/tools/Add Pydantic models to
src/models/obsidian.py(if needed)Register tool in
src/server.pywith@mcp.tool()decoratorAdd unit tests in
tests/unit/Update README.md and CHANGELOG.md
๐ค Contributing
Contributions welcome! Please:
Follow existing code style
Add tests for new features
Update documentation
Ensure all tests pass
๐ License
MIT License - see LICENSE for details
๐ Acknowledgments
Base implementation: obsidian-mcp
MCP Protocol: Model Context Protocol
Obsidian: Obsidian.md
๐ Additional Documentation
TESTING.md - Testing guide
CHANGELOG.md - Version history
README.upstream.md - Original obsidian-mcp README
specs/ - Feature specifications and design docs
Available Tools
63 toolsadd_canvas_node_toolC
Add node to Canvas (filesystem-native, offline).
Inputs: file_path (required), node_type (required), content (required), x (required), +3 more.
add_dataview_field_toolA
Add a Dataview inline field to a note (filesystem-native, offline).
Creates a new Dataview field using the specified syntax variant. Automatically detects and preserves value types (number, boolean, date, etc.).
Syntax variants:
full-line:
field:: value(standalone line, most common)bracket:
[field:: value](inline, visible in reading mode)paren:
(field:: value)(inline, hidden key in reading mode)
Insertion positions:
after_frontmatter: After YAML frontmatter (or start if none)
start: Very beginning of file
end: Very end of file
When to use:
Adding metadata to existing notes
Batch tagging/categorization
Automated property assignment
Template-based field injection
Returns: Success status, formatted field string, and canonical key
Inputs: file_path (required), key (required), value (required), syntax_type, +3 more.
add_kanban_card_toolA
Add a new card to a Kanban board column (filesystem-native, offline).
Creates a new card with optional metadata and inserts it at the specified position in the target column. Preserves all existing cards and board structure.
Card format:
Incomplete: - [ ] Card text
Completed: - [x] Card text
With metadata: - [ ] Card text @{2025-10-30} #tag [[link]]
When to use:
Adding tasks to project boards
Batch card creation
Automated workflow management
Template-based board setup
Performance:
< 500ms for boards with 1,000 cards
Returns: Success status, column name, position, and formatted card line
Inputs: file_path (required), column_name (required), card_text (required), status, +4 more.
add_tag_fs_toolA
Add a tag to a note's frontmatter.
Creates frontmatter if it doesn't exist. Handles duplicate tags gracefully. Supports nested tags (e.g., "project/active/critical").
When to use:
Adding tags to organize notes
Bulk tagging operations
Automated note categorization
Performance: < 200ms per operation
Returns: Success status and descriptive message
Inputs: filepath (required), tag (required), vault_path, ctx.
add_tags_toolA
Add tags to a note's frontmatter.
When to use:
Organizing notes with tags
Bulk tagging operations
Adding metadata for search
When NOT to use:
Adding tags in note content (use update_note)
Replacing all tags (use update_note with new frontmatter)
Returns: Updated tag list for the note
Inputs: path (required), tags (required), ctx.
analyze_link_health_toolA
Analyze vault-wide link health metrics (filesystem-native, offline).
Provides comprehensive vault health analysis including:
Total notes and links
Orphaned notes count
Notes with no inlinks/outlinks
Broken links count
Average links per note
Link density score
When to use:
Vault health assessment
Identifying maintenance needs
Tracking vault evolution over time
Understanding vault connectivity
Performance:
1,000 notes: < 15 seconds
10,000 notes: < 150 seconds
Returns: Comprehensive health metrics with counts and averages
Inputs: vault_path, ctx.
analyze_note_tags_fs_toolA
Extract all tags (frontmatter and inline) from a specific note.
This tool analyzes a note's content and extracts:
Frontmatter tags (from YAML tags field)
Inline tags (#tag syntax in content)
Deduplicated list of all tags
When to use:
Understanding what tags a note has
Before adding tags to avoid duplicates
Analyzing tag usage patterns
Performance: < 100ms per note
Returns: Tags organized by source (frontmatter, inline, all)
Inputs: filepath (required), vault_path, ctx.
append_to_note_fs_toolA
Append content to the end of a note.
Adds content at the very end of the file. Useful for adding appendices, logs, or any content that should come after all existing content.
When to use:
Adding appendices or footnotes
Appending log entries
Building chronological content
Adding content when position doesn't matter
Performance:
Any note size: < 100ms
Returns: Success status and descriptive message
Inputs: filepath (required), content (required), vault_path, ctx.
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., "Apple/Studies/J71P")
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, "Apple/Studies/J71P" will create Apple, Apple/Studies, and Apple/Studies/J71P if they don't exist.
Returns: Creation status with list of folders created and placeholder file path
Inputs: folder_path (required), create_placeholder, ctx.
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
Inputs: path (required), content (required), overwrite, ctx.
create_task_toolA
Create a new task with Tasks plugin metadata (filesystem-native, offline).
Creates a checkbox task with optional metadata (priority, dates, recurrence) and inserts it at the specified location in the file. Creates the file if it doesn't exist.
Metadata will be formatted using Tasks plugin emoji syntax:
Priority: โซ๐ผ๐ฝโฌ emojis
Dates: ๐ โณ๐ซโ โ emojis with YYYY-MM-DD
Recurrence: ๐ emoji with pattern
When to use:
Adding tasks to project notes
Creating recurring task templates
Batch task creation
Automated task generation
Returns: Success status, formatted task line, line number, and file path
Inputs: file_path (required), task_content (required), priority, due_date, +7 more.
delete_note_toolC
Delete a note from the vault.
Args: path: Path to the note to delete
Returns: Deletion status
Inputs: path (required), ctx.
execute_command_toolB
Execute Obsidian command (requires Obsidian running).
Inputs: command_id (required), ctx.
execute_dataview_query_toolA
Execute a Dataview Query Language (DQL) query (requires Obsidian + Dataview plugin).
Executes full DQL queries with all Dataview plugin capabilities:
LIST: Simple page lists
TABLE: Tabular data views
TASK: Task queries
CALENDAR: Date-based views
Supports all DQL clauses: FROM, WHERE, SORT, LIMIT, GROUP BY
When to use:
Complex queries beyond filesystem capabilities
Leveraging Dataview's computed fields
Accessing Dataview's metadata indices
Real-time query results
Requires:
Obsidian running
Dataview plugin installed and enabled
Local REST API plugin enabled
Returns: Query results in Dataview's structured format
Inputs: query (required), ctx.
expand_template_toolC
Expand template variables (filesystem-native, offline).
Inputs: template_path (required), variables, vault_path, ctx.
extract_dataview_fields_toolA
Extract all Dataview inline fields from a note (filesystem-native, offline).
Parses all three Dataview inline field syntax variants:
Full-line:
field:: valueBracket:
[field:: value](inline, visible)Paren:
(field:: value)(inline, hidden key)
Automatically detects value types:
String, number, boolean, date (ISO8601)
Wikilink: [[note]]
List: "item1", "item2" or item1, item2
Skips code blocks to avoid false matches.
When to use:
Extracting metadata from notes
Auditing field usage
Migrating to frontmatter
Understanding note properties
Performance:
Single note: < 100ms
Processes up to 10,000 fields per second
Returns: All fields with keys, values, types, syntax variants, and line numbers
Inputs: file_path (required), vault_path, ctx.
find_broken_links_toolA
Find all broken links in the vault or a specific directory.
When to use:
After renaming or deleting notes
Regular vault maintenance
Before reorganizing folder structure
Cleaning up after imports
When NOT to use:
Checking links in a single note (use get_outgoing_links with check_validity)
Finding backlinks (use get_backlinks)
Returns: All broken links grouped by source note
Inputs: directory, ctx.
find_hub_notes_toolA
Find hub notes with high outlink counts (filesystem-native, offline).
Identifies notes that link to many other notes (hubs/MOCs/index notes). These are typically index pages, maps of content, or navigation notes.
When to use:
Finding index/MOC notes
Identifying central navigation points
Understanding information architecture
Discovering organizational structures
Performance:
1,000 notes: < 10 seconds
10,000 notes: < 100 seconds
Returns: List of hub notes sorted by outlink count (highest first)
Inputs: min_outlinks, vault_path, ctx.
find_orphaned_notes_toolA
Find orphaned notes with no connections (filesystem-native, offline).
Identifies notes that have neither inlinks nor outlinks - completely isolated notes that aren't referenced anywhere and don't reference anything else.
When to use:
Vault cleanup and maintenance
Finding forgotten or unused notes
Identifying candidates for archiving
Improving vault connectivity
Performance:
1,000 notes: < 10 seconds
10,000 notes: < 100 seconds
Returns: List of orphaned notes with file paths
Inputs: vault_path, ctx.
get_active_file_toolC
Get currently active file (requires Obsidian running).
Inputs: ctx.
get_backlinks_fs_toolA
Find all notes that link to a specified note (filesystem-native, no Obsidian required).
This tool uses direct filesystem access for maximum performance and works without requiring Obsidian to be running. It scans all markdown files in the vault to find wikilinks pointing to the target note.
When to use:
Finding which notes reference a specific concept/note
Building connection graphs without Obsidian running
High-performance backlink discovery for large vaults
Batch processing multiple notes
Performance:
1,000 notes: < 2 seconds
10,000 notes: < 20 seconds
Returns: All notes containing wikilinks to the target note with context
Inputs: note_name (required), vault_path, ctx.
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
Inputs: path (required), include_context, context_length, ctx.
get_broken_links_fs_toolA
Find all broken wikilinks in the vault (filesystem-native, no Obsidian required).
This tool uses direct filesystem access to scan all markdown files and identify wikilinks pointing to non-existent notes. Works without requiring Obsidian to be running.
When to use:
After renaming or deleting notes
Regular vault maintenance and cleanup
Before reorganizing folder structures
Identifying orphaned link references
Performance:
1,000 notes: < 10 seconds
10,000 notes: < 100 seconds
Returns: All broken links grouped by source note
Inputs: vault_path, ctx.
get_kanban_statistics_toolA
Get comprehensive statistics for a Kanban board (filesystem-native, offline).
Analyzes the board and provides:
Total cards, completed, incomplete counts
Per-column card counts and completion rates
Overall board completion percentage
Column names and structure
When to use:
Project progress tracking
Sprint velocity analysis
Board health monitoring
Generating board reports
Performance:
Boards with 100 cards: < 500ms
Boards with 1,000 cards: < 5 seconds
Returns: Comprehensive board statistics with counts and percentages
Inputs: file_path (required), vault_path, ctx.
get_link_graph_toolA
Get complete link graph for the vault (filesystem-native, offline).
Builds a comprehensive graph of all note connections, tracking:
Inlinks (notes linking TO each note)
Outlinks (notes linked FROM each note)
Link types (wikilinks, markdown links, embeds)
When to use:
Understanding vault structure and relationships
Analyzing note connectivity
Building visualization data
Identifying connection patterns
Performance:
1,000 notes: < 10 seconds
10,000 notes: < 100 seconds
Returns: Complete link graph with all note connections and link type counts
Inputs: vault_path, ctx.
get_note_connections_toolA
Get connection graph for a specific note (filesystem-native, offline).
Explores connections from a note up to specified depth:
Depth 1: Direct connections (notes linked from target)
Depth 2: Second-degree connections (notes linked from direct connections)
Depth 3: Third-degree connections
Provides both inlinks (backlinks) and outlinks with depth information.
When to use:
Understanding note relationships
Exploring local note neighborhoods
Finding related content
Building connection visualizations
Performance:
Depth 1: < 1 second
Depth 2: < 5 seconds
Depth 3: < 30 seconds
Returns: Connection graph with multi-level links and depth annotations
Inputs: note_name (required), depth, vault_path, ctx.
get_note_info_toolC
Get metadata and information about a note without retrieving its full content.
Args: path: Path to the note
Returns: Note metadata and statistics
Inputs: path (required), ctx.
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
Inputs: path (required), check_validity, ctx.
get_task_statistics_toolA
Get aggregate task statistics for a note or entire vault (filesystem-native).
Analyzes all tasks and provides:
Total, incomplete, completed counts
Breakdown by priority level
Overdue tasks (past due date, still incomplete)
Upcoming tasks (due within 7 days)
Recurring tasks count
Optional grouped data
When to use:
Project progress tracking
Workload analysis
Finding overdue tasks
Weekly planning
Performance:
Single note: < 100ms
Vault (1,000 notes): < 5 seconds
Returns: Comprehensive task statistics with counts and optional grouping
Inputs: scope (required), file_path, group_by, vault_path, +1 more.
insert_after_block_fs_toolA
Insert content immediately after a block reference.
Finds the specified block reference (^block-id) and inserts content after the line containing it. Accepts block IDs with or without the ^ prefix.
When to use:
Adding follow-up content to referenced blocks
Expanding on specific paragraphs
Building linked content structures
Programmatic content generation
Performance:
10,000 word notes: < 500ms
Returns: Success status and descriptive message
Inputs: filepath (required), block_id (required), content (required), vault_path, +1 more.
insert_after_heading_fs_toolA
Insert content immediately after a specific heading in a note.
Finds the specified heading (case-sensitive) and inserts content on the line immediately following it. If multiple headings with the same text exist, content is inserted after the first occurrence.
When to use:
Adding tasks to a "Tasks" section
Inserting notes under a "Notes" heading
Appending content to specific sections
Building structured content programmatically
Performance:
10,000 word notes: < 500ms
Returns: Success status and descriptive message
Inputs: filepath (required), heading (required), content (required), vault_path, +1 more.
list_commands_toolB
List all available commands (requires Obsidian running).
Inputs: ctx.
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
Inputs: directory, recursive, ctx.
list_notes_by_folder_dql_toolA
List notes in a folder using DQL (requires Obsidian + Dataview plugin).
Simplified interface for folder-based queries with optional filtering and sorting.
When to use:
Finding notes in specific folders with filters
Leveraging Dataview's folder indexing
Real-time folder queries
Returns: List of matching notes with Dataview metadata
Inputs: folder (required), where_clause, sort_by, limit, +1 more.
list_notes_by_tag_dql_toolA
List notes with a specific tag using DQL (requires Obsidian + Dataview plugin).
Simplified interface for tag-based queries with optional filtering and sorting.
When to use:
Finding notes by tag with complex filters
Leveraging Dataview's tag indexing
Real-time tag queries
Returns: List of matching notes with Dataview metadata
Inputs: tag (required), where_clause, sort_by, limit, +1 more.
list_notes_toolB
List notes in the vault or a specific directory.
Args: directory: Specific directory to list (optional, defaults to root) recursive: Whether to list all subdirectories recursively (default: true)
Returns: Vault structure and note paths
Inputs: directory, recursive, ctx.
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')
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
Returns: All unique tags with optional usage counts
Inputs: include_counts, sort_by, ctx.
list_templates_toolB
List available templates (filesystem-native, offline).
Inputs: template_folder, vault_path, ctx.
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
Inputs: source_folder (required), destination_folder (required), update_links, ctx.
move_kanban_card_toolA
Move a card between columns on a Kanban board (filesystem-native, offline).
Finds a card by matching its text, removes it from the source column, and adds it to the destination column. Preserves all metadata, subtasks, and formatting.
When to use:
Moving tasks through workflow stages
Dragging cards between columns programmatically
Batch workflow updates
Automated status changes
Performance:
< 500ms for boards with 1,000 cards
Returns: Success status, source/destination columns, and card details
Inputs: file_path (required), card_text (required), from_column (required), to_column (required), +3 more.
move_note_toolB
Move a note to a new location, optionally updating all links.
Args: source_path: Current path of the note destination_path: New path for the note update_links: Whether to update links in other notes (default: true)
Returns: Move status and updated links count
Inputs: source_path (required), destination_path (required), update_links, ctx.
note_statistics_fs_toolA
Get comprehensive statistics about a single note.
Analyzes the note for words, characters, lines, links (wikilinks and markdown), tags (frontmatter and inline), headings, code blocks, and file metadata.
Returns detailed metrics including:
Word count (excluding frontmatter and code blocks)
Character counts (with and without spaces)
Line count
Links: wikilinks, markdown links, total links
Tags: frontmatter and inline tags
Headings: count, by level, structure
Code: fenced code blocks and inline code
File metadata: size, timestamps
When to use:
Analyzing individual note complexity
Tracking note growth over time
Understanding note structure
Content auditing
Performance:
Any note size: < 1 second
Returns: Comprehensive statistics dictionary
Inputs: filepath (required), vault_path, ctx.
open_file_toolB
Open file in Obsidian (requires Obsidian running).
Inputs: file_path (required), new_pane, ctx.
parse_canvas_toolC
Parse Canvas file (filesystem-native, offline).
Inputs: file_path (required), vault_path, ctx.
parse_kanban_board_toolA
Parse a Kanban board file and extract its structure (filesystem-native, offline).
Parses markdown-based Kanban boards with the following structure:
Column Name (level 2 or 3 headings)
Card text with metadata
Nested subtask
Metadata formats:
Due dates: @{YYYY-MM-DD}
Tags: #tag (inline)
Wikilinks: [[note]]
Supports nested subtasks with indentation levels.
When to use:
Analyzing board structure
Extracting card data programmatically
Generating board reports
Understanding card relationships
Performance:
Boards with 100 cards: < 500ms
Boards with 1,000 cards: < 5 seconds
Returns: Board structure with columns, cards, subtasks, metadata, and statistics
Inputs: file_path (required), vault_path, ctx.
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)
Returns: Note content and metadata including tags, aliases, and frontmatter
Inputs: path (required), ctx.
remove_dataview_field_toolA
Remove a Dataview inline field from a note (filesystem-native, offline).
Removes all occurrences of a field by key (canonicalized matching), or a specific occurrence if line_number is provided.
For inline fields (bracket/paren syntax), removes only the field while preserving surrounding text. For full-line fields, removes the entire line.
When to use:
Cleaning up obsolete metadata
Removing duplicate fields
Migrating fields to frontmatter
Batch field removal
Returns: Success status, removed key, and canonical key
Inputs: file_path (required), key (required), line_number, vault_path, +1 more.
remove_tag_fs_toolA
Remove a tag from a note's frontmatter.
Handles non-existent tags gracefully. Only removes from frontmatter, not inline tags in content.
When to use:
Cleaning up old tags
Reorganizing tag taxonomy
Bulk tag removal operations
Performance: < 200ms per operation
Returns: Success status and descriptive message
Inputs: filepath (required), tag (required), vault_path, ctx.
remove_tags_toolA
Remove tags from a note's frontmatter.
Args: path: Path to the note tags: List of tags to remove (without # prefix)
Returns: Updated tag list
Inputs: path (required), tags (required), ctx.
render_templater_template_toolC
Render Templater template (requires Obsidian + Templater plugin).
Inputs: template_file (required), target_file, ctx.
search_by_dataview_field_toolA
Find all notes containing a specific Dataview field (filesystem-native, offline).
Searches across all markdown files in the vault for a field by key (and optionally value/type). Field keys are canonicalized for consistent matching:
"Project Status" โ "project-status"
"Due Date" โ "due-date"
When to use:
Finding notes with specific metadata
Discovering field usage patterns
Locating notes by custom properties
Building dynamic collections
Performance:
1,000 notes: < 5 seconds
10,000 notes: < 50 seconds
Returns: Matching fields grouped by file, with total counts and file list
Inputs: key (required), value, value_type, vault_path, +1 more.
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
Inputs: date_type, days_ago, operator, ctx.
search_by_tag_fs_toolA
Find all notes containing a specific tag (frontmatter or inline).
Searches entire vault for notes with the specified tag in either frontmatter or inline (#tag) format. Supports nested tags.
When to use:
Finding all notes in a category
Building tag-based navigation
Analyzing tag usage across vault
Finding related notes
Performance:
1,000 notes: < 3 seconds
10,000 notes: < 30 seconds
Returns: List of notes with tag locations (frontmatter/inline)
Inputs: tag (required), vault_path, ctx.
search_notes_toolA
Search for notes containing specific text or matching search criteria.
When to use:
Finding notes by content keywords
Locating notes with specific tags
Searching within specific folders
When NOT to use:
Searching by date (use search_by_date instead)
Listing all notes (use list_notes for better performance)
Finding a specific known note (use read_note directly)
Returns: Search results with matched notes, relevance scores, and context
Inputs: query (required), context_length, ctx.
search_tasks_toolA
Search and filter tasks by metadata across the vault (filesystem-native, offline).
Scans all markdown files in the vault and extracts tasks with Tasks plugin metadata (due dates, priorities, recurrence). Supports comprehensive filtering and sorting.
Metadata Format (Tasks Plugin):
Priority: โซ (highest), ๐ผ (high), ๐ฝ (low), โฌ (lowest), none (normal)
Due date: ๐ YYYY-MM-DD
Scheduled: โณ YYYY-MM-DD
Start date: ๐ซ YYYY-MM-DD
Done date: โ YYYY-MM-DD
Recurrence: ๐ every
When to use:
Finding overdue tasks
Viewing high-priority tasks
Planning weekly schedules
Reviewing recurring tasks
Performance:
1,000 notes: < 3 seconds
10,000 notes: < 30 seconds
Returns: Tasks matching filters with full metadata, file locations, and line numbers
Inputs: vault_path, status, priority, due_before, +8 more.
table_query_dql_toolB
Execute a DQL TABLE query (requires Obsidian + Dataview plugin).
Creates tabular views of note metadata with custom fields.
When to use:
Creating structured data views
Displaying multiple fields in table format
Building reports and dashboards
Analyzing note collections
Returns: Table results with specified fields and rows
Inputs: fields (required), from_clause, where_clause, sort_by, +2 more.
toggle_kanban_card_toolA
Toggle a Kanban card's completion status (filesystem-native, offline).
Toggles the checkbox between - [ ] (incomplete) and - [x] (completed).
Preserves all metadata, subtasks, and formatting.
When to use:
Marking cards complete/incomplete
Batch status updates
Automated workflow transitions
Quick status changes
Performance:
< 500ms for boards with 1,000 cards
Returns: Success status, new status, and card details
Inputs: file_path (required), card_text (required), vault_path, ctx.
toggle_task_status_toolA
Toggle task completion status between incomplete and completed (filesystem-native).
Toggles the checkbox between - [ ] (incomplete) and - [x] (completed).
Optionally adds a done date (โ
YYYY-MM-DD) when marking tasks as complete.
When to use:
Marking tasks complete
Unchecking accidentally completed tasks
Batch status updates via automation
Returns: Success status, new status, done date (if added), and updated line
Inputs: file_path (required), line_number (required), add_done_date, vault_path, +1 more.
update_frontmatter_field_fs_toolA
Update or add a field in note's YAML frontmatter.
If the note has no frontmatter, it will be created. If the field already exists, its value will be updated. Otherwise, the field will be added. Supports strings, numbers, booleans, and lists.
When to use:
Updating note status or metadata
Adding creation/modification timestamps
Managing custom frontmatter fields
Programmatic metadata management
Performance:
Any note size: < 200ms
Returns: Success status and descriptive message
Inputs: filepath (required), field (required), value (required), vault_path, +1 more.
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
Inputs: path (required), content (required), create_if_not_exists, merge_strategy, +1 more.
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
Inputs: path (required), tags (required), merge, ctx.
update_task_metadata_toolA
Update task metadata without changing the task content (filesystem-native).
Updates priority, dates, or recurrence patterns while preserving the task description. Pass null/None to remove metadata fields.
When to use:
Rescheduling tasks
Changing task priorities
Adding/removing recurrence
Batch metadata updates
Returns: Success status, updated line, and list of changes made
Inputs: file_path (required), line_number (required), priority, due_date, +5 more.
vault_statistics_fs_toolA
Get aggregate statistics for the entire vault.
Walks through the vault directory, analyzes all markdown files (excluding .obsidian), and aggregates statistics. Uses memory-efficient generator-based iteration.
Returns:
Total notes count
Total words across all notes
Total links (wikilinks + markdown links)
Unique tags count and sorted list
Average words per note
When to use:
Understanding vault size and complexity
Content inventory and auditing
Identifying most-used tags
Tracking vault growth
Performance:
1,000 notes: < 30 seconds
10,000 notes: < 5 minutes
Returns: Vault-wide aggregate statistics
Inputs: vault_path, ctx.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 63 tools
There is substantial overlap among tools, particularly for tag operations (add_tag_fs_tool vs add_tags_tool, remove_tag_fs_tool vs remove_tags_tool) and link analysis (multiple backlink and broken link tools). This makes it difficult for an agent to select the correct tool.
Naming follows a verb_noun pattern but is inconsistent: some tools include '_fs' suffix, some don't; pluralization varies (add_tag vs add_tags); and verbs like 'get', 'find', 'search', 'list' are used interchangeably. While readable, the pattern is not uniform.
With 63 tools, the server is overly large and includes many redundant variations. This exceeds the typical well-scoped range (3-15) and would benefit from consolidation or splitting into focused sub-servers.
The tool set covers nearly all Obsidian operations: note/folder CRUD, tag management, search, link analysis, tasks, Kanban, Canvas, Dataview, templates, and command execution. Minor gaps exist (e.g., no explicit rename or attachment management), but overall it is very comprehensive.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Nifty's MCP server โ exposes tasks, projects, messages, and files as tools for AI agents.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server for managing Obsidian-style note vaults, providing tools for full-text search, note creation, and backlink tracking. It enables users to navigate, structure, and update their personal knowledge base through natural language.9MIT
- AlicenseAqualityBmaintenanceThe most feature-complete MCP server for Obsidian vaults. 23 tools and 3 resources for search, read, write, tags, link analysis, graph traversal, and canvas support.41188 npm33MIT
- AlicenseBqualityDmaintenanceLocal-first MCP server for Obsidian vaults with 66 tools for reading, writing, searching, and managing notes, tasks, graphs, and more. Works without Obsidian running and requires no plugins.66MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for Obsidian that enables canvas creation with auto-layout, BM25-ranked search, vault theme mapping, and 27 tools for managing notes, files, and links.15 npm14MIT