Skip to main content
Glama
cog-sh
by cog-sh

🧠 cog-brain

Your Obsidian vault, as long-term memory for any coding agent.

One MCP server. Pluggable storage. Plain Markdown you own.

backends python mcp license


cog-brain turns a folder of Markdown notes into a second brain your agent can search, read, extend and maintain β€” through the standard Model Context Protocol, so it drops into omp, Claude Code, Cursor, Codex, opencode, VS Code and anything else that speaks MCP.

The vault is the source of truth β€” plain, human-editable Markdown. The index is derived and rebuildable. The storage engine is swappable without changing a single tool. That combination is the point: Markdown-first tools usually have weak retrieval; vector tools usually aren't human-editable.

cog-brain is the product. ~/SECOND_BRAIN is just the default vault it points at.

How it works

flowchart LR
  V["πŸ“ Obsidian vault<br/><i>plain Markdown β€” source of truth</i>"]
  subgraph B["memory backends Β· pick one"]
    direction TB
    S["sqlite Β· default<br/>FTS5, zero services"]
    Q["qdrant<br/>dense + BM25, RRF"]
    M["markdown<br/>in-process BM25, no index"]
  end
  C["🧠 cog-brain<br/>MCP server"]
  H["harnesses<br/>omp Β· Claude Code Β· Cursor<br/>Codex Β· opencode Β· VS Code"]
  V -->|sync| B --> C --> H
  H -.->|write_note Β· update_note| V

Writes re-index automatically. Retracted notes stay searchable and are flagged. The same tool surface works on every backend.

Related MCP server: Obsidi MCP

Install

# oh-my-pi
omp plugin marketplace add cog-sh/cog-brain-plugins
omp plugin install cog-brain@cog-brain-plugins

# Claude Code
claude plugin marketplace add cog-sh/cog-brain-plugins
claude plugin install cog-brain@cog-brain-plugins

The plugin registers the server, the skill, and the /brain-* commands. Nothing to clone.

πŸ”Œ Plain MCP client

{
  "mcpServers": {
    "cog-brain": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/cog-sh/cog-brain", "cog-brain"],
      "env": { "COG_BRAIN_BACKEND": "sqlite" }
    }
  }
}

Or let cog-brain write it for you:

cog-brain mcp-config --harness cursor        # paste-ready snippet
cog-brain install --harness codex            # merge into ~/.codex/config.toml

πŸ› οΈ From source

git clone https://github.com/cog-sh/cog-brain && cd cog-brain
uv sync
uv run cog-brain-index        # build the index
uv run cog-brain doctor       # check vault + backend

Memory backends

Pick the engine with COG_BRAIN_BACKEND (or --backend).

backend

storage

needs

ranking

sqlite (default)

one SQLite file

nothing

FTS5 BM25

qdrant

Qdrant collection

Qdrant + an embedding endpoint

dense + BM25, RRF

markdown

none β€” the filesystem is the index

nothing

in-process BM25

Adding one is a single module implementing the Backend protocol (sync Β· search Β· status Β· reset Β· health). See src/cog_brain/backends/.

Operator CLI

cog-brain status                 # index health: notes on disk vs indexed, staleness
cog-brain config                 # resolved settings + where each value comes from
cog-brain health                 # 4 metrics with verdicts (orphans, degree, connectivity, stale)
cog-brain lint                   # broken links Β· orphans Β· stubs Β· missing frontmatter
cog-brain doctor                 # diagnose vault, state dir, active backend
cog-brain graph --export graphml # export the wiki-link graph (type as node attr)
cog-brain inspect query "…" -k 10
cog-brain ingest chats export.json
cog-brain backends | reindex | mcp-config | install

MCP tools

  • read β€” semantic_search, outline, read_note, find_related, backlinks, broken_links, graph_overview, list_notes, vault_status

  • write β€” write_note, update_note

  • index β€” index_now

Configuration

Settings resolve env β†’ ~/.config/cog-brain/config.toml β†’ default, so a machine keeps them in one readable file instead of a shell profile:

# ~/.config/cog-brain/config.toml
backend = "qdrant"
vault   = "~/SECOND_BRAIN"

cog-brain config prints the resolved values and where each came from. A missing or malformed file is ignored, never fatal. Point elsewhere with COG_BRAIN_CONFIG.

variable

meaning

default

COG_BRAIN_CONFIG

config file path

~/.config/cog-brain/config.toml

COG_BRAIN_VAULT

vault root

~/SECOND_BRAIN

COG_BRAIN_BACKEND

sqlite Β· qdrant Β· markdown

sqlite

COG_BRAIN_STATE_DIR

index + manifest location

~/.local/state/cog-brain

COG_BRAIN_SQLITE_DB

sqlite path

<state>/sqlite.db

