✦ MCP Server  ·  14 Tools  ·  Claude Code  ·  GitHub Copilot  ·  Early Stage ✦

Connect your AI to
your Obsidian vault

obsidian-ai-mcp is an MCP server that gives Claude Code and GitHub Copilot direct access to your vault — search, read, write, and manage notes using natural language. Your files stay local, always.

⚠️ Early stage. Under active development — open source on GitHub.
⚡ Get started View all 14 tools →

What is Obsidian?

Obsidian is a free, local-first note-taking app built around plain Markdown files. Think of it as a personal knowledge base that lives on your machine — no cloud sync required, no vendor lock-in.

🪨

A connected knowledge base for engineers

Obsidian lets you build a personal knowledge base of notes, specs, decisions, and logs — all as plain .md files on disk. You connect ideas with [[wikilinks]], and Obsidian renders them as a graph: a visual map of how your notes relate to each other.


The graph view makes it possible to see, for example, that your auth spec, a debugging session devlog, and a team decision all point to the same architectural note — connections you might not have noticed otherwise.


Because notes are just files, they work with git, grep, any text editor — and now, with AI tools like Claude.

📁
Plain Markdown files Your notes are .md files on disk — no proprietary format, no lock-in, git-friendly.
🔗
[[Wikilinks]] and graph view Connect notes to each other. Obsidian visualises your knowledge as an interactive graph — surface hidden relationships across sessions.
🔒
Local-first, always Everything lives on your machine. No cloud account needed. Works offline.
Instant full-text search Find anything across thousands of notes in milliseconds.
🆓
Free for personal use Core app is free. No subscription needed to get started.

The knowledge that disappears 🐾

If you spend your day in Claude — debugging, researching, reviewing code, planning — you know this problem.

😿 The friction

You ask Claude a question, get a great answer, and move on. Later you can't find it. You write notes after the fact, if at all. Decisions get buried in chat history. Learnings from a debugging session vanish. You copy-paste snippets into a scratch file that never gets organised.


The knowledge is there — it just doesn't go anywhere useful.

😸 What this unlocks

With obsidian-ai-mcp, your vault stays in sync with your work. As you're doing something in Claude, just say "log this" or "create a devlog" and it captures it — structured, dated, linked to your other notes. At the end of a session, ask Claude to summarise and promote it to your permanent notes.


No copy-pasting. No context switching. Your vault grows from your work, not from extra effort.

This only works if the notes stay useful. The design intentionally prevents the common failure mode of notes becoming an unreadable wall of AI output:

🎯

Current state, not history

Notes reflect what's true now, not a log of every change. Outdated content gets replaced or promoted away.

✂️

Concise by default

Templates are structured and minimal. Every field exists because it adds signal. Nothing is appended just because it can be.

📥

Inbox before permanent

All AI-generated notes land in Inbox first. You review and promote — permanent notes are never silently overwritten.

🔍

Ready to consume

A note should answer a question when you come back to it. Open questions are explicit. Next steps are always at the bottom.

What makes this different 🐱

There are many ways to give an AI access to a note vault. Most just expose the file system. This one makes three opinionated choices — borrowed from ideas that have worked for personal knowledge management for decades.

📥

Capture first, curate later

Everything AI-generated lands in Inbox/ first — never silently inserted into your permanent notes. You review and promote what's worth keeping. The promote_note tool is append-only by design: it will never overwrite an existing note in Notes/, only add to it.

This mirrors the capture-before-organise principle that David Allen described in Getting Things Done: closing the loop on a thought costs almost nothing if the capture step is frictionless — the friction should live at the curation step, not the capture step.

The two-phase Inbox → Notes flow is a hard constraint, not a preference you can accidentally override.

🗂️

Flat by default

Notes live in two folders: Inbox/ and Notes/. No nested hierarchies to maintain, no taxonomy decisions to make mid-session.

Niklas Luhmann's Zettelkasten — the note system behind decades of his prolific academic output — worked as a flat collection linked by cross-references, not a filing cabinet. Andy Matuschak's research on evergreen notes reaches the same conclusion: hierarchical organisation tends to bury notes rather than surface them. Links and search do that job better.

You can rename the folders or add subfolders — but the default is deliberately two levels and nothing more.

🧠

Preferences that persist

Drop a vault_context.md in your vault root. The server reads it once at startup and sends it to Claude as part of the session handshake — zero per-call overhead. Claude knows your timezone, your team, your writing style, your recurring projects, every session.

