Skip to main content
Glama

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

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