Skip to main content
Glama

Obsidian MCP Server

by bazylhorsey

Obsidian MCP Server

Tests

A comprehensive Model Context Protocol (MCP) server for Obsidian that provides powerful vault access, knowledge graph analysis, and advanced integration features.

šŸ“š Documentation

Features

šŸ—‚ļø Multi-Vault Support

  • Local Vaults: Direct file system access with real-time file watching

  • Remote Vaults: HTTP/REST API integration with automatic sync

  • Seamless switching between multiple vaults

šŸ”— Knowledge Graph

  • Build and analyze complete knowledge graphs from your notes

  • Find related notes based on links, tags, and content similarity

  • Analyze graph structure (hubs, orphan notes, clusters)

  • Suggest potential links between related notes

  • Path finding between notes

šŸ” Advanced Search

  • Full-text search across all notes

  • Filter by tags, folders, and metadata

  • Server-side and client-side search strategies

šŸ“ Note Operations

  • Read, create, update, and delete notes

  • Parse Obsidian-flavored markdown with frontmatter

  • Extract and track internal links, embeds, and tags

  • Automatic backlink generation

šŸ“Š Analytics

  • Vault statistics (note count, word count, link count)

  • Tag usage analysis

  • Folder structure insights

šŸŽÆ Obsidian Integration

  • Optional integration with community "Local REST API" plugin

  • Open notes directly in Obsidian app

  • Execute Obsidian commands

  • Create daily notes

  • Access to Obsidian URI protocol

  • Note: Requires plugin installation and app running locally

šŸŽØ Canvas Support

  • Read and manipulate Obsidian Canvas files

  • Create and edit canvas nodes (file, text, link, group)

  • Manage canvas edges and connections

  • Full graph visualization support

  • Programmatic canvas generation

šŸ“Š Dataview Queries

  • SQL-like querying over your notes

  • Filter by frontmatter metadata and inline fields

  • Sort and group results

  • Field selection and aggregation

  • Support for complex WHERE clauses

  • Extract metadata from notes (frontmatter + inline fields)

šŸ“ Template System

  • Dynamic template rendering with variable substitution

  • Built-in date/time variables ({{date}}, {{time}}, {{weekday}}, etc.)

  • Custom variable support

  • Default values ({{variable|default}})

  • Date formatting ({{date:YYYY-MM-DD}})

  • Frontmatter merging

  • Create notes from templates programmatically

šŸ“… Periodic Notes

  • Daily, weekly, monthly, and yearly notes

  • Automatic date-based naming and organization

  • Custom templates for each note type

  • Date range calculations

  • List and query periodic notes

  • Configurable folder structure and formats

Architecture

The server is built with a clean, modular architecture:

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ MCP Server Layer │ │ (Tools, Resources, Protocol Handling) │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Service Layer │ │ • Knowledge Graph Service │ │ • Canvas Service │ │ • Dataview Service │ │ • Template Service │ │ • Periodic Notes Service │ │ • Configuration Management │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Connector Layer (Adapters) │ │ • Local Vault Connector (File System) │ │ • Remote Vault Connector (HTTP API) │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ Integration Layer │ │ • Obsidian API Client │ │ • Markdown Parser │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Key Design Patterns

  • Adapter Pattern: Abstract BaseConnector interface allows seamless switching between local and remote vaults

  • Service Layer: Separates business logic (knowledge graph) from data access

  • Configuration Management: Flexible config from files, environment, or defaults

  • Real-time Updates: File watchers for local vaults, periodic sync for remote

Installation

npm install npm run build

Configuration

Create a obsidian-mcp.json configuration file:

{ "vaults": [ { "name": "my-local-vault", "type": "local", "path": "/path/to/obsidian/vault" }, { "name": "my-cloud-vault", "type": "remote", "url": "https://your-sync-server.com/api", "apiKey": "your-api-key", "syncInterval": 60000 } ], "obsidianApi": { "restApiUrl": "http://localhost:27124", "apiKey": "your-api-key", "vaultName": "my-local-vault" }, "server": { "name": "obsidian-mcp-server", "version": "1.0.0" } }

Vault Types Explained

