Skip to main content
Glama
jmjava
by jmjava

Obsidian Developer Memory MCP

Cursor 및 GitHub Copilot과 같은 AI 코딩 어시스턴트에 영구적인 엔지니어링 메모리를 제공하는 로컬 Model Context Protocol 서버입니다.

메모리는 Obsidian 볼트에 일반 Markdown 파일로 저장됩니다. Obsidian이 실행 중일 필요는 없습니다. 커뮤니티 플러그인도, Obsidian API 키도 필요 없습니다.

동일한 stdio MCP 서버가 Cursor와 GitHub Copilot / VS Code에서 모두 작동합니다.

아키텍처

Cursor Agent --------------------\
                                  \
                                   > MCP stdio server
                                  /        |
GitHub Copilot / VS Code --------/         v
                               obsidian-dev-memory
                                        |
                                        v
                               Obsidian Markdown Vault
Developer 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

왜 직접 Markdown을 사용하나요?

볼트가 진실의 원천입니다. 노트는 Obsidian, git 또는 모든 텍스트 편집기에서 읽고 편집할 수 있는 상태로 유지됩니다. 서버는 Obsidian이 열려 있을 필요가 없으며, 호스팅된 메모리 API와 통신하지 않으며, 독점 데이터베이스에 쓰지 않습니다.

요구 사항

  • Python 3.12+

  • uv

  • 로컬 Obsidian 볼트 디렉토리

  • 자동 저장소 스냅샷을 원하는 경우에만 PATH에 Git

설치

git clone https://github.com/jmjava/obsidian-mcp.git
cd obsidian-mcp
uv sync

uv sync는 공식 MCP Python SDK와 프로젝트 패키지를 설치합니다.

구성

필수:

export OBSIDIAN_VAULT_PATH="$HOME/Documents/ObsidianVault"

선택 사항:

export OBSIDIAN_MEMORY_ROOT="AI Memory"

OBSIDIAN_MEMORY_ROOT의 기본값은 AI Memory입니다. 편집기 MCP 구성에서 이러한 변수를 직접 제공할 수 있습니다. 이 프로젝트에는 문서용 .env.example이 포함되어 있습니다. 서버는 .env 파일을 자동으로 로드하지 않습니다.

서버 실행

export OBSIDIAN_VAULT_PATH="/tmp/example-vault"
mkdir -p "$OBSIDIAN_VAULT_PATH"

uv run python -m obsidian_dev_memory

또는:

uv run obsidian-dev-memory

프로세스는 stdio를 통해 MCP와 통신합니다. 애플리케이션 로그를 stdout에 쓰지 마십시오. 진단은 stderr로 보냅니다.

Cursor 설정

프로젝트 수준 Cursor 구성은 .cursor/mcp.json에 있으며 현재 mcpServers 형식을 사용합니다. 이식 가능한 템플릿은 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"
      }
    }
  }
}

이 저장소에는 Cursor에 메모리를 읽고 써야 하는 시기를 알려주는 .cursor/rules/obsidian-memory.mdc도 포함되어 있습니다.

머신별 .cursor/mcp.json 파일은 설치 프로그램에 의해 생성되며 여기에 커밋되지 않습니다.

GitHub Copilot / VS Code 설정

작업 영역 Copilot / VS Code 구성은 .vscode/mcp.json에 있으며 현재 servers 형식을 사용합니다. 이식 가능한 템플릿은 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는 Copilot에 Cursor와 동일한 메모리 동작을 제공합니다.

설치 프로그램 사용법

이 서버를 다른 개발 프로젝트에 연결합니다:

./scripts/install-project.sh \
  --project /home/user/src/example \
  --vault /home/user/Documents/ObsidianVault

선택 사항:

./scripts/install-project.sh \
  --project /home/user/src/example \
  --vault /home/user/Documents/ObsidianVault \
  --server /path/to/obsidian-dev-memory-mcp

--server를 생략하면 스크립트는 자체 위치에서 이 저장소를 유추합니다.

설치 프로그램은 다음을 생성하거나 업데이트합니다:

  • <project>/.cursor/mcp.json

  • <project>/.cursor/rules/obsidian-memory.mdc

  • <project>/.vscode/mcp.json

  • <project>/.github/copilot-instructions.md

