MCP server for Obsidian vaults — plugin-free search, memory, link graph, and full vault access for any AI agent. Local or fully remote: one Docker container, Streamable HTTP, OAuth 2.1.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
claude mcp add vault-cortex -- npx -y vault-cortex{
"mcpServers": {
"vault-cortex": {
"command": "npx",
"args": ["-y", "vault-cortex"]
}
}
}MCP Servers overview
<p align="center">
<img src="./assets/banner.svg" width="720" alt="Vault Cortex">
</p>
<div align="center">
[](https://github.com/aliasunder/vault-cortex/actions/workflows/ci.yml)
[](https://github.com/aliasunder/vault-cortex/actions/workflows/gitleaks.yml)
[](https://github.com/aliasunder/vault-cortex/actions/workflows/trivy.yml)
[](https://github.com/aliasunder/vault-cortex/releases)
[](https://github.com/aliasunder/vault-cortex/blob/main/LICENSE)
[](https://nodejs.org/)
[](https://www.typescriptlang.org/)
</div>
<div align="center">
[](https://glama.ai/mcp/servers/aliasunder/vault-cortex)
</div>
<!-- TODO: Uncomment when demo GIF is recorded (see ^demo-gif task)
<p align="center">
<img src="./assets/demo.gif" width="600" alt="Vault Cortex demo — vault_get_memory and vault_update_memory round-trip">
</p>
-->
## What is this?
**Vault Cortex** gives any MCP client — Claude Desktop, Claude Code, Cursor, OpenCode — full access to your [Obsidian](https://obsidian.md) vault. Search notes, read and write content, query the link graph, manage structured memory, and resolve daily notes — all through 23 tools over a single Docker container.
The typical Obsidian + MCP setup requires three moving parts running simultaneously: Obsidian open → Local REST API plugin → a separate MCP server wrapping the REST API. **Vault Cortex** replaces all of that with Docker and your vault folder.
- **Plugin-free** — Obsidian doesn't need to be running; headless sync keeps the vault current, and the server works directly with `.md` files on disk
- **Remote access** — works from your phone, a remote server, or any MCP client via OAuth 2.1
- **Ranked search** — SQLite FTS5 with BM25 scoring, stemming, phrase matching, and tag/property/folder filtering
- **Structured memory** — dated entries, section targeting, auto-initialization for AI personalization
- **Obsidian-native** — understands frontmatter, wikilinks, tags, headings, and daily notes
### Roadmap
| Phase | What | Status |
| ----- | ----------------------------------------------------------------------------------- | -------- |
| **1** | Vault CRUD, full-text search (FTS5), memory layer, OAuth 2.1 | Complete |
| **2** | Semantic search + knowledge graph via [LightRAG](https://github.com/HKUDS/LightRAG) | Planned |
## Quick Start
### Local (2 minutes — Docker + your vault folder)
**Prerequisites:** [Docker](https://docs.docker.com/get-docker/), Node.js >= 20.12 (only for the CLI — the server itself runs in Docker), and an Obsidian vault (or any folder of `.md` files).
```bash
npx vault-cortex@latest init
```
That's it — the CLI asks for your vault path, generates the auth token and config files, starts the server, and prints the connection details for your MCP client.
<details>
<summary><strong>Manual setup</strong> (no Node.js needed)</summary>
```bash
# 1. Get the quickstart files
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/local/docker-compose.yml
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/local/.env.example
# 2. Configure
cp .env.example .env
# Edit .env — set MCP_AUTH_TOKEN (openssl rand -hex 32) and VAULT_PATH
# 3. Start
docker compose up
```
</details>
**[Full local guide →](./deploy/local/)**
### Remote (access from anywhere — Docker + Obsidian Sync)
**Prerequisites:** a VPS with [Docker](https://docs.docker.com/engine/install/), an [Obsidian Sync](https://obsidian.md/sync) subscription, and Node.js >= 20.12 (only for the CLI — the server itself runs in Docker).
```bash
# On your VPS:
npx vault-cortex@latest init --mode remote
```
That's it — the CLI walks through the public URL, Obsidian Sync token (it can run the token generator for you), and auth config, then starts the server.
<details>
<summary><strong>Manual setup</strong> (no Node.js needed)</summary>
```bash
# On your VPS:
mkdir -p /opt/vault-cortex && cd /opt/vault-cortex
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/remote/docker-compose.yml
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/remote/.env.example
cp .env.example .env
# Edit .env — set MCP_AUTH_TOKEN, PUBLIC_URL, OBSIDIAN_AUTH_TOKEN, VAULT_NAME
docker compose up -d
```
</details>
**[Full remote guide →](./deploy/remote/)**
### Connect your MCP client
| Setup | Server URL |
| ---------- | --------------------------- |
| **Local** | `http://localhost:8000/mcp` |
| **Remote** | `<PUBLIC_URL>/mcp` |
Add the server URL in any MCP client — Claude Code, Claude Desktop, Cursor, OpenCode, or any other. OAuth clients open a consent page in your browser — approve with your token, and the client handles token renewal from then on. Clients without OAuth (MCP Inspector, scripts) send the token directly as an `Authorization: Bearer` header.
**Claude Code:**
```bash
claude mcp add --transport http vault-cortex http://localhost:8000/mcp # local (or <PUBLIC_URL>/mcp)
```
**Claude Desktop:** the "Add custom connector" dialog only accepts `https` URLs. With an `https` PUBLIC_URL, add it directly in the connector dialog; for a localhost server, register it in `claude_desktop_config.json` through the [mcp-remote](https://github.com/geelen/mcp-remote) stdio bridge instead:
```json
{
"mcpServers": {
"vault-cortex": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8000/mcp",
"--header",
"Authorization: Bearer <your MCP_AUTH_TOKEN>"
]
}
}
}
```
**claude.ai (web and mobile)** connects to the remote setup only — its connectors are fetched server-side and can never reach localhost.
> "Remote MCP server" refers to the connection type (HTTP) — in the local setup the server still runs entirely on your machine.
See [Authentication](#authentication) for both methods and token lifetimes.
## Tools (23)
| Category | Tool | Description |
| --------------- | ---------------------------- | -------------------------------------------------------- |
| **Vault CRUD** | `vault_read_note` | Read a note by path |
| | `vault_write_note` | Create or overwrite a note with frontmatter |
| | `vault_patch_note` | Heading-targeted edit (append, prepend, replace, insert) |
| | `vault_replace_in_note` | Find-and-replace text in a note |
| | `vault_list_notes` | List notes with optional glob/folder filter |
| | `vault_delete_note` | Delete a note (protected paths enforced) |
| **Search** | `vault_search` | Full-text search with tag/folder/property filters |
| | `vault_search_by_tag` | Find notes by tag (exact or prefix match) |
| | `vault_search_by_folder` | Browse notes in a folder with metadata |
| | `vault_recent_notes` | Recently modified or created notes |
| | `vault_list_tags` | All tags with usage counts |
| **Memory** | `vault_get_memory` | Read structured memory (file, section, or all) |
| | `vault_update_memory` | Append a dated entry to a memory section |
| | `vault_delete_memory` | Remove a specific memory entry by date |
| | `vault_list_memory_files` | Discover memory files and their sections |
| **Properties** | `vault_list_property_keys` | All frontmatter keys with sample values |
| | `vault_list_property_values` | Distinct values for a property key |
| | `vault_search_by_property` | Find notes by frontmatter key-value |
| | `vault_update_properties` | Add or update properties without touching the body |
| **Links** | `vault_get_backlinks` | Notes linking to a given path |
| | `vault_get_outgoing_links` | Links from a given note |
| | `vault_find_orphans` | Notes with no incoming links |
| **Daily Notes** | `vault_get_daily_note` | Today's (or any date's) daily note |
## Configuration
All settings are environment variables with sensible defaults.
| Variable | Required? | Default | Description |
| ------------------------What people ask about vault-cortex
What is aliasunder/vault-cortex?
+
aliasunder/vault-cortex is mcp servers for the Claude AI ecosystem. MCP server for Obsidian vaults — plugin-free search, memory, link graph, and full vault access for any AI agent. Local or fully remote: one Docker container, Streamable HTTP, OAuth 2.1. It has 2 GitHub stars and was last updated today.
How do I install vault-cortex?
+
You can install vault-cortex by cloning the repository (https://github.com/aliasunder/vault-cortex) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is aliasunder/vault-cortex safe to use?
+
Our security agent has analyzed aliasunder/vault-cortex and assigned a Trust Score of 87/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.
Who maintains aliasunder/vault-cortex?
+
aliasunder/vault-cortex is maintained by aliasunder. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to vault-cortex?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy vault-cortex to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/aliasunder-vault-cortex)<a href="https://claudewave.com/repo/aliasunder-vault-cortex"><img src="https://claudewave.com/api/badge/aliasunder-vault-cortex" alt="Featured on ClaudeWave: aliasunder/vault-cortex" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。