COG_BRAIN_QDRANT_URL

Qdrant endpoint (qdrant only)

http://127.0.0.1:6333

COG_BRAIN_OLLAMA

embedding endpoint (qdrant only)

http://127.0.0.1:11434/api/embed

COG_BRAIN_EMBED_MODEL

embedding model (qdrant only)

qwen3-embedding:0.6b

COG_BRAIN_COLLECTION

Qdrant collection (qdrant only)

cog_brain

Docs

  • docs/resources.md β€” a curated reading list (MCP, agent memory, GraphRAG, evals)

  • AGENTS.md β€” how an agent (or contributor) works in this repo

Available Tools

12 tools
graph_overviewB

Knowledge-graph overview: hub notes (most outgoing wiki-links β€” MOC candidates) and orphans (no links at all).

ParametersJSON Schema
NameRequiredDescriptionDefault
kNo

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, the description carries the full burden, and it does clarify what the operation yields by defining 'hub' and 'orphan' semantically. However, it says nothing about read-only behavior, cost, whether the graph is computed live, or pagination/limits on the returned results.

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?

A single, dense sentence that front-loads the resource and immediately defines both returned categories. There is no filler and nothing that could be cut without losing meaning.

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?

Because an output schema exists, return values need not be described, and the qualitative category definitions are helpful. But the unexplained k parameter and the complete absence of usage guidance leave real gaps for an agent deciding whether and how to call this.

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% for the single parameter 'k', and the description never mentions it. An agent cannot tell from either source whether k controls the number of hubs, orphans, or both, nor how it interacts with the default of 15.

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 names the specific resource (knowledge graph) and precisely defines its two output categories: hubs as notes with the most outgoing wiki-links and orphans as notes with no links. That makes it distinguishable in spirit from backlinks or broken_links, though it never names those siblings explicitly.

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 statement of when to call this versus siblings like backlinks, broken_links, or list_notes, and no exclusions or prerequisites. The agent must infer the use case from the subject matter alone.

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

index_nowA

Run the vault indexer now (incremental; full=True re-embeds everything).

Concurrent runs are safe: the indexer holds a lock and a second run exits immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does disclose meaningful behavior: the lock-based concurrency model and that a competing run exits immediately, plus the fact that 'full=True' re-embeds everything (a costly, potentially long operation). It omits expected duration, whether the call blocks the caller, and any permission requirements.

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, no filler. The primary action is front-loaded and the concurrency caveat follows, so the most important information comes first.

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?

An output schema exists, so return values need not be described, and the mutation/concurrency behavior is covered. What remains thin for a state-mutating indexer is the absence of any note on typical runtime, resource cost, or whether the caller is blocked while indexing runs.

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?

Schema coverage is 0% and the 'full' property has no description, so the description must compensate β€” and it does, explaining that the default is incremental while 'full=True' re-embeds everything. Minor gap: no detail on cost/runtime tradeoffs of full mode.

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?

States a specific verb and resource: 'Run the vault indexer now', with an explicit scope modifier ('incremental' by default). No sibling tool (vault_status, list_notes, semantic_search, etc.) performs indexing, so an agent can route to it unambiguously.

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?

Implies use when the index needs refreshing, and the 'full=True' note hints at the choice between incremental and full runs. However, it never states when an agent should trigger re-indexing versus relying on existing state, nor any prerequisites before calling.

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

list_notesA

Cheap inventory of notes: file_path, title, type, status, tags. Filter by tag or folder prefix.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
limitNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 the burden. It does disclose that this is a lightweight listing returning only metadata fields (implying no note bodies), but says nothing about permissions, pagination beyond the schema default, or whether results are ordered or truncated. Partial disclosure only.

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 terse sentences, front-loaded with what the tool returns, then how to filter. Every clause earns its place with no filler.

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?

An output schema exists, so return values need not be fully specified, and the description still summarizes them. For a simple zero-required-parameter read tool this is nearly sufficient; only the 'limit' behavior and result ordering are left to inference.

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 covers two of three parameters ('tag', 'folder prefix'), and 'prefix' adds matching semantics beyond the schema, which is genuinely useful. However, the 'limit' parameter is left unexplained in both schema and 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 names a specific action and resource ('inventory of notes') and enumerates the fields returned (file_path, title, type, status, tags), which tells an agent this is a metadata-only listing rather than a content read. It stops short of naming a sibling such as read_note or semantic_search explicitly, so it is clear but not fully differentiated.

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 word 'cheap' implicitly signals when to prefer this over heavier tools like semantic_search or read_note, but there is no explicit when-to-use or when-not-to-use statement and no named alternative. Usage is inferable rather than stated.

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

outlineA

Headings of a note with their levels β€” cheap context before reading the whole thing.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 usefully discloses that this is a lightweight/cheap read that returns only headings rather than full content, but says nothing about failure modes (missing file), permissions, or size limits.

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?

