Memory Vault MCP Server — Markdown + SQLite knowledge store with bidirectional [[wikilinks]] for AI agents
Project description
vault-mcp
Markdown + SQLite knowledge store with bidirectional [[wikilinks]], exposed as an MCP server. Designed for AI agents to maintain an interconnected knowledge base.
Installation
uvx vault-mcp # run directly without install
pip install vault-mcp # core (keyword search only)
pip install "vault-mcp[semantic]" # + embedding-based semantic search
Running the MCP Server
# Start with default settings (vault in ./vault)
vault-mcp
# Custom vault directory
VAULT_DIR=/path/to/notes vault-mcp
# With semantic search enabled
VAULT_DIR=./vault VAULT_EMBEDDING_MODEL=jinaai/jina-embeddings-v5-text-nano vault-mcp
Environment Variables
| Variable | Default | Description |
|---|---|---|
VAULT_DIR |
./vault |
Root directory for markdown files |
VAULT_EMBEDDING_MODEL |
(none) | Sentence-transformers model name. Enables semantic search when set |
Client Configuration
Claude Code
claude mcp add vault -- vault-mcp
Or .mcp.json:
{
"mcpServers": {
"vault": {
"type": "stdio",
"command": "vault-mcp",
"env": { "VAULT_DIR": "./vault" }
}
}
}
Cursor / Windsurf / Other MCP Clients
Add to your MCP settings:
{
"vault": {
"command": "vault-mcp",
"env": { "VAULT_DIR": "./vault" }
}
}
Python Library (no MCP)
from vault_mcp import MarkdownVault, create_vault_tools
vault = MarkdownVault("./my-vault")
vault.write("skill/debugging", {"type": "skill", "confidence": "pattern"}, "# Debugging\n\n...")
# Or get all 11 tools as a dict of callables
tools = create_vault_tools(vault)
result = tools["vault_search"](query="debugging", mode="keyword")
Note Format
Each note is a .md file with YAML frontmatter, organized in type-based folders:
vault/
skill/
timeout-diagnosis.md
concept/
connection-pooling.md
episodic/
2024-01-15-incident.md
---
type: skill
tags: [database, timeout]
confidence: pattern
status: active
---
# Timeout Diagnosis
Description of the skill...
## Evidence
- [[episodic/2024-01-15-incident]]: First observed during outage
## Related
- [[concept/connection-pooling]]
Frontmatter Fields
| Field | Required | Values |
|---|---|---|
type |
Yes | skill, episodic, concept, failure-pattern, system-knowledge |
confidence |
Yes | fact, pattern, heuristic |
tags |
No | Free-form string list |
status |
Auto | active, superseded, archived |
Tools
Write & Edit
| Tool | Description |
|---|---|
vault_write(path, frontmatter, body) |
Create or overwrite a note |
vault_write_batch(entries) |
Write multiple notes atomically |
vault_edit(path, operation, params) |
Incremental edit (4 operations below) |
vault_delete(path) |
Delete a note |
vault_rename(old_path, new_path) |
Rename + auto-rewrite all backlinks |
Edit Operations
| Operation | Params | Use |
|---|---|---|
replace_string |
{"old": "...", "new": "..."} |
Inline corrections |
set_frontmatter |
{"confidence": "fact"} |
Update metadata |
replace_section |
{"heading": "## Evidence", "body": "..."} |
Rewrite a section |
append_section |
{"heading": "## Evidence", "content": "..."} |
Append to a section |
Read & Browse
| Tool | Description |
|---|---|
vault_read(path) |
Read frontmatter + body |
vault_list(path, depth, type_filter) |
Browse directory |
Search & Discovery
| Tool | Description |
|---|---|
vault_search(query, filters, mode, limit) |
FTS5 / semantic / hybrid search |
vault_backlinks(path) |
Who links to this note |
vault_traverse(start, depth, direction) |
BFS graph traversal with directed edges |
vault_lint() |
Find dead links + orphan notes |
Validation
Every write/edit automatically checks and returns warnings:
- Required frontmatter fields (
type,confidence) - Valid enum values
- H1 heading present in body
- All
[[wikilinks]]resolve to existing notes
The write succeeds regardless — warnings are informational for the agent to decide whether to fix.
Architecture
.md files (source of truth, git-trackable)
│
▼
.vault.db (SQLite index, auto-rebuilt if deleted)
├── notes — YAML frontmatter metadata
├── notes_fts — FTS5 full-text search
├── links — [[wikilink]] directed graph
├── tags — tag index
└── notes_vec — embedding vectors (optional)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vault_mcp-0.1.1.tar.gz.
File metadata
- Download URL: vault_mcp-0.1.1.tar.gz
- Upload date:
- Size: 121.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6957378ac1682ba0a03ed82d2a9b89be4cb90308faef9d760f9631c646bdb4d
|
|
| MD5 |
69c55de39c800e5a5abc9f1d0d7d6679
|
|
| BLAKE2b-256 |
0149a93b3d9b25be921787b40c7623e44af6954583393d64cfd4e8e934eac45a
|
File details
Details for the file vault_mcp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: vault_mcp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 19.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6aac3955aa0164b3ed23a6ad8c6bd4721c545778d0dd6eb66b0a5cfc9a2cf603
|
|
| MD5 |
92b61eb0d002f70addefd31069687e4e
|
|
| BLAKE2b-256 |
4efdee0051f35c33fd69fd731dff5c778ced8e4d7258abe13784140bdd55f3d9
|