Obsidian Mcp Server

by smith-and-web

217 downloads
Not rated
GitHub

About

# Obsidian MCP Server [![CI](https://github.com/smith-and-web/obsidian-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/smith-and-web/obsidian-mcp-server/actions/workflows/ci.yml)…

Details

Author
smith-and-web
Downloads
217
Categories
Knowledge Base

- CRUD operations for notes with write modes (overwrite/append/prepend)
- Frontmatter parsing and tag management with auditing
- Full‑text search, backlinks, and broken‑link detection
- Section‑level read, append, and replace operations
- Optional compact response mode (40‑60% smaller payloads)
- SSE transport for remote access without local installation

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Obsidian Mcp Server
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Run the server via npx with the VAULT_PATH environment variable, or deploy with Docker. It exposes an SSE endpoint (port 3000 by default) that MCP clients like Claude Desktop or Cursor can connect to using mcp-remote. Configure the server in your AI assistant’s MCP settings pointing to the SSE URL.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "obsidian mcp server": {
            "obsidian": {
                "command": "npx",
                "args": [
                    "@smith-and-web/obsidian-mcp-server"
                ],
                "env": {
                    "VAULT_PATH": "/path/to/your/vault",
                    "PORT": "3001"
                }
            }
        }
    }
}

McpServers

{
    "obsidian": {
        "command": "npx",
        "args": [
            "@smith-and-web/obsidian-mcp-server"
        ],
        "env": {
            "VAULT_PATH": "/path/to/your/vault",
            "PORT": "3001"
        }
    }
}

Obsidian MCP Server

CI
npm
Docker
License
Node.js
MCP
TypeScript
Sponsor

A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with your Obsidian vault. Access your notes, create content, manage tags, and search your knowledge base through natural conversation.

Features

Note Management

- CRUD Operations: Create, read, update, and delete notes (with safety confirmation) - Write Modes: Overwrite, append, or prepend content - Batch Reading: Read multiple notes in a single request - File Info: Get metadata without reading content (efficient for large vaults) - Move/Duplicate: Reorganize your vault structure - Section Operations: Read, append, or replace specific sections by heading

Frontmatter & Tags

- Frontmatter Parsing: Get/set YAML frontmatter as structured JSON (powered by gray-matter) - Tag Management: Add/remove tags (frontmatter or inline) - Tag Auditing: Find notes missing required tags - Tag Search: List all tags with usage counts

Search & Links

- Full-Text Search: Search content and filenames with context - Backlinks: Find all notes linking to a specific note - Broken Links: Detect wiki-links that don't resolve - Find & Replace: Bulk text replacement with regex support

Directory Operations

- Create/Delete/Rename: Full directory management - List Contents: Browse vault structure

Performance

- Token Optimization: Optional compact response mode (40-60% smaller responses) - Efficient Scanning: Get file info without reading content - SSE Transport: Remote access without local installation

Quick Start

npx (Quickest)

Run directly without installation:

VAULT_PATH=/path/to/your/vault npx @smith-and-web/obsidian-mcp-server

With options:

VAULT_PATH=/path/to/vault PORT=3001 COMPACT_RESPONSES=true npx @smith-and-web/obsidian-mcp-server

Docker (Recommended for Production)

Using the pre-built image from GitHub Container Registry:

docker run -d \
  --name obsidian-mcp \
  -v /path/to/your/vault:/vault:rw \
  -p 3001:3000 \
  -e VAULT_PATH=/vault \
  ghcr.io/smith-and-web/obsidian-mcp-server:latest

Or with Docker Compose:

1. Create a docker-compose.yml:

   version: '3.8'
services:
obsidian-mcp:
image: ghcr.io/smith-and-web/obsidian-mcp-server:latest
container_name: obsidian-mcp
restart: unless-stopped
volumes:
- /path/to/your/vault:/vault:rw
ports:
- "3001:3000"
environment:
- VAULT_PATH=/vault

2. Start the server

   docker-compose up -d

3. Verify it's running

   curl http://localhost:3001/health

Local Development

1. Install dependencies

   npm install

2. Set environment variables

   export VAULT_PATH=/path/to/your/vault
export PORT=3000

3. Start the server

   npm start
# Or with auto-reload:
npm run dev

AI Assistant Configuration

Claude Desktop

Add to your Claude Desktop config file:

- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
- Windows: %APPDATA%\Claude\claude_desktop_config.json

Option 1: Local server (via mcp-remote)

{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:3001/sse"]
}
}
}

Option 2: Remote server with HTTPS