A single front-loaded clause: what it returns, then why it is worth calling. Zero filler.

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?

An output schema exists, so return-value detail is not required, and the description still summarizes the shape (headings + levels). For a one-parameter read tool this is essentially complete; only path-format guidance is missing.

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 0% for the single file_path parameter, so the description must compensate. 'of a note' weakly implies the path is a note identifier, but format/source (vault-relative vs absolute) is left entirely unstated.

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?

States precisely what is returned: a note's headings with their levels. Implicitly distinguishes itself from read_note via 'cheap context before reading the whole thing,' though it never names the sibling explicitly.

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?

'before reading the whole thing' implies the workflow position relative to read_note/read tools, giving usable but inferred guidance. There is no explicit when-not-to-use or named alternative.

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

read_noteA

Read the full text of a vault note by its relative path (path from semantic_search/list_notes).

max_chars bounds the result for a large note; the truncation is marked explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 the burden. It does disclose real behavior β€” max_chars bounds output and truncation is explicitly marked β€” which is genuinely useful. It omits, however, what happens on a missing/invalid path or non-text file, and gives no hint about encoding or result metadata, leaving notable gaps for a read operation.

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, front-loaded with purpose, then the one behavioral nuance that matters (truncation). Nothing redundant or padded.

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?

An output schema exists, so return values need not be documented, and the description covers the path source and truncation behavior. The main residual gap is error/missing-file behavior, which keeps it from a 5 for a tool with zero annotation coverage.

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?

Schema coverage is 0%, so the description must compensate, and it largely does: max_chars is explained (bounds the result, truncation is marked) and file_path is defined as a relative path sourced from semantic_search/list_notes. What's missing is what the path is relative to (vault root) and any default/limit semantics for max_chars beyond null.

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?

States a specific verb (read) and resource (vault note) plus the lookup key (relative path), which cleanly separates it from write_note, update_note, and the snippet-returning semantic_search. An agent can tell what this returns (full text) versus a listing or search tool.

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 parenthetical '(path from semantic_search/list_notes)' tells the agent the intended workflow: obtain a path from a search or listing tool, then read here. It gives clear context but names no explicit exclusion or alternative condition, so it falls just short of a 5.

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

update_noteC

Patch an existing note in place: frontmatter fields and/or body, bumping updated.

Only the arguments you pass are changed. content replaces the body, or appends to it with append=True. The result is re-checked for at least one resolvable [[wiki-link]].

ParametersJSON Schema
NameRequiredDescriptionDefault
mocNo
tagsNo
typeNo
titleNo
appendNo
statusNo
aliasesNo
contentNo
file_pathYes
retractedNo
auto_indexNo
supersedesNo
descriptionNo
superseded_byNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 behavioral burden and does add real value: partial-patch semantics ('Only the arguments you pass are changed'), the `updated` bump, and a validation constraint (at least one resolvable [[wiki-link]] must remain). However, it omits auth/permission needs, what happens on a nonexistent file, and the effect of auto_index/retracted, leaving meaningful gaps for a 14-param mutation.

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?

Three tight sentences, front-loaded with the core action and constraint; each sentence conveys distinct information about mutation scope, body handling, and validation. No filler.

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 14-parameter, unannotated mutation with 0% schema coverage, the description leaves most parameters and failure modes undocumented, even though the presence of an output schema excuses it from explaining return values. It is not complete enough for an agent to invoke confidently across the full parameter set.

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 for 14 undocumented parameters. It only clarifies `content` (replaces body) and `append` (appends instead), plus a vague reference to 'frontmatter fields'; the remaining ~11 params (moc, tags, type, title, status, aliases, auto_index, supersedes, etc.) get no semantic help from either source.

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?

States a specific verb and resource ('Patch an existing note in place') and clarifies that it touches frontmatter fields and/or body while bumping `updated`. This makes the patch-vs-full-write distinction against write_note inferable, though the sibling is never named explicitly.

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 explains mechanics but never states when to choose update_note over write_note or other siblings, nor any prerequisites (e.g. the note must already exist). No when/when-not guidance is present.

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

vault_statusA

Index health: notes on disk vs indexed, when the index last ran, and which notes changed since.

Call this before trusting a search result: after a write the index is refreshed automatically, but a manual file edit from outside this server leaves it stale.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the index-refresh behavior (writes auto-refresh, external edits leave it stale), which is genuine context beyond the tool's output. It does not state read-only/safety profile or any permission/rate constraints, keeping it out of 5 territory.

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?

Front-loaded with the core definition ('Index health: ...') followed by tightly relevant usage context. Two short blocks with no padding, though the second paragraph blends usage guidance with behavioral detail.

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?

