obsidian-mcp-server
<!--
* @Author: indiegeeker indiegeeker@gmail.com
* @Date: 2025-10-23 12:00:43
* @LastEditors: indiegeeker indiegeeker@gmail.com
* @LastEditTime: 2025-10-23 17:02:13
* @Description:
-->
# obsidian-mcp-server
> 🔗 Model Context Protocol server for Obsidian - Connect your knowledge base to AI
## ✨ Features
- 📝 **Note Management**: Create, read, update, and delete notes
- 🔍 **Search**: Full-text search across your vault
- 📋 **Listing**: List notes with filtering options
- 📊 **Metadata**: Get file size, timestamps, tags, and properties
- ⏰ **Sorting**: Sort notes by creation/modification time or size
- 🏷️ **Tag Extraction**: Automatically extract tags from frontmatter and content
- 🔒 **Safe**: Path validation to prevent directory traversal
- ⚡ **Fast**: Efficient file operations
## 🚀 Quick Start
### Installation
```bash
npm install -g @indiegeeker/obsidian-mcp-server
# or
pnpm install -g @indiegeeker/obsidian-mcp-server
```
### Configuration
Add to your Claude Desktop config:
```json
{
"mcpServers": {
"obsidian": {
"command": "obsidian-mcp-server",
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault"
}
}
}
}
```
## 📖 Available Tools
### create_note
Create a new note in your vault.
**Parameters:**
- `filename` (required): Name of the note
- `content` (required): Markdown content
- `path` (optional): Folder path within vault
### read_note
Read an existing note's content and frontmatter.
**Parameters:**
- `filepath` (required): Path to the note
### search_notes
Search notes by content.
**Parameters:**
- `query` (required): Search string
- `path` (optional): Limit search to folder
### list_notes
List all notes in vault or folder.
**Parameters:**
- `path` (optional): Folder to list
- `recursive` (optional): Include subfolders
### update_note
Update an existing note's content.
**Parameters:**
- `filepath` (required): Path to the note
- `content` (required): New content
- `append` (optional): Append instead of replacing
### delete_note
Delete a note from the vault.
**Parameters:**
- `filepath` (required): Path to the note to delete
### get_note_metadata
Get detailed metadata for a note.
**Parameters:**
- `filepath` (required): Path to the note
- `includeTags` (optional): Extract tags from frontmatter and content (default: true)
**Returns:**
- File size (bytes and formatted)
- Creation time
- Modification time
- Frontmatter properties
- Extracted tags (from frontmatter and #hashtags)
### list_notes_sorted
List notes sorted by various criteria.
**Parameters:**
- `path` (optional): Folder to list (default: root)
- `recursive` (optional): Include subfolders (default: true)
- `sortBy` (optional): Sort criterion - `"created"`, `"modified"`, `"size"`, or `"name"` (default: `"modified"`)
- `order` (optional): Sort order - `"asc"` or `"desc"` (default: `"desc"`)
- `includeMetadata` (optional): Include size and timestamps (default: true)
- `limit` (optional): Maximum number of notes to return
## 🛠️ Development
```bash
# Clone the repo
git clone https://github.com/indiegeeker/obsidian-mcp-server.git
# Install dependencies
pnpm install
# Build
pnpm run build
# Watch mode
pnpm run dev
```
## 📄 License
MIT
TDQS
Scored across 8 tools
Most tools have distinct purposes, but list_notes and list_notes_sorted overlap significantly; the sorted version could be a parameter of list_notes. Additionally, get_note_metadata vs read_note might be confused for retrieving note details, though descriptions clarify the distinction.
Most tools follow a verb_noun pattern (update_note, delete_note, search_notes, list_notes, get_note_metadata, create_note, read_note), but list_notes_sorted deviates by adding a modifier, breaking consistency.
Eight tools is reasonable for a note management server, covering core operations. However, list_notes_sorted is arguably redundant, making the set slightly over-specified.
The tools provide full CRUD coverage (create, read, update, delete) plus search, listing, sorting, and metadata retrieval, covering the essential operations for managing notes in an Obsidian vault without obvious gaps.