Recent research on persistent AI memory (Mem0, 2025) found that giving a model stable user context increased task accuracy by 26% and reduced token usage by 90% compared to re-stating context each time. vault_context.md is that stable context — plain text you can read and edit.

No prompting rituals. No re-explaining yourself at the start of every session.

How it works

The MCP server runs locally on your machine and reads your vault as plain files — no Obsidian app needs to be open.

Claude (local or Codespace)
  "summarize my devlog and log a decision"
  "what tasks are open in Current Works?"
  "create a spec for the new auth flow"
           │
           │  MCP protocol
           ▼
  obsidian-ai-mcp  ← runs on your Windows machine  🐱
  14 vault tools
           │
           │  fs/promises (direct file I/O)
           ▼
  Your Obsidian Vault  ← stays local, always
  (.md files on disk)

── Codespace mode ──────────────────────────────────────────
GitHub Codespace → Cloudflare tunnel → localhost → vault

What can you do with it?

Just describe what you want in plain English — Claude picks the right tool automatically.

🛠️

Session devlogs

Log your work as you go. Claude creates a timestamped devlog, appends entries throughout your session, and summarises at the end.

start a devlog for today's auth PR
log: switched from JWT to session tokens
summarise my devlog and promote it
📝

Meeting notes

One file per day. Each meeting gets its own section with attendees and action items. Promote individual meetings to project-specific permanent notes.

log my 10am 1:1 — we discussed...
add action: draft rate limiting spec by EOW
promote the API review section to Notes/Auth Service
📐

Design specs

Create structured specs with goals, non-goals, design decisions, and open questions. Iterate during implementation and track what changed.

create a spec for the new caching layer
add decision: chose Redis over in-memory
what open questions are left in my specs?

Task tracking

Find open tasks across your vault, mark them done, and keep action items from meetings connected to your permanent notes.

show all open tasks in Current Works
mark "draft rate limiting spec" as done
what tasks did I not finish last week?
🧠

Knowledge capture

Capture things you learned inline — a new API behaviour, a debugging insight, a pattern you spotted — without leaving your workflow.

I just learned that V8 deoptimises...
create a learning note: CSS container queries
what did I learn about rate limiting?
🔍

Vault review

Surface everything that needs attention — stale drafts, open tasks, proposed decisions, specs with unanswered questions, notes missing wikilinks.

review my vault
what's been sitting in my inbox for a week?
what decisions are still proposed?

Why connect from Codespace? ☁️

Your Obsidian vault becomes Claude's memory inside Codespace — specs, bug notes, and context you already wrote flow directly into the code session. No copy-paste, no re-explaining.

📐

Spec → implementation

Write the feature spec in Obsidian — goals, non-goals, design decisions. Open Codespace and say "read my caching spec and implement the TTL logic in src/cache.ts." Claude reads your design intent and the actual code simultaneously, no copy-paste.

read my rate limiting spec and look at src/middleware — start implementing
what open questions are left in my auth spec?
🐛

Bug investigation from notes

Log observed behavior, error messages, and hypotheses in Obsidian as you debug. In Codespace: "read my auth bug investigation and look at src/auth/ — what am I missing?" Your notes become the diagnostic brief — no re-explaining symptoms from scratch.

read my bug notes on the token refresh issue and look at the code
add to my investigation: null user_id appears when cookie is expired
🔁

Resume where you left off

End your session by logging "what I did, what broke, what's next" in your devlog. Next Codespace — even a brand new one — just say "read my devlog from yesterday and tell me where I stopped." Zero mental overhead reconstructing context.

read my devlog from yesterday and catch me up
log: paused here — pagination query is returning wrong offset
📋

Code review with a checklist

Before a PR review, jot your checklist in Obsidian — things to verify, patterns to look for, concerns from the design meeting. In Codespace: "read my review checklist for PR #142 and go through the changed files." Structured and code-aware.

read my review notes for the auth PR and check the changed files
add to review checklist: confirm rate limit headers on all endpoints
🏛️

Decision → code

Write an Architecture Decision Record capturing your chosen approach and the reasoning. Then: "read my ADR on pagination and implement it in the API following that decision." Your design intent travels intact into the implementation — no guessing what you meant.

read my ADR on the event queue design and implement it
log decision: chose cursor pagination over offset — see ADR

Inbox → Notes

All AI-generated notes land in Inbox/ first — drafts you can review before they become permanent. When you're happy, promote them to Notes/.

1

Claude writes

New notes go to Inbox/ with a date prefix and auto-frontmatter

2

You review

Open in Obsidian, edit freely, append more content during the session

3

Promote

promote_note moves it to Notes/ — append-only, won't overwrite an existing note