An output schema exists, so return values need no elaboration, and with zero parameters the schema gap is nil. The description supplies purpose and the key staleness caveat, making it complete enough to call correctly.

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 tool takes zero parameters, so the schema cannot carry semantic weight; baseline is 4. Nothing in the description misrepresents the empty argument set.

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?

States a specific resource and scope: reports index health, specifically notes on disk vs indexed, last run time, and which notes changed. This clearly distinguishes it from search/read siblings, though it does not name a specific sibling it differs from (e.g. index_now) to reach a 5.

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?

Gives an explicit condition for use: 'Call this before trusting a search result,' tied to the trigger of an external manual file edit leaving the index stale. Lacks an explicit pointer to the remediation sibling (index_now) for when the index is stale, so it stops short of a 5.

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

write_noteB

Create a new vault note. Flat vault: file_path is kebab-case EN in the vault root.

description is required (one sentence β€” it is the RAG chunk title) and moc takes either Rust MOC or [[Rust MOC]]. The body must link at least one EXISTING note; links that do not resolve yet are reported back rather than rejected, so a hub may be written before its spokes. The index is refreshed automatically (set auto_index=False to batch).

ParametersJSON Schema
NameRequiredDescriptionDefault
mocNo
tagsNo
typeNozettel
titleYes
statusNoseedling
aliasesNo
contentYes
file_pathYes
retractedNo
auto_indexNo
supersedesNo
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the full behavioral burden. It usefully discloses that unresolved links are reported rather than rejected and that the index refreshes automatically, which is non-obvious context. But it omits a critical write-tool behavior: what happens if file_path already exists (overwrite vs. error), and any permission/conflict semantics.

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?

Front-loaded with the core purpose, then layered with format and behavioral detail; every sentence carries information and nothing is padded. The one blemish is the misplaced '`description` is required' claim, which is both incorrect against the schema and interrupts the otherwise tight structure.

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 12-parameter mutation tool with 0% schema coverage and no annotations, the description covers the trickiest params and two key behaviors, which is meaningful. But it leaves most parameters undocumented and never resolves the overwrite/conflict question, so an agent could still call it incorrectly. The existing output schema relieves the description of return-value duty.

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, and it does add real meaning for a few params (file_path kebab-case EN in vault root, moc accepts 'Rust MOC' or '[[Rust MOC]]', auto_index batching). However, 8 of 12 params (tags, type, status, aliases, retracted, supersedes, content, title) get no semantic treatment. It also asserts 'description is required' while the schema marks it optional with default null β€” a factual conflict.

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 first sentence gives a specific verb+resource: 'Create a new vault note.' The word 'new' distinguishes it implicitly from the sibling update_note, but that contrast is never made explicit. An agent can identify the operation, but the sibling differentiation is left to inference.

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 description supplies workflow context (a hub may be written before its spokes, use auto_index=False to batch) which implies how the tool fits into a flow. However, it never states when to reach for write_note versus update_note, nor any prerequisites such as whether the target file must not already exist. Usage is implied, not directed.

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. 12 tool updatesv0.1.0
    • First observedbacklinks
    • First observedbroken_links
    • First observedfind_related
    • First observedgraph_overview
    • First observedindex_now
    • First observedlist_notes
    • First observedoutline
    • First observedread_note
    • First observedsemantic_search
    • First observedupdate_note
    • First observedvault_status
    • First observedwrite_note

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct action or resource: status, inventory, outline, full read, search, related notes, backlinks, broken links, graph overview, create, update, and index. Overlaps are minimal and descriptions clearly differentiate.

Naming Consistency3/5

Some tools use verb_noun (list_notes, read_note, write_note, update_note, find_related), while others are noun phrases (vault_status, semantic_search, backlinks, broken_links, graph_overview). The mix is readable but not a consistent pattern.

Tool Count5/5

12 tools is well within the typical 3-15 range and each tool has a clear, non-redundant purpose for managing an Obsidian vault.

Completeness3/5

The surface covers create, read, update, search, linking, and indexing, but lacks a delete_note operation and any move/rename capability. These are notable gaps for full vault lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memoryβ€”all while keeping data local to your vault.
    230,989 npm
    154
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Exposes Obsidian vault tools via Model Context Protocol (MCP) server over stdio, HTTP, or SSE transports, enabling AI assistants to read, write, search, and manage vault notes with 28+ built-in tools and CLI bridge integration.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local-first knowledge backend for AI agents that connects MCP hosts to an Obsidian-compatible vault with indexed retrieval, token-budgeted memory recall, and secure ingestion.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Obsidian vaults β€” multi-brain manager with templates, persistent registry, search, CRUD, frontmatter, wikilinks and context bundling. Works with Hermes Agent and Claude Code simultaneously.
    MIT