Obsidian Second Brain MCP
Allows AI agents to read from and append to an Obsidian vault for durable project memory, enabling logging bugs, features, decisions, and session closeouts.
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 Second Brain MCPstart project memory for this repository"
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 Second Brain MCP and Skill
Local MCP server and Codex skill for Obsidian-backed project memory.
This project turns an Obsidian vault into durable project context for AI coding agents. It is meant to complement tools like CodeGraph:
CodeGraph answers: "How does this code work?"
Obsidian Second Brain MCP answers: "What do we know about this project, bug, feature, decision, session, release, and next action?"
The server is local-first. It reads and appends Markdown files in your Obsidian vault. It does not require a cloud service, API key, or hosted database.
What It Provides
MCP tools:
project_memory_start- load a compact project context pack before meaningful work.project_memory_status- check repo-to-Obsidian linkage.project_memory_log_bug- record bug reports, investigation, fixes, verification, and next actions.project_memory_log_feature- record feature intent, implementation, verification, and follow-up.project_memory_record_decision- record durable choices and rationale.project_memory_close_session- write a session closeout with outcome, changed files, verification, open questions, next actions, and deployment status.
CLI commands:
obsidian-second-brain-mcp serveobsidian-second-brain-mcp initobsidian-second-brain-mcp statusobsidian-second-brain-mcp agents-snippet
Codex skill:
skills/obsidian-second-brain-mcp/SKILL.md
Related MCP server: Markdown Memory Context MCP Server
Requirements
Node.js 20 or newer.
An Obsidian vault stored on the local filesystem.
An AI agent that supports MCP over stdio, such as Codex CLI.
Install From Source
git clone https://github.com/YOUR-USERNAME/obsidian-second-brain-mcp-and-skill.git
cd obsidian-second-brain-mcp-and-skill
npm install
npm run build
npm linkConfirm the CLI is available:
obsidian-second-brain-mcp --helpConfigure Codex MCP
Add this MCP server to your Codex config. The exact config file location may vary by Codex version, but a common location is:
~/.codex/config.tomlExample:
[mcp_servers.obsidian_second_brain]
command = "obsidian-second-brain-mcp"
args = ["serve"]Restart Codex after editing MCP config.
Link A Repo To An Obsidian Project
From the repo you want to document:
obsidian-second-brain-mcp init \
--project "Example Project" \
--vault "/absolute/path/to/your/Obsidian Vault" \
--obsidian-project "01_Projects/Example Project" \
--write-agentsThis creates:
.obsidian-second-brain.json
AGENTS.mdIt also creates missing starter notes inside the configured Obsidian project folder:
Project Brief.md
Bugs.md
Decisions.md
Runbook.md
Next Actions.md
Activity Log.md
Changelog.md
Releases.md
Open Questions.md
Session Log.mdCheck the link:
obsidian-second-brain-mcp statusRepo Config
Each linked repo has a .obsidian-second-brain.json file:
{
"projectName": "Example Project",
"projectCode": "EP",
"vaultPath": "/absolute/path/to/your/Obsidian Vault",
"obsidianProjectPath": "01_Projects/Example Project",
"hubNote": "EP_ExampleProject_Home.md"
}If you do not want to store vaultPath in each repo, omit it and set:
export OBSIDIAN_VAULT_PATH="/absolute/path/to/your/Obsidian Vault"Do not commit .obsidian-second-brain.json if it contains private local paths. Use examples/project-config.example.json as the public template.
Install The Codex Skill
Copy the skill folder into your Codex skills directory:
mkdir -p ~/.codex/skills
cp -R skills/obsidian-second-brain-mcp ~/.codex/skills/Restart Codex. The skill tells Codex when to use the MCP tools during project work.
Intended Agent Workflow
When you start work in a linked repo, the agent should:
Call
project_memory_startwith the repo path.Use the returned project notes as durable context.
For bugs, call
project_memory_log_bugduring investigation and again when fixed or verified.For features, call
project_memory_log_featurewhen scope or implementation becomes clear.Use
project_memory_record_decisionfor durable choices.Before final response, call
project_memory_close_sessionif meaningful work happened.Ask whether to deploy or release when deployment status is relevant but not known.
Privacy
This repo contains no personal vault paths, project names, API keys, or private notes.
The MCP server runs locally and only reads/writes files in the vault path you configure. It does not send your notes anywhere.
You should still avoid committing:
.obsidian-second-brain.jsonfiles with private paths.Obsidian notes copied from a private vault.
Secrets or API keys in project notes.
Development
npm install
npm run typecheck
npm run buildRun the server manually:
obsidian-second-brain-mcp serveLicense
MIT
Available Tools
6 toolsproject_memory_close_sessionA
Close the loop after meaningful work by appending a session record to Obsidian. Use before final response when code, docs, bugs, features, tests, or deployment status changed.
| Name | Required | Description | Default |
|---|---|---|---|
| blocked | No | ||
| changed | No | ||
| outcome | Yes | ||
| verified | No | ||
| nextActions | No | ||
| projectPath | Yes | ||
| futureContext | No | ||
| openQuestions | No | ||
| deploymentStatus | No | not-applicable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses a write/append operation but omits details on side effects, idempotency, or what happens if called multiple times.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the purpose and usage; no wasted words. Efficiently structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no output schema, and no annotations, the description is too brief. It fails to explain what a session record contains, required prerequisites, or how it integrates with sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds no meaning to the 9 parameters. While parameter names are partially self-explanatory, the tool description should clarify their purpose and interplay.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('close the loop') and the resource ('session record to Obsidian'), and the usage context distinguishes it from siblings like logging bugs or features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when to use: 'before final response when code, docs, bugs, features, tests, or deployment status changed.' Lacks when-not-to-use or alternatives, but context is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_memory_log_bugB
Append a bug investigation or fix record to Obsidian. Use when a bug is identified, investigated, fixed, verified, or left blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | ||
| title | Yes | ||
| status | No | open | |
| nextActions | No | ||
| projectPath | Yes | ||
| changedFiles | No | ||
| reproduction | No | ||
| verification | No | ||
| suspectedCause | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It only says 'append ... record to Obsidian' which implies non-destructive logging but lacks details on side effects, permissions, or whether it overwrites or creates new entries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a usage clause, very concise with no wasted words. However, it lacks necessary parameter details, making it less useful despite brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, 0% schema coverage, no output schema, and no annotations, the description is grossly incomplete. It fails to explain parameters, return values, or constraints, leaving the agent with insufficient information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of any of the 9 parameters (e.g., projectPath, title, status, fix, etc.). The agent gets no guidance beyond what the schema's property names and types offer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('append a bug investigation or fix record to Obsidian') and the lifecycle context ('bug is identified, investigated, fixed, verified, or left blocked'). It implicitly differentiates from sibling tools like project_memory_log_feature and project_memory_record_decision by focusing on bugs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly lists conditions for use (when a bug is identified, investigated, fixed, verified, or blocked). However, it does not mention when not to use or direct the agent to alternative siblings for non-bug tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_memory_log_featureB
Append a feature planning or implementation record to Obsidian. Use when starting, changing, completing, or deferring feature work.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| title | Yes | ||
| status | No | planned | |
| userValue | No | ||
| nextActions | No | ||
| projectPath | Yes | ||
| changedFiles | No | ||
| verification | No | ||
| implementation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states 'append a record' but doesn't disclose idempotency, side effects, or permission requirements. The behavioral insight is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences with no redundancy. The first sentence states purpose, the second gives usage context. Very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no output schema, no annotations), the description fails to provide enough context. It does not describe return values or parameter semantics, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of any of the 9 parameters, including required ones like projectPath and title. The agent gets no help understanding parameter meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it appends a feature planning or implementation record to Obsidian and specifies the contexts (starting, changing, completing, deferring feature work). It distinguishes from sibling tools like project_memory_log_bug.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (starting, changing, completing, deferring feature work), implicitly suggesting alternatives for other activities, though not explicitly stating when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_memory_record_decisionA
Record a durable project decision in Obsidian. Use when the agent or user chooses an approach, rejects alternatives, changes scope, or decides deployment/release behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| why | Yes | ||
| impact | No | ||
| decision | Yes | ||
| projectPath | Yes | ||
| alternatives | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates the decision is 'durable' and stored 'in Obsidian', implying persistence, but does not disclose side effects (e.g., file creation/overwrite), authorization needs, or error states. Adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action ('Record') and context ('durable project decision in Obsidian'). Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no annotations, the description is somewhat incomplete. It omits parameter explanations and return value format. However, the tool's purpose and usage context are well-covered, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'decision' and 'why' implicitly but does not explain the purpose or format of any parameter (e.g., projectPath, impact, alternatives). The agent lacks crucial details for constructing valid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Record a durable project decision in Obsidian.' It lists specific scenarios (chooses approach, rejects alternatives, changes scope, decides deployment/release behavior) that distinguish it from sibling tools like logging bugs or features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'Use when the agent or user chooses an approach, rejects alternatives, changes scope, or decides deployment/release behavior.' It does not mention when not to use or provide alternatives, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_memory_startA
Load the compact Obsidian project memory pack for this repo before meaningful work. Use this at session start, before bug fixes, before feature work, and before project health reviews.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | Short description of the work about to happen. | |
| projectPath | Yes | Absolute path to the repo or any directory inside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must compensate. It states action but lacks detail on side effects, idempotency, or error conditions. For example, whether loading overwrites existing memory is unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action and usage guidance. No superfluous words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple load operation with no output schema, description covers main usage scenarios. Could mention that it initializes memory context, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. Description adds no additional meaning beyond schema, meeting the baseline but not improving it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'load' and identifies resource 'compact Obsidian project memory pack'. Clearly distinguishes from sibling tools (close, log, record, status) which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'at session start, before bug fixes, before feature work, and before project health reviews'. Provides clear context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_memory_statusA
Check whether this repo is linked to an Obsidian project memory pack and list missing standard notes.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | Absolute path to the repo or any directory inside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool checks and lists, implying no side effects, but it does not explicitly state non-destructiveness or permissions needed. The behavior is adequately described for a simple status check, but more transparency would help.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the key action and purpose. Every word earns its place; there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only status tool with one parameter and no output schema, the description is nearly complete. It explains what the tool checks and what it lists. It could optionally mention the return format, but that is not critical given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, and their descriptions are clear. The tool description adds no additional meaning beyond what the schema already provides for the single parameter 'projectPath'. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check whether this repo is linked to an Obsidian project memory pack and list missing standard notes.' It specifies the verb (check), resource (repo linked to Obsidian project memory pack), and outcome (list missing notes). This is distinct from sibling tools like project_memory_start or project_memory_log_bug.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context—checking status before taking actions like starting a session or logging. However, it does not explicitly state when to use versus alternatives or when not to use. The sibling names provide context, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
project_memory_close_session - First observed
project_memory_log_bug - First observed
project_memory_log_feature - First observed
project_memory_record_decision - First observed
project_memory_start - First observed
project_memory_status
TDQS
Each tool has a distinct purpose: starting/ending sessions, logging bugs/features, recording decisions, and checking status. Descriptions clearly differentiate them, leaving no ambiguity.
All tools share the 'project_memory_' prefix with verb_noun for most (close_session, log_bug, etc.). 'start' and 'status' deviate slightly (verb only and noun only), but the pattern remains highly predictable.
Six tools cover the essential operations for a project memory system without excess. Each tool serves a clear, non-redundant purpose.
The tool set covers the full lifecycle of project memory: start, log (bugs, features, decisions), close, and status check. No obvious gaps for the intended domain.
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 Connectors
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent docs and memory for AI agents — read, write, organize & search a shared workspace.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to explore, search, and manage local Obsidian vault documents with tools for document search, automatic frontmatter property generation, and attachment organization.5202ISC
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to maintain a structured Markdown or Obsidian memory vault with tools for reading, writing, searching, and organizing notes.MIT
- AlicenseAqualityCmaintenanceProvides AI agents with direct filesystem access to an Obsidian vault for note management, task orchestration, context persistence, and git synchronization.27822MIT
- FlicenseNot gradedqualityCmaintenanceEnables reading, writing, searching, and managing Obsidian vault notes through MCP tools and prompts, allowing AI agents to interact with local knowledge bases.-
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/dhaseeb-proj/obsidian-second-brain-mcp-and-skill'
If you have feedback or need assistance with the MCP directory API, please join our Discord server