대상 프로젝트나 볼트가 없으면 명확하게 실패하며, 관련 없는 서버가 손상되지 않도록 MCP JSON을 병합합니다.

MCP 도구

도구

목적

get_project_context

Project State.md와 가장 최근 세션 및 결정 노트를 읽습니다.

capture_work_session

오늘의 세션 노트에 타임스탬프가 있는 섹션을 추가합니다.

record_decision

영구적인 결정 노트를 작성합니다.

update_project_state

간결한 프로젝트 상태 노트를 교체합니다.

search_memory

프로젝트 메모리에서 로컬 파일 이름 및 텍스트 검색을 수행합니다.

read_note

볼트 기준 Markdown 파일 하나를 읽습니다.

append_daily_note

Daily/YYYY-MM-DD.md에 추가합니다.

get_project_context는 프로젝트가 새 프로젝트인 경우 실패하는 대신 빈 섹션을 반환합니다.

record_decision은 YYYY-MM-DD-<decision-slug>.md를 씁니다. 해당 파일이 이미 있으면 서버는 덮어쓰는 대신 숫자 접미사(-2, -3, ...)를 추가합니다.

capture_work_session은 선택적 repository_path를 허용합니다. 해당 경로가 Git 저장소인 경우 노트는 저장소 이름, 분기, 짧은 SHA, 더티 상태 및 변경된 파일 목록을 기록합니다. 전체 diff는 절대 기록되지 않습니다. Git이 아닌 경로는 무시됩니다.

볼트 레이아웃

AI Memory/
└── Projects/
    └── <project-slug>/
        ├── Project State.md
        ├── Sessions/
        │   └── YYYY-MM-DD.md
        └── Decisions/
            └── YYYY-MM-DD-<decision-slug>.md

Daily/
└── YYYY-MM-DD.md

AI Memory 폴더는 OBSIDIAN_MEMORY_ROOT를 따릅니다. 논리적 프로젝트 이름은 슬러그화됩니다(Spring Authorization Server → spring-authorization-server).

예제 워크플로우

  1. Cursor 또는 VS Code에서 프로젝트를 엽니다.

  2. 본격적인 작업 전에 어시스턴트는 get_project_context를 호출합니다.

  3. 의미 있는 구현 후에는 capture_work_session을 호출합니다.

  4. 아키텍처 선택이 이루어지면 record_decision을 호출합니다.

  5. 전반적인 상태가 변경되면 update_project_state를 호출합니다.

  6. 언제든지 Obsidian에서 볼트를 열어 동일한 파일을 읽거나 편집합니다.

보안 모델

  • 모든 노트 경로는 OBSIDIAN_VAULT_PATH 내부로 확인되어야 합니다.

  • 절대 노트 경로, ../ 탐색 및 감지 가능한 심볼릭 링크 이스케이프는 거부됩니다.

  • 쓰기는 가능한 한 원자적입니다(tempfile + os.replace).

  • 도구는 일반 파일 시스템 API가 아닙니다.

  • 비밀처럼 보이는 값(키, 토큰, JWT, 개인 키, password= 할당)은 기록되기 전에 [redacted-secret]으로 대체됩니다.

  • Cursor 규칙 및 Copilot 지침은 어시스턴트가 비밀번호, API 키, 토큰, JWT, 개인 키, .env 내용, 데이터베이스 자격 증명, 프로덕션 비밀 또는 민감한 고객 데이터를 저장하지 않도록 지시합니다.

테스트

테스트는 실제 볼트가 아닌 임시 디렉토리를 사용합니다.

uv run pytest

더 광범위한 로컬 검사:

export OBSIDIAN_VAULT_PATH="$HOME/Documents/ObsidianVault"
./scripts/smoke-test.sh

스모크 테스트는 환경 변수, 볼트 디렉토리, 패키지 가져오기, 서버 구성 및 pytest 스위트를 확인합니다.

문제 해결

증상

확인 사항

서버가 즉시 종료됨

OBSIDIAN_VAULT_PATH가 설정되어 있고 디렉토리가 존재하는지 확인