4

Permanent

Lives in Notes/ forever. Inbox draft deleted. Vault stays clean.

What your vault looks like after a productive day:

Your Vault/ │ ├── Inbox/ ← drafts, review before promoting │ ├── 2026-03-05 - Devlog - Auth PR Refactor.md ← created at session start, appended all day │ ├── 2026-03-05 - Meeting - Daily.md ← logged inline while in Claude │ ├── 2026-03-05 - Learning - V8 Deopt Patterns.md ← captured without switching context │ ├── 2026-03-04 - Spec - Rate Limiting.md ← yesterday's draft, ready to promote │ ├── Capture.md ← quick tasks and thoughts, newest at top │ └── README.md │ ├── Notes/ ← permanent notes live here │ ├── Auth Strategy.md ← promoted last week, still evolving via append │ ├── Current Works.md ← living project tracker with open tasks │ ├── Rate Limiting — Decision.md ← ADR promoted after team sign-off │ └── Redis Caching Devlog.md ← permanent session log from last sprint │ └── Trash/ ← deleted notes (recoverable) └── 2026-02-20 - Devlog - Old Spike.md

Note types

Each type generates the right structure automatically — no blank page, no forgotten fields.

🛠

devlog

Timestamped session log. Append entries as you work. One note per task or PR.

💡

learning

Structured insight — what you learned, where from, how confident. Source-first.

📐

spec

Feature/design spec with overview, goals, non-goals, design, open questions, decisions table.

🗓

meeting

Daily log — one file per day, each meeting as a ## HH:MM — Title section.

⚖️

decision

Architecture Decision Record — context, decision, consequences, alternatives considered.

📄

note

Freeform. Source banner, body, open questions, next steps, related notes.

14 tools

You never call these directly — Claude picks the right one based on what you ask. But here's what's available.

Tool What it does
vault_summaryreadFolder counts + 10 recently modified files. Good session opener.
vault_reviewreadProcessing queue: stale drafts, open tasks, proposed decisions, specs with open questions, notes missing wikilinks.
vault_searchreadFull-text search across all notes. Optional folder scope and line context.
read_notereadRead a note by filename (wikilink-style) or vault-relative path.
list_notesreadFile tree grouped by folder.
list_inboxreadInbox drafts with metadata. Filter by date or note type.
list_tasksreadFind tasks across the vault. Filter by file, status, or today's daily note.
complete_taskwriteToggle a task done or reopen it. Partial text match, case-insensitive.
create_notewriteCreate a new note from a type template. Always creates in Inbox/.
write_notewriteCreate or overwrite. New files go to Inbox/, existing files updated in place.
append_to_notewriteAppend to a note. position:top prepends (for Capture.md). Auto-updates frontmatter changelog (skipped for Capture.md).
promote_notewriteMove Inbox draft to Notes/. Append-only — permanent notes are never overwritten. Deletes draft.
rename_notewriteRename or move a note within the vault.
delete_notewriteMove to Trash/ (recoverable).

Install 🐾

Pick your AI client first — the steps are different.

🤖
Claude Code
One-step installer for Windows or Mac, or via Codespace tunnel
🐙
GitHub Copilot CLI
Add via /mcp add — works on any OS

🤖 Claude Code

Pick your setup — the installer handles everything automatically.

🪟
Local — Windows
Claude Code and vault on the same Windows machine
🍎
Local — Mac
Claude Code and vault on the same Mac
☁️
Codespace
Claude Code in GitHub Codespaces; vault on local machine

🪟 Local setup — Windows

The MCP server runs as a local process — no tunnel, nothing to keep running.

1

Install prerequisites

Node.js 18+  →  nodejs.org
Claude Code CLI  →  claude.ai/code

After both are installed, open a new PowerShell window.

2

Run the installer

PowerShell
PS>Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
PS>irm https://raw.githubusercontent.com/xiaoyanfeifei/obsidian-ai-mcp/master/install.ps1 | iex

Sets up Obsidian, vault folders, and registers the MCP server automatically.

3

Verify — open a new terminal

PowerShell — new window
PS>claude
>/mcp
# ✓ obsidian — 14 tools  (if 0: exit and re-run claude)

🍎 Local setup — Mac

The MCP server runs as a local process — no tunnel, nothing to keep running.

1

Install prerequisites

Node.js 18+  →  brew install node  or  nodejs.org
Claude Code CLI  →  claude.ai/code
2

Run the installer

Terminal
$curl -fsSL https://raw.githubusercontent.com/xiaoyanfeifei/obsidian-ai-mcp/master/install-mac.sh -o install-mac.sh
$bash install-mac.sh