{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://your-domain.com/sse"]
}
}
}

Option 3: Direct npx (runs server locally)

{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["@smith-and-web/obsidian-mcp-server"],
"env": {
"VAULT_PATH": "/path/to/your/vault",
"PORT": "3001"
}
}
}
}

Cursor

Add to your Cursor MCP settings (Settings → MCP):

Option 1: Connect to running server

{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:3001/sse"]
}
}
}

Option 2: Run server directly

{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["@smith-and-web/obsidian-mcp-server"],
"env": {
"VAULT_PATH": "/path/to/your/vault",
"PORT": "3001"
}
}
}
}

Other MCP Clients

Any MCP-compatible client can connect using mcp-remote:

npx mcp-remote http://localhost:3001/sse

Or connect directly to the SSE endpoint at http://localhost:3001/sse.

Available Tools

Note Operations

| Tool | Description | |------|-------------| | read-note | Read note contents (supports frontmatterOnly for efficiency) | | read-multiple-notes | Batch read multiple notes | | create-note | Create a new note | | edit-note | Replace note contents | | write-note | Write with modes: overwrite, append, or prepend | | delete-note | Delete a note (requires confirmation) | | move-note | Move/rename a note | | duplicate-note | Copy a note to a new location | | get-notes-info | Get file metadata without reading content |

Directory Operations

| Tool | Description | |------|-------------| | list-vault | List files and directories | | create-directory | Create a new directory | | delete-directory | Delete a directory (with recursive option) | | rename-directory | Rename/move a directory |

Frontmatter & Tags

| Tool | Description | |------|-------------| | get-frontmatter | Get YAML frontmatter as JSON | | update-frontmatter | Update frontmatter fields | | add-tags | Add tags to frontmatter or inline | | remove-tags | Remove tags from note | | list-tags | List all tags with counts | | find-notes-by-tag | Find notes with a specific tag | | search-missing-tag | Find notes missing a tag | | audit-tags | Audit folder for required tags |

Search & Links

| Tool | Description | |------|-------------| | search-vault | Full-text search with context | | get-backlinks | Find notes linking to a note | | find-broken-links | Find unresolved wiki-links | | find-replace | Bulk find and replace |

Section Operations

| Tool | Description | |------|-------------| | read-section | Read content under a heading | | append-to-section | Append to a section | | replace-section | Replace section content | | append-to-file | Append to end of file | | insert-at-marker | Insert at a text marker | | list-headings | List all headings in a note |

Architecture

┌─────────────────┐     HTTPS/SSE      ┌──────────────────┐
│  Claude Desktop │ ◄────────────────► │   MCP Server     │
└─────────────────┘                    │   (Express.js)   │
                                       └────────┬─────────┘
                                                │
                                       ┌────────▼─────────┐
                                       │   VaultManager   │
                                       │   (File System)  │
                                       └────────┬─────────┘
                                                │
                                       ┌────────▼─────────┐
                                       │  Obsidian Vault  │
                                       │   (Markdown)     │
                                       └──────────────────┘

Project Structure

obsidian-mcp-server/
├── src/
│   ├── index.ts              # Express server entry point
│   ├── vault/
│   │   ├── VaultManager.ts   # Core vault operations
│   │   └── frontmatter.ts    # YAML parsing utilities
│   ├── tools/
│   │   ├── definitions.ts    # MCP tool schemas
│   │   ├── handlers.ts       # Tool execution logic
│   │   └── index.ts          # Tool exports
│   ├── server/
│   │   ├── mcp.ts            # MCP protocol handlers
│   │   └── middleware.ts     # Express middleware
│   └── types/
│       └── index.ts          # TypeScript type definitions
├── tests/                    # Vitest unit tests
├── Dockerfile
├── docker-compose.yml
├── package.json
└── README.md

Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| PORT | 3000 | Server port |
| VAULT_PATH | /vault | Path to Obsidian vault |
| COMPACT_RESPONSES | false | Enable minified response keys for 40-60% smaller responses |
| API_KEY | (none) | API key for authentication. When set, requires Bearer token or query param |

API Endpoints

| Endpoint | Method | Description |
|----------|--------|-------------|
| /health | GET | Health check |
| /sse | GET | SSE endpoint for MCP |
| /sse | POST | Direct MCP protocol calls |
| /message | POST | SSE transport messages |

Authentication

The server supports optional API key authentication. When API_KEY is set, all /sse and /message endpoints require authentication. The /health endpoint remains public.

Enabling Authentication

Set the API_KEY environment variable:

```bash

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.