Skip to main content
Glama
Obsidian MCP Extended

Obsidian MCP Extended

by aleksakarac

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-mcp server. 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)

  • get_backlinks_fs - Find all notes linking to a specific note

  • get_broken_links_fs - Identify broken wikilinks in vault

๐Ÿท๏ธ Tag Management (4 tools - Filesystem)

  • analyze_note_tags_fs - Extract frontmatter and inline tags

  • add_tag_fs - Add tags to note frontmatter

  • remove_tag_fs - Remove tags from frontmatter

  • search_by_tag_fs - Find notes by tag

โœ๏ธ Smart Content Insertion (4 tools - Filesystem)

  • insert_after_heading_fs - Insert content after specific headings

  • insert_after_block_fs - Insert after block references

  • update_frontmatter_field_fs - Update/add frontmatter fields

  • append_to_note_fs - Append content to note end

๐Ÿ“Š Statistics & Analytics (2 tools - Filesystem)

  • note_statistics_fs - Comprehensive stats for individual notes

  • vault_statistics_fs - Aggregate vault statistics

โœ… Tasks Plugin (5 tools - Filesystem)

  • search_tasks - Search tasks with emoji metadata (๐Ÿ“…โซ๐Ÿ”โœ…)

  • create_task - Create tasks with metadata

  • toggle_task_status - Toggle complete/incomplete

  • update_task_metadata - Update due dates, priority, recurrence

  • get_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 values

  • add_dataview_field - Add inline fields

  • remove_dataview_field - Remove inline fields

๐Ÿ“‹ Kanban Boards (5 tools - Filesystem)

  • parse_kanban_board - Parse markdown Kanban structure

  • add_kanban_card - Add cards to columns

  • move_kanban_card - Move cards between columns

  • toggle_kanban_card - Toggle card completion

  • get_kanban_statistics - Board analytics

  • get_link_graph - Complete vault link graph

  • find_orphaned_notes - Identify isolated notes

  • find_hub_notes - Find highly connected notes

  • analyze_link_health - Vault connectivity metrics

  • get_note_connections - Multi-level connection exploration

๐ŸŽจ Canvas Files (5 tools - Filesystem)

  • parse_canvas - Parse JSON Canvas v1.0 files

  • add_canvas_node - Add text/file nodes

  • add_canvas_edge - Connect nodes with edges

  • remove_canvas_node - Delete nodes

  • get_canvas_node_connections - Analyze node relationships

๐Ÿ“ Templates (3 tools - Filesystem)

  • expand_template - Simple {{variable}} expansion

  • create_note_from_template_fs - Apply templates offline

  • list_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 queries

  • list_notes_by_folder_dql - DQL folder queries

  • table_query_dql - Create tabular data views

๐Ÿ”Œ Templater Plugin API (3 tools - Requires Obsidian + Templater)

  • render_templater_template - Dynamic template rendering

  • create_note_from_template_api - Create notes from Templater templates

  • insert_templater_template - Insert templates at cursor

๐Ÿ”Œ Workspace Management (6 tools - Requires Obsidian)

  • get_active_file - Get currently active file

  • open_file - Open files in Obsidian

  • close_active_file - Close current file

  • navigate_back - Navigate backward in history

  • navigate_forward - Navigate forward in history

  • toggle_edit_mode - Switch edit/preview mode

๐Ÿ”Œ Command Execution (3 tools - Requires Obsidian)

  • execute_command - Run Obsidian commands

  • list_commands - List all available commands

  • search_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 | sh

Installation

# 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)

  1. Install Local REST API plugin in Obsidian

  2. Configure plugin settings:

    • Enable HTTPS: No (use HTTP for localhost)

    • API Key: Generate a secure key

    • Port: 27124 (default)

  3. 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"
)
# 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 configuration

Adding New Tools

  1. Create tool module in src/tools/

  2. Add Pydantic models to src/models/obsidian.py (if needed)

  3. Register tool in src/server.py with @mcp.tool() decorator

  4. Add unit tests in tests/unit/

  5. Update README.md and CHANGELOG.md


๐Ÿค Contributing

Contributions welcome! Please:

  1. Follow existing code style

  2. Add tests for new features

  3. Update documentation

  4. Ensure all tests pass


๐Ÿ“„ License

MIT License - see LICENSE for details


๐Ÿ™ Acknowledgments


๐Ÿ“š Additional Documentation

Available Tools

63 tools
add_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_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:: value

  • Bracket: [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_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_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_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_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

    B3.1/5.0

    Scored across 63 tools

    Disambiguation2/5

    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 Consistency3/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An 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.
      9
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Local-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.
      66
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An 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 npm
      14
      MIT