Cursor에 도구가 표시되지 않음

프로젝트 .cursor/mcp.json이 있는지, 창을 다시 로드했는지, uv가 PATH에 있는지 확인

Copilot에 도구가 표시되지 않음

작업 영역 .vscode/mcp.json이 mcpServers가 아닌 최상위 servers 키를 사용하는지 확인

Path traversal is not allowed

AI Memory/Projects/spring-auth/Project State.md와 같은 볼트 기준 경로를 전달

결정 파일 이름이 이미 존재함

서버가 덮어쓰는 대신 YYYY-MM-DD-<slug>-2.md를 기록함

세션에 Git 섹션 누락

repository_path가 생략되었거나 Git 저장소가 아님. 치명적이지 않음

예기치 않은 stdout 노이즈

MCP JSON-RPC만 stdout을 사용해야 하며, 로그는 stderr에 있어야 함

라이선스

MIT. LICENSE를 참조하십시오.

Available Tools

7 tools
append_daily_noteB

Append an item to Daily/YYYY-MM-DD.md without overwriting existing text.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
contentYes
headingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose one important behavior: it appends rather than overwrites. However, it does not explain what happens when the file does not exist, what a null date means, or how the optional heading affects the appended item.

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 sentence with no filler. It front-loads the action and resource, and the non-destructive guarantee is useful and concise.

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?

The tool has no annotations and no parameter documentation, so the description needed to compensate. It leaves meaningful gaps: how the optional date and heading parameters behave, whether the daily note file is auto-created, and what the output schema represents. It is enough for a very basic call but not for confident correct use of all parameters.

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 needed to explain the role of 'content', 'date', and 'heading', but it only refers generically to 'an item'. The parameter names are somewhat self-explanatory, but the default/null behavior and the meaning of 'heading' are left entirely to inference.

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 states a specific verb ('Append'), a specific resource ('Daily/YYYY-MM-DD.md'), and a clear non-destructive behavior ('without overwriting existing text'). This makes the tool's purpose immediately distinguishable from sibling read/lookup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool to use for adding to a dated daily note, but it gives no explicit guidance about when to choose it over alternatives or when not to use it. No sibling-specific differentiation or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_work_sessionA

Capture meaningful work performed during a coding session.

Appends a timestamped section to that day's session note. When repository_path is a Git repo, records branch, short SHA, and dirty state. Never persist secrets or full diffs.

ParametersJSON Schema
NameRequiredDescriptionDefault
changesNo
projectYes
summaryYes
decisionsNo
next_stepsNo
open_questionsNo
repository_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It reveals that the tool appends a timestamped section, conditionally records Git branch/SHA/dirty state, and never persists secrets or full diffs. It doesn't cover file-creation edge cases or failure behavior, but the core side effects are transparent.

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?

