eddmann/obsidian-mcp
If you are the rightful owner of obsidian-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
A Model Context Protocol (MCP) server for managing git-backed Obsidian vaults, enabling interaction through LLMs like Claude and ChatGPT.
Obsidian MCP Server

A Model Context Protocol (MCP) server for git-backed Obsidian vaults. Access and manage your notes through Claude, ChatGPT, and other LLMs by syncing changes via git.
Table of Contents
- Overview
- Quick Start
- How It Works
- Prerequisites
- Deployment Options
- Usage Examples
- Tool Reference
- Resources
- Documentation
- License
Overview
This MCP server provides 18 tools and 1 resource to interact with your Obsidian vault through LLMs:
Tool Categories:
- File Operations (9) - Read, create, edit, delete, move, append, and patch notes
- Directory Operations (3) - Create directories and list files
- Search (1) - Fuzzy search with relevance scoring and exact matching
- Tag Management (4) - Add, remove, rename, and manage tags
- Journal Logging (1) - Auto-log LLM activity to daily journals
Deployment Modes:
- Stdio - Local deployment for Claude Desktop, Cursor
- HTTP - Local/remote with OAuth for ChatGPT, Claude web
- AWS Lambda - Serverless deployment with DynamoDB sessions
Quick Start
Get started with Claude Desktop in 3 steps using Docker:
# 1. Download the example environment file
curl -O https://raw.githubusercontent.com/eddmann/obsidian-mcp/main/.env.example
mv .env.example obsidian-mcp.env
# 2. Edit obsidian-mcp.env with your vault repo and git token
# Required fields:
# VAULT_REPO=https://github.com/username/vault-repo.git
# VAULT_BRANCH=main
# GIT_TOKEN=your_token_here
3. Add to Claude Desktop config:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/ABSOLUTE/PATH/TO/obsidian-mcp.env:/app/.env",
"ghcr.io/eddmann/obsidian-mcp:latest",
"stdio"
]
}
}
}
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"C:\\ABSOLUTE\\PATH\\TO\\obsidian-mcp.env:/app/.env",
"ghcr.io/eddmann/obsidian-mcp:latest",
"stdio"
]
}
}
}
Restart Claude Desktop and start chatting with your vault!
Prefer npm? Click here for npm-based setup
# 1. Clone and install
git clone https://github.com/eddmann/obsidian-mcp
cd obsidian-mcp
npm install
# 2. Configure credentials
cp .env.example .env
# Edit .env with your vault repo and git token
3. Add to Claude Desktop config:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "npm",
"args": ["run", "--prefix", "/ABSOLUTE/PATH/TO/obsidian-mcp", "dev"]
}
}
}
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "npm",
"args": ["run", "--prefix", "C:\\ABSOLUTE\\PATH\\TO\\obsidian-mcp", "dev"]
}
}
}
How It Works
This server is designed for git-backed Obsidian vaults managed by plugins like obsidian-git.
graph LR
A[Git Repository] -->|1. Clone/Pull| B[MCP Server]
B -->|2. LLM Modifies| C[Local Vault Copy]
C -->|3. Auto Commit & Push| A
A -->|4. Sync| D[Obsidian Clients]
style B fill:#4a9eff
style C fill:#7c3aed
Workflow:
- Server clones/pulls your vault from git
- LLM makes changes through MCP tools
- Server automatically commits and pushes changes
- Your Obsidian clients pull to stay synchronized
This enables LLM access without Obsidian being open, with all changes synchronized via git.
Prerequisites
System Requirements
- Docker (recommended), OR Node.js 22+ and npm
- AWS Account (only for Lambda deployment)
Vault Requirements
- Git-initialized Obsidian vault - Your vault must be a git repository
- Pushed to a remote - Supports GitHub, GitLab, Bitbucket, or self-hosted
- Git Personal Access Token - See
- Sync-enabled (recommended) - Use obsidian-git plugin for automatic sync
Deployment Options
Claude Desktop (Local)
Using Docker:
See Quick Start above for the recommended Docker-based setup.
Prefer npm? Click here for npm-based setup
# Clone and install
git clone https://github.com/eddmann/obsidian-mcp
cd obsidian-mcp
npm install
# Configure credentials
cp .env.example .env
# Edit .env with your vault repo and git token
Claude Desktop config:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "npm",
"args": ["run", "--prefix", "/ABSOLUTE/PATH/TO/obsidian-mcp", "dev"]
}
}
}
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "npm",
"args": ["run", "--prefix", "C:\\ABSOLUTE\\PATH\\TO\\obsidian-mcp", "dev"]
}
}
}
ChatGPT & Remote Clients
Run the server in HTTP mode with OAuth authentication:
Using Docker:
docker run -p 3000:3000 --rm \
-v "/ABSOLUTE/PATH/TO/obsidian-mcp.env:/app/.env" \
ghcr.io/eddmann/obsidian-mcp:latest \
http
Using npm:
# First clone the repo if you haven't already
git clone https://github.com/eddmann/obsidian-mcp
cd obsidian-mcp
npm install
# Configure all environment variables (including OAuth)
cp .env.example .env
# Edit .env
# Run HTTP server
npm run dev:http
Required environment variables:
- All core variables (see
.env.example) - OAuth variables:
OAUTH_CLIENT_ID,OAUTH_CLIENT_SECRET,PERSONAL_AUTH_TOKEN,BASE_URL
See for detailed configuration and ChatGPT integration.
AWS Lambda
Deploy to AWS Lambda for remote access with DynamoDB session storage:
# 1. Clone the repository
git clone https://github.com/eddmann/obsidian-mcp
cd obsidian-mcp
# 2. Install dependencies
npm install
# 3. Configure all environment variables (including OAuth)
cp .env.example .env
# Edit .env
# 4. Deploy to AWS
npm run cdk:deploy
What gets deployed:
- Lambda function (ARM64, 2GB memory, 10GB storage)
- DynamoDB table with TTL-based sessions
- Function URL with CORS enabled
- CloudWatch logs (1-week retention)
Cleanup:
npm run cdk:destroy
See for complete setup instructions.
Usage Examples
Ask your LLM to interact with your vault using natural language:
File Operations
"Can you read my project note at Projects/MCP-Server.md?"
"Read all my daily notes from the past week"
"Create a new meeting note in Work/Meetings for today's standup"
"Add a task list to my project plan under the Action Items section"
Directory Operations
"Set up a new folder structure for my research papers"
"What markdown files do I have in my vault?"
"Show me all the PDFs in my Resources folder"
Search
"Find all my notes about machine learning"
"Where did I write about TODO items?"
"Search my Projects folder for anything about deployment"
Tag Management
"Tag my meeting note with work and urgent"
"I want to consolidate my todo tags into a single task tag"
"What tags am I using the most?"
Journal Logging
"Log today's work: I implemented OAuth for the MCP server using TypeScript and AWS"
"Add a journal entry about my Rust research - I learned about async patterns and tokio"
"Journal this: spent time learning TypeScript generics and created some helper utilities"
Tool Reference
File Operations (9 tools)
View all file operation tools
| Tool | Description |
|---|---|
read-note | Read the contents of a note file |
read-notes | Read multiple notes in a single request for improved efficiency (accepts array of paths, handles partial success) |
create-note | Create a new note with content (automatically creates parent directories if needed) |
edit-note | Replace the entire content of an existing note |
delete-note | Permanently delete a note file from the vault |
move-note | Move a note to a different directory or rename it |
append-content | Append content to the end of an existing note, or create a new note if it doesn't exist |
patch-content | Insert or update content at specific locations: headings, block identifiers, text matches, or YAML frontmatter |
apply-diff-patch | Apply a unified diff patch to a file using standard diff format (strict matching, precise line-based changes) |
See for detailed usage and examples.
Directory Operations (3 tools)
View all directory operation tools
| Tool | Description |
|---|---|
create-directory | Create a new directory in the vault (supports nested paths) |
list-files-in-vault | List all markdown files and directories in the vault root |
list-files-in-dir | List all files and subdirectories within a specific directory path |
See for detailed usage and examples.
Search (1 tool)
View search tool
| Tool | Description |
|---|---|
search-vault | Search vault filenames and content using fuzzy matching (powered by fuse.js) or exact string matching with context lines |
See for detailed usage and examples.
Tag Management (4 tools)
View all tag management tools
| Tool | Description |
|---|---|
add-tags | Add hashtags to a note's YAML frontmatter or inline within the note content |
remove-tags | Remove specified hashtags from a note's frontmatter and/or inline content |
rename-tag | Rename a tag across all notes in the vault (updates both frontmatter and inline) |
manage-tags | List all tags with usage counts, or merge multiple tags into a single unified tag |
See for detailed usage and examples.
Journal Logging (1 tool)
View journal logging tool
| Tool | Description |
|---|---|
log-journal-entry | Log timestamped activity entries to daily journal files (auto-creates journal from template) |
See for detailed usage and examples.
Resources
MCP resources provide contextual information that LLMs can access on-demand.
Vault README
| Resource | URI | Description |
|---|---|---|
vault-readme | obsidian://vault-readme | Provides access to the README.md file from your vault root containing organization guidelines and vault-specific conventions |
If your vault contains a README.md file in its root directory, LLMs can access it to understand how your vault is organized.
Documentation
- - Detailed documentation for all 18 tools with usage examples
- - Complete deployment instructions for all modes
- - Setup instructions for GitHub, GitLab, Bitbucket, and self-hosted providers