Local Vault (

  • Direct filesystem access to your Obsidian vault folder

  • Fastest performance, real-time file watching

  • Use this for vaults stored on your computer or mounted network drives

Remote Vault (

  • Connects to a self-hosted sync server via HTTP/REST API

  • For vaults hosted on your own cloud infrastructure (not Obsidian's sync service)

  • Examples: Custom REST API, CouchDB, WebDAV wrapper, etc.

  • Requires you to implement or use a compatible sync server

Obsidian API (Optional)

  • Only needed if you want to control the Obsidian desktop app

  • Requires the "Local REST API" community plugin in Obsidian

  • Enables: Opening notes in app, executing commands, accessing app features

  • NOT used for reading/writing vault content (use local/remote vaults for that)

Configuration via Environment Variables

Alternatively, use environment variables:

# Local vault export OBSIDIAN_VAULT_PATH="/path/to/vault" export OBSIDIAN_VAULT_NAME="my-vault" # Remote vault export OBSIDIAN_REMOTE_URL="https://your-sync-server.com/api" export OBSIDIAN_REMOTE_NAME="cloud" export OBSIDIAN_REMOTE_API_KEY="your-key" export OBSIDIAN_SYNC_INTERVAL="60000" # Obsidian API (optional) export OBSIDIAN_API_URL="http://localhost:27124" export OBSIDIAN_API_KEY="your-key"

Common Configuration Scenarios

Scenario 1: Just a local vault (most common)

{ "vaults": [ { "name": "personal", "type": "local", "path": "/home/user/Documents/ObsidianVault" } ] }

Scenario 2: Local vault + iCloud/Dropbox (also use local type)

{ "vaults": [ { "name": "synced", "type": "local", "path": "/home/user/iCloud/ObsidianVault" } ] }

Note: iCloud/Dropbox sync is handled by the cloud service itself - just point to the synced folder.

Scenario 3: Multiple local vaults

{ "vaults": [ { "name": "personal", "type": "local", "path": "/home/user/Documents/PersonalVault" }, { "name": "work", "type": "local", "path": "/home/user/Documents/WorkVault" } ] }

Scenario 4: Self-hosted remote server (advanced)

{ "vaults": [ { "name": "cloud", "type": "remote", "url": "https://your-server.com/obsidian-api", "apiKey": "your-api-key", "syncInterval": 60000 } ] }

Note: Requires you to implement or deploy a compatible REST API server.

Usage

Start the Server

npm start

Or use the binary:

node dist/index.js

Available MCP Tools

The server exposes the following tools through the MCP protocol:

Note Operations

  • get_note - Retrieve a note by path

  • search_notes - Search notes with filters

  • create_note - Create a new note

  • update_note - Update existing note

  • delete_note - Delete a note

Vault Information

  • get_vault_stats - Get vault statistics

  • list_tags - List all tags

  • list_folders - List all folders

Knowledge Graph

  • get_knowledge_graph - Get complete graph structure

  • get_related_notes - Find related notes

  • analyze_graph - Analyze graph structure

  • suggest_links - Suggest potential links

Canvas Operations

  • get_canvas - Read a canvas file

  • create_canvas - Create a new empty canvas

  • list_canvas_files - List all canvas files in vault

  • add_canvas_node - Add a node (file, text, link, or group)

  • add_canvas_edge - Add an edge/connection between nodes

  • delete_canvas_node - Delete a node from canvas

  • delete_canvas_edge - Delete an edge from canvas

Dataview Queries

  • dataview_query - Execute Dataview-style queries on notes

  • get_note_metadata - Get metadata for a specific note

  • get_unique_values - Get all unique values for a field

Template System

  • list_templates - List all available templates

  • render_template - Render a template with variables

  • create_from_template - Create a new note from a template

Periodic Notes

  • create_daily_note - Create or get daily note

  • create_weekly_note - Create or get weekly note

  • create_monthly_note - Create or get monthly note

  • create_yearly_note - Create or get yearly note

  • get_periodic_note_info - Get info about a periodic note

  • list_periodic_notes - List periodic notes in a date range

MCP Resources

All notes are exposed as resources with URIs:

obsidian://{vault-name}/{note-path}

Development

Project Structure

src/ ā”œā”€ā”€ index.ts # Main MCP server ā”œā”€ā”€ types/ # TypeScript type definitions │ ā”œā”€ā”€ index.ts # Core types │ ā”œā”€ā”€ canvas.ts # Canvas types │ ā”œā”€ā”€ dataview.ts # Dataview types │ ā”œā”€ā”€ template.ts # Template types │ └── periodic.ts # Periodic notes types ā”œā”€ā”€ connectors/ # Vault connectors (adapters) │ ā”œā”€ā”€ BaseConnector.ts │ ā”œā”€ā”€ LocalConnector.ts │ └── RemoteConnector.ts ā”œā”€ā”€ services/ # Business logic services │ ā”œā”€ā”€ KnowledgeGraph.ts # Knowledge graph analysis │ ā”œā”€ā”€ CanvasService.ts # Canvas file operations │ ā”œā”€ā”€ DataviewService.ts # Dataview query processing │ ā”œā”€ā”€ TemplateService.ts # Template rendering │ └── PeriodicNotesService.ts # Periodic notes management ā”œā”€ā”€ api/ # External API integrations │ └── ObsidianAPI.ts └── utils/ # Utilities ā”œā”€ā”€ config.ts └── markdown.ts

Build

npm run build

Watch Mode

npm run watch

Integration with Obsidian

For advanced features, install the Obsidian Local REST API plugin:

  1. Install the plugin from Obsidian Community Plugins

  2. Enable the plugin and note the API key

  3. Configure the obsidianApi section in your config

Use Cases

For AI Assistants

  • Access and navigate your Obsidian knowledge base

  • Create and update notes based on conversations

  • Find related information across notes

  • Suggest connections between ideas

For Automation

  • Automated note creation and organization

  • Batch processing of notes

  • Knowledge graph analysis and visualization

  • Link maintenance and suggestions

For Integrations

  • Connect Obsidian with other tools via MCP

  • Build custom workflows

  • Create dashboards and reports

  • Sync with external systems

Advanced Features

Canvas Support

Obsidian Canvas is a powerful visual workspace. This server provides full programmatic access to create and manipulate canvas files:

Example: Create a visual mind map

// Create a new canvas await mcp.callTool('create_canvas', { canvasPath: 'diagrams/mindmap.canvas' }); // Add nodes await mcp.callTool('add_canvas_node', { canvasPath: 'diagrams/mindmap.canvas', nodeType: 'file', file: 'notes/central-idea.md', x: 0, y: 0, width: 400, height: 200 }); await mcp.callTool('add_canvas_node', { canvasPath: 'diagrams/mindmap.canvas', nodeType: 'text', text: '# Key Concept', x: 500, y: 0, width: 300, height: 150, color: '1' // Red }); // Connect nodes with edges await mcp.callTool('add_canvas_edge', { canvasPath: 'diagrams/mindmap.canvas', fromNode: 'node-id-1', toNode: 'node-id-2', label: 'relates to' });

Dataview Queries

Query your notes like a database with SQL-like syntax:

Example: Find recent project notes

await mcp.callTool('dataview_query', { query: { from: '#project', where: [ { field: 'status', operator: 'eq', value: 'active' }, { field: 'modified', operator: 'gte', value: '2024-01-01' } ], sort: [{ field: 'modified', direction: 'desc' }], limit: 10 } });

Example: Group notes by tag

await mcp.callTool('dataview_query', { query: { from: 'projects/', groupBy: 'status', select: ['title', 'modified', 'tags'] } });

Example: Get metadata from inline fields

// Note content: "Status:: In Progress\nPriority:: High" const metadata = await mcp.callTool('get_note_metadata', { notePath: 'projects/my-project.md' }); // Returns: { status: 'In Progress', priority: 'High', ... }

Template System

Create reusable templates with variable substitution and automatic date handling:

Example: Create a meeting note template

--- tags: [meeting] templateVariables: - name: attendees type: string description: Meeting attendees --- # Meeting: {{title}} **Date:** {{date}} **Time:** {{time}} **Attendees:** {{attendees|TBD}} ## Agenda - ## Notes ## Action Items - [ ]

Example: Use the template

await mcp.callTool('create_from_template', { templatePath: 'Templates/meeting.md', targetPath: 'Meetings/2024-01-15-team-sync.md', variables: { attendees: 'Alice, Bob, Charlie' }, frontmatter: { project: 'Q1 Planning' } });

Built-in Variables:

  • {{date}} - Current date (YYYY-MM-DD)

  • {{time}} - Current time (HH:mm)

  • {{datetime}} - Current datetime

  • {{year}}, {{month}}, {{day}} - Date components

  • {{weekday}} - Day of week (Monday, Tuesday, etc.)

  • {{week}} - Week number (01-53)

  • {{title}}, {{filename}}, {{folder}} - File context

Periodic Notes

Automatically create and organize daily, weekly, monthly, and yearly notes:

Example: Create today's daily note

await mcp.callTool('create_daily_note', { vault: 'my-vault' }); // Creates: Daily Notes/2024-01-15.md

Example: Create this week's note

await mcp.callTool('create_weekly_note', { vault: 'my-vault', variables: { goals: 'Complete project proposal' } }); // Creates: Weekly Notes/2024-W03.md

Example: List all monthly notes

await mcp.callTool('list_periodic_notes', { vault: 'my-vault', type: 'monthly', startDate: '2024-01-01', endDate: '2024-12-31' });

Configuration: Periodic notes can be configured with custom folders, formats, and templates:

{ "periodicNotes": { "daily": { "folder": "Journal/Daily", "format": "YYYY-MM-DD", "template": "Templates/daily-note.md" }, "weekly": { "folder": "Journal/Weekly", "format": "YYYY-[W]WW" } } }

Technical Highlights

Markdown Parsing

  • Full support for Obsidian-flavored markdown

  • Frontmatter extraction (YAML)

  • Internal link parsing ([[link]], [[link|alias]])

  • Embed detection (![[embed]])

  • Tag extraction (#tag, #nested/tag)

  • Inline field parsing (key:: value pattern)

Canvas Operations

  • Complete Canvas file format support (JSON-based)

  • All node types: file, text, link, group

  • Edge/connection management with customization

  • Color and styling support

  • Programmatic canvas generation

Dataview Integration

  • SQL-like query language for notes

  • Multiple filter operators (eq, neq, gt, gte, lt, lte, contains, startsWith, endsWith, exists)

  • Sorting and grouping capabilities

  • Field selection and projection

  • Support for frontmatter and inline fields

  • Nested field access with dot notation

Template System

  • Variable substitution with {{variable}} syntax

  • Built-in date/time variables with formatting

  • Default values: {{variable|default}}

  • Date formatting: {{date:YYYY-MM-DD}}

  • Frontmatter merging and manipulation

  • Template discovery and listing

Periodic Notes

  • Automatic date-based note generation

  • Configurable folder structure and naming

  • Template integration for custom layouts

  • Date range calculations (daily, weekly, monthly, yearly)

  • ISO week number support

  • Flexible date format patterns

Link Resolution

  • Smart link resolution (title-based and path-based)

  • Automatic backlink generation

  • Bidirectional link tracking

Performance

  • Efficient caching strategies

  • File watching for instant updates

  • Lazy loading and pagination support

Security Considerations

  • Local vaults: Requires file system access to vault directory

  • Remote vaults: Use HTTPS and secure API keys

  • API keys: Never commit to version control

  • File watching: Only monitors .md files

Requirements

  • Node.js 18 or higher

  • TypeScript 5.x

  • Access to Obsidian vault(s)

License

MIT

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Related Projects

Support

For issues and questions:


Built with ā¤ļø for the Obsidian and MCP communities

Deploy Server
-
security - not tested
F
license - not found
-
quality - not tested

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Enables comprehensive access to Obsidian vaults through MCP, supporting multi-vault management, knowledge graph analysis, canvas manipulation, dataview queries, template rendering, and periodic notes creation. Provides both local filesystem and remote API connectivity for complete Obsidian integration.

  1. šŸ“š Documentation
    1. Features
      1. šŸ—‚ļø Multi-Vault Support
      2. šŸ”— Knowledge Graph
      3. šŸ” Advanced Search
      4. šŸ“ Note Operations
      5. šŸ“Š Analytics
      6. šŸŽÆ Obsidian Integration
      7. šŸŽØ Canvas Support
      8. šŸ“Š Dataview Queries
      9. šŸ“ Template System
      10. šŸ“… Periodic Notes
    2. Architecture
      1. Key Design Patterns
    3. Installation
      1. Configuration
        1. Vault Types Explained
        2. Configuration via Environment Variables
        3. Common Configuration Scenarios
      2. Usage
        1. Start the Server
        2. Available MCP Tools
        3. MCP Resources
      3. Development
        1. Project Structure
        2. Build
        3. Watch Mode
      4. Integration with Obsidian
        1. Use Cases
          1. For AI Assistants
          2. For Automation
          3. For Integrations
        2. Advanced Features
          1. Canvas Support
          2. Dataview Queries
          3. Template System
          4. Periodic Notes
        3. Technical Highlights
          1. Markdown Parsing
          2. Canvas Operations
          3. Dataview Integration
          4. Template System
          5. Periodic Notes
          6. Link Resolution
          7. Performance
        4. Security Considerations
          1. Requirements
            1. License
              1. Contributing
                1. Related Projects
                  1. Support

                    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/bazylhorsey/obsidian-mcp-server'

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