Asks for your vault path, scaffolds folders, saves env vars to ~/.zshrc, and registers the MCP server in ~/.claude.json.

3

Verify — open a new terminal tab

Terminal — new tab
$claude
>/mcp
# ✓ obsidian — 14 tools  (if 0: exit and re-run claude)

☁️ Codespace setup

Your vault lives on your local Windows machine. Your Codespace runs in GitHub's cloud and can't reach localhost directly — so start.ps1 creates a secure Cloudflare connection that gives your Codespace a temporary URL to reach the vault. Nothing is stored; the connection closes when you stop the script.

Prerequisite: run the local installer first — it sets the vault path and auth token automatically.

⚠️ Only run the local installer steps above if you also use Claude Code locally. Skip them if you only use Codespaces.

1

On your local Windows machine

Download and run — keep it running while you work in the Codespace.

PowerShell
PS>irm https://raw.githubusercontent.com/xiaoyanfeifei/obsidian-ai-mcp/master/start.ps1 -OutFile start.ps1
PS>.\start.ps1
# prints a curl command when ready — copy it
2

In your Codespace — run setup

Paste the curl command printed by step 1. This writes the MCP config into your Codespace.

Codespace terminal
# paste the curl command from step 1:
$curl -s https://<url>.trycloudflare.com/setup.sh | bash
3

Authenticate, then start a fresh Claude session

Run /mcp inside Claude, click Authenticate — a browser tab opens and auto-closes. Then exit and start a new Claude session. The 14 vault tools are now live.

Codespace terminal
$claude
>/mcp
# click Authenticate → browser opens → auto-closes
# exit claude, then start a new session:
>/exit
$claude
# ✓ obsidian — 14 tools live

⚠️ You must start a new Claude session after authenticating — the token is loaded at startup, not mid-session.

Automate with dotfiles: copy dotfiles/install.sh into your GitHub dotfiles repo → GitHub Settings → Codespaces → Dotfiles. Every new Codespace gets a setup-obsidian <url> shell function — skip the curl step entirely.

🐙 GitHub Copilot CLI

Inside a Copilot CLI session, run /mcp add and fill in each prompt:

Server Name
obsidian
Any unique name you like
Server Type
2 — STDIO
Press 2 for STDIO
Command
npx obsidian-ai-mcp@latest
Downloads and runs the latest version automatically
Environment Variables
OBSIDIAN_VAULT=C:\path\to\vault
Full path to your vault folder
Tools
*
Keep the default — enables all 14 vault tools

Node.js 18+ must be installed. The vault tools all work — whether Copilot follows your vault_context.md preferences depends on the model.

Start using it 🐾

Once installed, just open Claude and talk to it. No commands to memorize — describe what you want and Claude picks the right tool.

1

Open Claude and confirm the vault is connected

Terminal
$claude
>/mcp
# ✓ obsidian — 14 tools connected

Run /mcp at the start of every session to confirm the vault is live. If you see 0 tools, exit and re-run claude.

2

See what's in your vault

Claude session
>what's in my vault?
# or:
>what's in my inbox?
>show my open tasks
3

Create your first note

Claude session
# start a work log:
>create a devlog for today's work on the auth service

# quick capture:
>note: the rate limit resets every 60 seconds, not 30

# log a meeting:
>log my 2pm standup — discussed the API redesign, no blockers
4

Promote a note when it's ready

Claude session
# move a reviewed draft from Inbox → Notes:
>promote my devlog from today

# end of day review:
>review my vault — what needs attention?

Notes stay in Inbox/ until you promote them. Promoted notes move to Notes/ and are never overwritten.

Switching vaults 🔀

Need a separate vault for work vs personal? Run switch-vault.ps1 — it updates both the environment variable and the MCP registration in one step, without re-running the full installer.

1

Run the vault switcher for your OS

🪟 PowerShell (Windows)
PS>irm https://raw.githubusercontent.com/xiaoyanfeifei/obsidian-ai-mcp/master/switch-vault.ps1 | iex
🍎 Terminal (Mac)
$curl -fsSL https://raw.githubusercontent.com/xiaoyanfeifei/obsidian-ai-mcp/master/switch-vault.sh -o switch-vault.sh
$bash switch-vault.sh

Shows your current vault, asks for the new path, scaffolds Inbox/, Notes/, Capture.md, vault.config.yaml, and vault_context.md if missing, then updates everything.

2

Open a new terminal

Changes take effect in the next Claude session. Run /mcp to confirm 14 tools are connected to the new vault.