obsidian-dev-memory
Provides persistent engineering memory stored in an Obsidian vault, allowing AI assistants to capture work sessions, record decisions, and read project context from Markdown notes.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@obsidian-dev-memoryCapture today's work session and note the decisions we made."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Obsidian Developer Memory MCP
A local Model Context Protocol server that gives AI coding assistants such as Cursor and GitHub Copilot persistent engineering memory.
Memory is stored as ordinary Markdown files in an Obsidian vault. Obsidian does not need to be running. There is no community plugin and no Obsidian API key.
The same stdio MCP server works with both Cursor and GitHub Copilot / VS Code.
Architecture
Cursor Agent --------------------\
\
> MCP stdio server
/ |
GitHub Copilot / VS Code --------/ v
obsidian-dev-memory
|
v
Obsidian Markdown VaultDeveloper opens spring-auth in Cursor
|
v
Cursor calls get_project_context("spring-auth")
|
v
AI sees current project state + recent decisions
|
v
Developer and AI implement feature
|
v
AI calls capture_work_session(...)
|
+--> session note
|
+--> Git branch/SHA recorded
|
v
Durable architecture choice?
|
yes
|
v
record_decision(...)Related MCP server: LumenCore
Why direct Markdown?
The vault is the source of truth. Notes remain readable and editable in Obsidian, git, or any text editor. The server never depends on Obsidian being open, never talks to a hosted memory API, and never writes a proprietary database.
Requirements
Python 3.12+
A local Obsidian vault directory
Git on
PATHonly if you want automatic repository snapshots
Installation
git clone https://github.com/jmjava/obsidian-mcp.git
cd obsidian-mcp
uv syncuv sync installs the official MCP Python SDK and the project package.
Configuration
Required:
export OBSIDIAN_VAULT_PATH="$HOME/Documents/ObsidianVault"Optional:
export OBSIDIAN_MEMORY_ROOT="AI Memory"OBSIDIAN_MEMORY_ROOT defaults to AI Memory. Editor MCP configuration can supply these variables directly. This project includes .env.example for documentation; the server does not automatically load .env files.
Running the server
export OBSIDIAN_VAULT_PATH="/tmp/example-vault"
mkdir -p "$OBSIDIAN_VAULT_PATH"
uv run python -m obsidian_dev_memoryor:
uv run obsidian-dev-memoryThe process speaks MCP over stdio. Do not write application logs to stdout; diagnostics go to stderr.
Cursor setup
Project-level Cursor config lives at .cursor/mcp.json and uses the current mcpServers format. A portable template is in config/cursor.mcp.json.example:
{
"mcpServers": {
"obsidian-dev-memory": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/obsidian-dev-memory-mcp",
"run",
"python",
"-m",
"obsidian_dev_memory"
],
"env": {
"OBSIDIAN_VAULT_PATH": "/ABSOLUTE/PATH/TO/OBSIDIAN/VAULT"
}
}
}
}This repository also ships .cursor/rules/obsidian-memory.mdc, which tells Cursor when to read and write memory.
Machine-specific .cursor/mcp.json files are created by the installer and are not committed here.
GitHub Copilot / VS Code setup
Workspace Copilot / VS Code config lives at .vscode/mcp.json and uses the current servers format. A portable template is in config/vscode.mcp.json.example:
{
"servers": {
"obsidian-dev-memory": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/obsidian-dev-memory-mcp",
"run",
"python",
"-m",
"obsidian_dev_memory"
],
"env": {
"OBSIDIAN_VAULT_PATH": "/ABSOLUTE/PATH/TO/OBSIDIAN/VAULT"
}
}
}
}.github/copilot-instructions.md gives Copilot the same memory behavior as Cursor.
Installer usage
Wire this server into another development project:
./scripts/install-project.sh \
--project /home/user/src/example \
--vault /home/user/Documents/ObsidianVaultOptional:
./scripts/install-project.sh \
--project /home/user/src/example \
--vault /home/user/Documents/ObsidianVault \
--server /path/to/obsidian-dev-memory-mcpIf --server is omitted, the script infers this repository from its own location.
The installer creates or updates:
<project>/.cursor/mcp.json<project>/.cursor/rules/obsidian-memory.mdc<project>/.vscode/mcp.json<project>/.github/copilot-instructions.md
It fails clearly when the target project or vault is missing, and it merges MCP JSON so unrelated servers are not destroyed.
MCP tools
Tool | Purpose |
| Read |
| Append a timestamped section to today's session note |
| Write a durable decision note |
| Replace the concise project-state note |
| Local filename and text search over project memory |
| Read one vault-relative Markdown file |
| Append to |
get_project_context returns empty sections when a project is new instead of failing.
record_decision writes YYYY-MM-DD-<decision-slug>.md. If that file already exists, the server adds a numeric suffix (-2, -3, ...) instead of overwriting.
capture_work_session accepts an optional repository_path. When that path is a Git repository, the note records repository name, branch, short SHA, dirty state, and a short changed-file list. Full diffs are never written. A non-Git path is ignored.
Vault layout
AI Memory/
└── Projects/
└── <project-slug>/
├── Project State.md
├── Sessions/
│ └── YYYY-MM-DD.md
└── Decisions/
└── YYYY-MM-DD-<decision-slug>.md
Daily/
└── YYYY-MM-DD.mdThe AI Memory folder honors OBSIDIAN_MEMORY_ROOT. Logical project names are slugified (Spring Authorization Server → spring-authorization-server).
Example workflow
Open a project in Cursor or VS Code.
Before substantial work, the assistant calls
get_project_context.After meaningful implementation, it calls
capture_work_session.When an architecture choice is made, it calls
record_decision.When overall status changes, it calls
update_project_state.Open the vault in Obsidian at any time to read or edit the same files.
Security model
All note paths must resolve inside
OBSIDIAN_VAULT_PATH.Absolute note paths,
../traversal, and detectable symlink escapes are rejected.Writes are atomic (
tempfile+os.replace) where practical.The tools are not a general filesystem API.
Secret-looking values (keys, tokens, JWTs, private keys,
password=assignments) are replaced with[redacted-secret]before they are written.Cursor rules and Copilot instructions tell the assistant never to persist passwords, API keys, tokens, JWTs, private keys,
.envcontents, database credentials, production secrets, or sensitive customer data.
Testing
Tests use temporary directories, never your real vault.
uv run pytestA broader local check:
export OBSIDIAN_VAULT_PATH="$HOME/Documents/ObsidianVault"
./scripts/smoke-test.shThe smoke test verifies the environment variable, vault directory, package import, server construction, and the pytest suite.
Troubleshooting
Symptom | What to check |
Server exits immediately |
|
Tools do not appear in Cursor | Project |
Tools do not appear in Copilot | Workspace |
| Pass vault-relative paths such as |
Decision file name already existed | The server wrote |
Git section missing from a session |
|
Unexpected stdout noise | Only MCP JSON-RPC should use stdout; logs belong on stderr |
License
MIT. See LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceProvides persistent memory for AI coding assistants, storing and retrieving architectural decisions, patterns, and solutions across sessions using semantic search, while also offering git integration for commit messages and code expertise mapping.MIT- AlicenseNot gradedqualityCmaintenanceProvides AI coding assistants with persistent project memory to retain architectural decisions, code patterns, and domain knowledge across sessions. It stores data locally in a SQLite database, allowing agents to remember, recall, and manage project-specific context using full-text search.8Apache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides persistent long-term memory for AI assistants with tag-based retrieval, wiki-style linking, and source references, storing memories as markdown files with SQLite index.1MIT
- AlicenseNot gradedqualityBmaintenanceProvides persistent, searchable memory and knowledge capture for AI-assisted development, enabling agents to retain decisions, bugs, and patterns across sessions and projects.MIT
Related MCP Connectors
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Persistent memory for AI agents. Search, store, and recall across sessions.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jmjava/obsidian-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server