Skip to main content
Glama
dhaseeb-proj

Obsidian Second Brain MCP

by dhaseeb-proj

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 serve

  • obsidian-second-brain-mcp init

  • obsidian-second-brain-mcp status

  • obsidian-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 link

Confirm the CLI is available:

obsidian-second-brain-mcp --help

Configure 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.toml

Example:

[mcp_servers.obsidian_second_brain]
command = "obsidian-second-brain-mcp"
args = ["serve"]

Restart Codex after editing MCP config.

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-agents

This creates:

.obsidian-second-brain.json
AGENTS.md

It 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.md

Check the link:

obsidian-second-brain-mcp status

Repo 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:

  1. Call project_memory_start with the repo path.

  2. Use the returned project notes as durable context.

  3. For bugs, call project_memory_log_bug during investigation and again when fixed or verified.

  4. For features, call project_memory_log_feature when scope or implementation becomes clear.

  5. Use project_memory_record_decision for durable choices.

  6. Before final response, call project_memory_close_session if meaningful work happened.

  7. 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.json files 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 build

Run the server manually:

obsidian-second-brain-mcp serve

License

MIT

Available Tools

6 tools
project_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
blockedNo
changedNo
outcomeYes
verifiedNo
nextActionsNo
projectPathYes
futureContextNo
openQuestionsNo
deploymentStatusNonot-applicable

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNo
titleYes
statusNoopen
nextActionsNo
projectPathYes
changedFilesNo
reproductionNo
verificationNo
suspectedCauseNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNo
titleYes
statusNoplanned
userValueNo
nextActionsNo
projectPathYes
changedFilesNo
verificationNo
implementationNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
whyYes
impactNo
decisionYes
projectPathYes
alternativesNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentNoShort description of the work about to happen.
projectPathYesAbsolute path to the repo or any directory inside it.

TDQS

A4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathYesAbsolute path to the repo or any directory inside it.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 6 tool updatesv0.1.0
    • First observedproject_memory_close_session
    • First observedproject_memory_log_bug
    • First observedproject_memory_log_feature
    • First observedproject_memory_record_decision
    • First observedproject_memory_start
    • First observedproject_memory_status

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a distinct purpose: starting/ending sessions, logging bugs/features, recording decisions, and checking status. Descriptions clearly differentiate them, leaving no ambiguity.

Naming Consistency4/5

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.

Tool Count5/5

Six tools cover the essential operations for a project memory system without excess. Each tool serves a clear, non-redundant purpose.

Completeness5/5

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

ActivityStale
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to explore, search, and manage local Obsidian vault documents with tools for document search, automatic frontmatter property generation, and attachment organization.
    5
    20
    2
    ISC
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI agents with direct filesystem access to an Obsidian vault for note management, task orchestration, context persistence, and git synchronization.
    27
    82
    2
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

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