Three short sentences with no filler: purpose, mechanics, and safety constraint. The most important behavioral facts are front-loaded, and every sentence earns its place.

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 7-parameter tool with no annotations and an existing output schema, the description covers purpose, key behavior, Git-related handling, and a safety boundary. The main gap is that it never explains when to use this tool versus the similar sibling append_daily_note, or versus record_decision.

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 description coverage is 0%, so the description must compensate. It does clarify repository_path behavior and constrains 'changes' via the no-full-diffs rule, but it leaves project, summary, decisions, next_steps, and open_questions to be inferred from their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('capture') and resource ('that day's session note'), and adds concrete behavioral details like timestamped appending and Git metadata. It doesn't explicitly distinguish itself from the sibling 'append_daily_note', whose name suggests a similar append-to-note operation.

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 gives a clear context: use this to capture meaningful work performed during a coding session. It also implicitly discourages submitting secrets or full diffs. However, it does not state when-not-to-use or name alternatives like append_daily_note or record_decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_contextA

Retrieve concise durable memory before substantial work.

Reads Project State.md plus the newest session and decision notes. Returns empty sections when the project is new. Never returns the entire vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes
recent_sessionsNo
recent_decisionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full transparency burden, and it discloses key behaviors: it reads three named sources, returns empty sections for new projects, and never returns the entire vault. The guarantee about new projects prevents the agent from misinterpreting missing output as an error. The only gap is what happens when the project argument is invalid or the files are absent, but that is not critical.

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?

Four short sentences present the outcome first, then sources, then edge-case behavior, then a boundary—all relevant and no filler. The line 'Never returns the entire vault' is especially compact and valuable.

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?

The description explains the read behavior and edge case effectively, and an output schema exists so return-structure details are not needed here. However, with three parameters and no schema descriptions, the complete absence of parameter documentation leaves the tool partially underspecified. An agent could call it correctly via defaults, but it would have to guess at the influence of recent_sessions and recent_decisions.

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 explain the three parameters. It mentions 'Project State.md' and 'newest session and decision notes,' which loosely maps to project and the count parameters, but never states that recent_sessions and recent_decisions control how many notes are read, nor what format project takes. The parameter names are partially self-explanatory, but the description adds no meaningful parameter guidance.

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 opens with 'Retrieve concise durable memory before substantial work,' a specific verb/object pair with a clear trigger condition. It goes on to name the exact sources (Project State.md, newest session and decision notes) and states what it will not do ('Never returns the entire vault'), which separates it from read_note and search_memory.

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 phrase 'before substantial work' supplies an explicit when-to-use signal, positioning the tool as the starting point for context gathering. It does not explicitly name alternatives or exclusions, but the boundary 'Never returns the entire vault' gives agents a cue that this is not a vault-wide read. A stronger definition would name search_memory or read_note as alternatives for broader or note-specific reads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_noteA

Read one Markdown note inside the configured Obsidian vault.

The path must stay inside OBSIDIAN_VAULT_PATH. Absolute paths and traversal such as ../ are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral disclosure burden. It adds meaningful behavior by stating that paths must stay inside OBSIDIAN_VAULT_PATH and that absolute paths or ../ traversal are rejected. This is more transparent than typical read-tool descriptions, though it does not disclose error behavior or file-not-found handling.

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 short, purposeful segments: the operation sentence is front-loaded, and the path constraint follows in a compact separate statement. Every sentence earns its place; there is no filler or repetition.

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 one-parameter read tool, the description plus the existing output schema is largely complete: it states what the tool does and the key input constraint. It leaves minor gaps around expected path format and error handling, but an agent can safely select and invoke the tool based on the provided information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'path' as a required string with no description, so the description is the sole source of parameter meaning. It adds essential semantics: the path must stay within OBSIDIAN_VAULT_PATH, and absolute or traversal paths are rejected. It could further specify whether a .md extension or relative-to-root syntax is required, but it covers the critical safety constraints.

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 opens with a specific verb and resource: 'Read one Markdown note inside the configured Obsidian vault.' This clearly identifies the operation and the object, and it distinguishes the tool from the sibling tools, which are write/search/update operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb 'read' implies this is the tool to use for retrieving a note's content, but the description never states when to prefer it over siblings like search_memory or append_daily_note. There is no explicit when-not-to-use or alternative guidance, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_decisionA

Store a durable architecture or engineering decision.

Creates YYYY-MM-DD-.md. If that file already exists, a numeric suffix is added instead of overwriting.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contextYes
projectYes
decisionYes
rationaleNo
alternativesNo
consequencesNo
related_filesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It clearly discloses that the tool creates a dated markdown file and that existing files are not overwritten but instead get a numeric suffix. This is meaningful side-effect information, even though permissions and exact file location are not mentioned.

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 short, front-loaded sentences. The first states the purpose and the second explains the exact file behavior and collision handling. There is no filler or redundant restating of the tool name.

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?

For a tool with eight parameters, four required, no annotations, and no parameter descriptions, the definition is too minimal. It covers file creation and overwrite avoidance but leaves unclear how the parameters map to the generated document, when to choose this over sibling tools, and what a valid call should look like.

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 needed to explain the eight parameters, but it only implies a slug derived from the title. It does not clarify project, context, decision, rationale, alternatives, consequences, or related_files. The parameter names are self-explanatory enough to avoid a 1, but the description fails to compensate for the missing schema documentation.

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 opens with a specific verb and resource: 'Store a durable architecture or engineering decision.' It then specifies the concrete artifact, YYYY-MM-DD-<decision-slug>.md, which makes the tool clearly distinct from siblings like capture_work_session, append_daily_note, and search_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use record_decision versus the listed alternative tools. The phrase 'durable architecture or engineering decision' implies a use case, but the description does not state exclusions, prerequisites, or how this differs from session capture or daily note appending.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_memoryB

Search project state, sessions, and decisions with local text matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. 'Local text matching' is a genuine behavioral trait, indicating that search is text-based rather than semantic or remote, but the description does not mention result ordering, read-only behavior, or limitations.

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, front-loaded sentence with no filler. It communicates the core action, scope, and mechanism efficiently in nine words.

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?

For a straightforward search tool, the core purpose and mechanism are present, and an output schema exists to cover return values. However, the lack of usage guidance and parameter semantics leaves the definition minimally viable rather than complete, especially given the absence of annotations.

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 needed to explain the roles of query, limit, and project. It does not; the tool purpose only loosely implies the query parameter, while limit and project remain entirely undocumented in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search') and the resource scope ('project state, sessions, and decisions'), which is specific enough to distinguish it from generic memory tools. It also adds the mechanism 'local text matching' for extra clarity, though it does not explicitly compare against sibling tools like read_note or get_project_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus its siblings, such as get_project_context or read_note, and no exclusions or alternative recommendations. The intended use is only implied by the name and description, leaving the agent to infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_stateA

Replace the concise durable Project State.md for a project.

This is current state, not a session log. Omit empty sections.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
blockedNo
projectYes
completedNo
objectiveNo
next_stepsNo
in_progressNo
architectureNo
current_stateNo
important_filesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and it does real work: 'Replace' signals a destructive overwrite of the project state, and 'Omit empty sections' is a concrete behavioral rule for formatting the state. It does not cover permissions or additional side effects, but the key destructive trait is communicated.

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 short sentences with the core action first and the clarifying constraints second. There is no fluff and no repetition of information already present in the input schema.

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?

This is a ten-parameter tool with no schema descriptions and no annotations; the output schema covers only return shape, not usage. The description does not explain how to populate each state section, how to reference the project, or when to choose this over read-only siblings, so the agent is left with significant gaps.

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 needed to compensate, but it adds only a generic 'Omit empty sections' rule and no field-level guidance. The project identifier and the intended content of notes/blocked/completed/architecture/etc. are left entirely to inference from parameter titles.

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 opens with a concrete verb ('Replace') and a concrete resource ('Project State.md'), making the tool's action and target unambiguous. Adding 'current state, not a session log' separates it from session-oriented siblings such as capture_work_session.

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 frames the tool as maintaining current durable state and explicitly rules out session logging, which is the closest alternative behavior among the sibling tools. It does not list every alternative, but the when-to-use signal is clear.

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.

  1. 7 tool updatesv0.1.0
    • First observedappend_daily_note
    • First observedcapture_work_session
    • First observedget_project_context
    • First observedread_note
    • First observedrecord_decision
    • First observedsearch_memory
    • First observedupdate_project_state

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct memory artifact or action: context retrieval, session capture, decision recording, state updating, searching, reading, and appending to daily notes. Even though several tools involve notes, their purposes are clearly separated.

Naming Consistency5/5

All tool names follow a consistent lowercase snake_case verb_noun pattern such as capture_work_session, record_decision, and append_daily_note. The naming is predictable and makes the tool's purpose immediately clear.

Tool Count5/5

Seven tools is well-scoped for an Obsidian-based development memory server. Each tool covers a distinct need without unnecessary redundancy or bloat.

Completeness4/5

The toolkit covers core memory workflows: reading context, capturing sessions, recording decisions, updating state, searching, and appending daily notes. Minor gaps exist around deleting or listing notes, but these are not essential for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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.
    8 npm
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to store and retrieve project context, bugs, decisions, and session logs by reading and appending markdown files in a local Obsidian vault, without requiring any cloud services.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables coding agents to use an Obsidian vault as long-term memory, with search, reading, and writing of notes, plus automatic capture of learnings that are propagated to MOCs, daily notes, and the knowledge index with git commits.
    9
    19 npm
    MIT