notes-vault-mcp
This server gives coding agents a schema-enforced markdown notes vault with search, read/write, lifecycle management, repo logging, contextual recall, and linting.
Search notes by full text, tag, area, kind, status, folder, path prefix, date, and commit SHA, with archive/superseded controls.
Read notes with etags and perform conditional writes; append, move/rename, or delete notes.
Validate frontmatter against the vault schema and refuse invalid writes.
Close notes into the archive as complete or superseded.
Append dated repo-log entries with associated commits.
Fetch session-start context: system notes, open tasks, references, and repo log tail for a path/repo.
Lint the vault for schema drift, broken links, orphans, stale tasks, duplicate stems, and other issues.
List file paths cheaply.
Uses git commit history to show commits made since each note was last updated, detect stale notes, and generate changelogs grouped by day.
Supports storing the notes vault in an S3 bucket, including MinIO, with configurable endpoint, credentials, bucket, and prefix.
Manages an Obsidian-compatible vault of Markdown notes with YAML frontmatter, providing indexed search, context retrieval, read/write operations, and Obsidian Bases views.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@notes-vault-mcpwhat do we know about the checkout service?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mindin
Memory for Claude and coding agents, kept as markdown notes you own, with a schema that holds and a tie to your git history.
Install
curl -fsSL https://github.com/gronare/mindin/releases/latest/download/install.sh | shIt installs the mindin command with uv, asks where your vault lives (a folder, an S3 bucket or a vault server), and offers to add the vault to Claude Code, Codex and Cursor; it changes nothing in them without a yes. mindin was called notes-vault-mcp: the notes-vault-mcp package and command still work, and install and run mindin.
A vault server
A vault server with Docker Compose, for claude.ai, Claude Desktop, mobile and every machine you work on. You need a domain pointing at the machine, ports 80 and 443 open, and an SMTP account for sign-in links.
mkdir notes-vault && cd notes-vault
curl -fsSL -O https://github.com/gronare/mindin/releases/latest/download/compose.yml -O https://github.com/gronare/mindin/releases/latest/download/Caddyfile
curl -fsSL -o .env https://github.com/gronare/mindin/releases/latest/download/example.env
docker compose run --rm --no-deps vault master-key generate # paste into .env, with VAULT_HOST and SMTP
docker compose up -d
docker compose exec vault mindin accounts invite you@example.comThen open https://VAULT_HOST/account and sign in. Install with Docker walks through each step.
Without the script, on one machine: uv tool install mindin, then mindin setup.
Related MCP server: obsidian-mcp
Use
Add the server's address, https://VAULT_HOST/mcp, as a custom connector in claude.ai. Claude searches, reads and writes your notes. The same search from a shell on a signed-in machine:
$ mindin search "signing in"
1 note · archive and superseded hidden
myapp system 3 days
Areas/myapp.md
## Sign-in Users sign in with passkeys; email links are the fallback.What you get
Notes you own. Plain markdown in a folder or an S3 bucket; open them in Obsidian, keep them in git.
A schema with teeth. Required fields, legal statuses and kinds, a tag vocabulary; a write that breaks the contract is refused. Start from PARA, a simple vault, a journal or your own layout.
A lifecycle.
closearchives finished work,backlog_addfiles what was deferred,log_appendwrites one line per repo per session,lintreports drift.Memory tied to code. A note names the paths it describes; the session-start hook prints the commits newer than the note.
Search that reads your languages. Stemming, folded diacritics, synonyms, and optional search by meaning that runs on your machine.
Your own vault server. Accounts with passkeys, email links, GitHub or your identity provider, several vaults each, shared vaults, sealed in storage.
Documentation
docs/ has the install guides, the how-tos for each client, the reference for every tool, command and setting, and how it works.
License
MIT. See LICENSE.
Available Tools
11 toolsappend_fileA
WRITE — appends to a note and bumps updated. Creates the note when it is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that appending occurs, `updated` is bumped, and the note is created if missing, which is useful behavioral context. However, it does not mention permissions, failure modes, or idempotency, leaving some gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. Each sentence carries meaningful information, and the 'WRITE' category and 'appends' action are front-loaded for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter append operation with an output schema, this description covers the core behavior and the key edge case (create-if-missing). It does not discuss path formats or error handling, but those are minor for this tool. The 'bumps updated' detail adds useful context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It implies 'content' is the data to append and 'path' identifies the note, but it does not explicitly map either parameter. Since both names are self-explanatory, this is adequate but not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('appends') and resource ('a note'), and clarifies it also creates the note when missing. However, it does not explicitly distinguish itself from the sibling 'write_file' though the word 'appends' implies the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for appending to a note and notes the create-when-missing behavior, but does not explicitly state when to choose it over alternatives like write_file. No clear when/when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
closeA
WRITE — finishes a note: sets status complete (or superseded with superseded_by when merged_into is given) and moves it into the archive. Run it in the same pass as the last commit of the work; a note left open is what makes the vault drift.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| status | No | ||
| merged_into | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the mutation (WRITE), the exact status transitions, the archive move, the superseded_by behavior when merged_into is provided, and a consequence of not calling it. This goes well beyond the raw schema, though it stops short of describing error cases or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The WRITE marker and core verb are front-loaded, followed immediately by the specific behavioral effects and a motivating warning. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is self-sufficient for a 3-parameter tool with an output schema: it explains what the tool does, when to run it, what the status/merged_into parameters mean, and why the operation matters. It does not mention explicit prerequisites or failure cases, but none are critical for invoking this close operation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the merged_into and status interplay, but it does not explicitly document the path parameter or enumerate valid status values beyond complete and superseded. The parameter names are helpful, but the description only partially substitutes for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('finishes'), a specific resource ('a note'), and the precise outcomes: setting status to complete or superseded and moving the note into the archive. It clearly distinguishes this lifecycle-closing operation from sibling file tools like write_file, move_file, and delete_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear timing guidance: run it in the same pass as the last commit of the work, and explains why leaving a note open causes vault drift. It does not explicitly name alternatives or say when not to use it, but the context is strong enough for an agent to recognize this as the completion step for a note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contextA
CHEAP — the session-start call. Returns the system notes covering the code at path, the open tasks for it, the reference notes and the tail of the repo log, in one answer. Use it before searching blind.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| repo | No | ||
| limit | No | ||
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It reveals that the tool is cheap in cost, and that it aggregates multiple context sources into one answer, which are useful behavioral hints. However, it does not explicitly state that this is a read-only operation, nor does it mention any rate limits, side effects, or failure behavior, leaving a gap in transparency for an agent assessing risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it opens with a cost flag ('CHEAP'), states what the tool does in one sentence, and closes with a usage directive. Every clause earns its place, and no redundant phrasing exists. It is front-loaded with the most relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the input side is underdescribed: four parameters at 0% schema coverage, and the description only really explains `path` and vaguely implies `repo`. The tool's purpose and workflow are clear, but an agent would be left guessing about `limit`, `query`, and behaviors when parameters are omitted. For a call that is meant to be the session-start, this level of completeness is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and explain parameters. It only clarifies `path` ('the code at `path`') and indirectly touches on `repo` via the 'repo log.' The `limit` and `query` parameters receive no explanation at all, so an agent cannot confidently infer their meaning or usage from the description. This is a significant inadequacy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and a clear resource: system notes for the code at `path`, open tasks, reference notes, and the tail of the repo log, delivered in one answer. It also frames itself as the session-start call, which distinguishes it from siblings like search and read_file. This is a focused, unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use it before searching blind,' giving a clear directive on when to call this tool (at session start, before exploration/search). It does not spell out when not to use it or mention alternative tools by name, but the placement and 'session-start' framing strongly imply the intended workflow. Sibling tools like search are addressed contextually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileA
WRITE — deletes a note for good. Prefer close, which keeps it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the responsibility for disclosing destructive behavior. It does this well with 'deletes ... for good' and the 'WRITE' signal, which strongly communicates irreversibility. It could additionally mention what happens for missing paths or directories, but the core behavioral risk is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, purposeful clauses: the destructive action is front-loaded, and the preferred alternative is stated immediately after. There is zero redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter delete tool with an output schema, the description covers the essential context: what action is performed, that it is irreversible, and which sibling tool should be preferred. The only notable gap is `path` semantics, but the overall context is sufficient for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate, but it gives no details about the `path` parameter—no format, scope, or examples. It only indirectly suggests that `path` identifies the note to delete. The schema merely labels it 'Path', so an agent is left to infer the parameter's expected value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('deletes') and resource ('a note') and sharply distinguishes the tool from the sibling `close` by noting that `close` keeps the note. An agent can immediately understand this is a permanent delete operation, not a soft close.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Prefer `close`, which keeps it,' giving direct routing guidance toward the non-destructive alternative. It clearly implies that `delete_file` should only be used when permanent removal is intended.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lintA
MODERATE — reads every note to report drift: broken frontmatter, missing required fields, missing area, unresolved wikilinks, orphans, stale open tasks, archived notes still marked active, duplicate stems and superseded targets that do not exist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: 'reads every note' explicitly signals a read-only, potentially expensive operation, and the enumerated drift categories disclose what the tool inspects. It does not mention output shape or failure behavior, but the presence of an output schema covers that area.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core behavior ('reads every note to report drift') before listing checks. The list is long but each item earns its place by clarifying the tool's scope. It is compact and scannable, though slightly dense as a run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter analysis tool with an output schema, the description covers what the tool operates on and what issues it detects. It lacks an explicit statement of expected cost or side effects, but 'MODERATE' plus 'reads every note' gives a reasonable completeness level for invocation decisions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no semantic burden on the description. The schema is fully covered by virtue of having no properties, and the description adds contextual meaning about what data is scanned rather than needing to explain input formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-resource pair: 'reads every note to report drift' and enumerates the exact categories of drift it detects (broken frontmatter, missing fields, unresolved wikilinks, etc.). This clearly distinguishes it from siblings like search or read_file, which retrieve content rather than perform whole-corpus analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when you need a whole-note health check—but it does not explicitly state when to prefer it over alternatives or when not to use it. With siblings like search and read_file, an explicit routing note would strengthen the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
CHEAP — paths only, no metadata and no bodies. search answers context questions better.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 clearly states the tool is 'CHEAP', returns paths only, and excludes metadata and bodies—key behavioral traits for an agent deciding whether to call it. It doesn't mention recursion, directory inclusion, or error cases, but for a simple list operation the most relevant behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—one short sentence plus a comparison—yet packs in the cost profile, output scope, and routing guidance. It is front-loaded with 'CHEAP' and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—one optional parameter and an existing output schema—the description covers most essential context: cost, return type, and when to prefer an alternative. It does not explain the prefix parameter, but that gap is already captured under parameter semantics. Overall, an agent can select and use this tool correctly with the provided information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the `prefix` parameter at all, failing to compensate for the missing schema documentation. The parameter name and default are somewhat self-explanatory, but the description adds zero meaning beyond them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes the tool's purpose reasonably clear: it returns paths only, implying it lists files. It also distinguishes itself from `search` by noting that `search` answers context questions better, providing sibling differentiation. However, it relies on the tool name 'list_files' for the verb and never explicitly states 'lists file paths' in the description itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names `search` as a better alternative for context questions, which implies this tool should be used when cheap path enumeration is needed. This gives clear comparative guidance, but it could be more explicit about specific scenarios (e.g., 'use when you only need file paths').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_appendA
WRITE — appends one dated line to the repo log, with the commits it produced. Run once at the end of a session per repo. Creates the log note when it is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | ||
| line | Yes | ||
| repo | Yes | ||
| commits | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly marks the call as a WRITE, states that it appends rather than overwrites, and documents the create-if-missing side effect. It stops short of auth/error 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the core action and then add cadence plus the create-if-missing behavior. There is no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action, target, usage timing, and an important side effect, which is most of what an agent needs for this simple write tool. The presence of an output schema reduces the need to document return values; the main gap is the undocumented optional area parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It maps repo, line, and commits to real semantics, but the optional area parameter is never mentioned, and format details for dates or commit identifiers are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('appends') and a precise resource ('the repo log'), and clarifies scope: 'one dated line ... with the commits it produced.' This clearly distinguishes it from append_file and other file-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit cadence guidance: 'Run once at the end of a session per repo.' It does not list alternatives or when-not-to-use conditions, but the session-end trigger is a clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_fileA
WRITE — moves or renames a note. Use close to archive finished work.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | Yes | ||
| source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'WRITE' and 'moves or renames' imply mutation, but the description does not explain what happens to the source, whether destinations can be overwritten, whether paths are relative or absolute, or what the outcome/response signals look like. For a mutating operation with zero annotation support, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The 'WRITE' prefix immediately signals operation type, the core action is front-loaded, and the sibling pointer to 'close' earns its place by preventing misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two required string parameters and an output schema present, so a minimal description can be adequate. However, with no annotations and no parameter-level documentation, the description leaves important operational details like overwrite behavior and path resolution to inference. It is minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the bare parameter names 'source' and 'dest.' It adds only that the operation moves or renames a 'note,' which weakly implies source is the original note and dest is the target path/name. It does not clarify expected path formats, whether 'dest' can be a new name only, or what happens if dest already exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — 'moves or renames a note' — with a clear verb and resource. It also differentiates itself from the sibling tool 'close' by explicitly saying close is for archiving finished work, so an agent can distinguish them without extra context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It directly provides an alternative: 'Use `close` to archive finished work.' This gives a clear when-to-use-vs-alternative signal for the most likely confusion. It does not enumerate all sibling distinctions, but the core routing guidance is present and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileA
MODERATE — one round trip to storage. Returns the note with an etag: first line; pass that etag back to write_file to refuse a write over someone else's change. Search first.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers meaningful behavioral disclosure: cost/latency ('MODERATE — one round trip to storage', where the dash explains the label), exact return shape (etag first line), and the critical optimistic-concurrency contract with write_file. It omits error behavior (missing file, permissions), but the decision-relevant traits for an agent are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse sentences with zero filler; the etag hand-off, round-trip cost, and concurrency behavior are packed efficiently. The 'MODERATE' tier is self-explained by the following dash clause, and the key imperative 'Search first' is placed last rather than front-loaded — a minor structural flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema and no annotations, the description covers the essentials: purpose, return format, concurrency contract, and a workflow hint. Minor gaps — path format specifics and behavior on missing files — are acceptable at this simplicity level. The description is complete enough for an agent to call the tool correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it barely does. 'the note' and 'storage' loosely tie the `path` parameter to a note in storage, yet no format, resolution rules, or allowed values are given. The parameter's meaning is left almost entirely to inference from the tool name and parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') with a concrete resource ('the note') and discloses the distinctive return format (`etag:` first line). The 'Search first' line hints at its place in the sibling workflow, giving partial differentiation. However, the primary read operation is stated indirectly, and it does not distinguish read_file from list_files or context, which could also return note data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Search first' is an explicit workflow directive — search should precede reading — which gives the agent real usage context. But there is no statement of when to prefer read_file over list_files or context, and no exclusions or conditions are given. Selection criteria are implied rather than stated, so guidance is thin but present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
CHEAP — start here. Full-text search over the local SQLite index of the vault; it never downloads the whole vault. Matches title, summary, tags and body, folds diacritics, expands synonyms and accepts "quoted phrases". A bare commit sha looks up the notes that mention it. Excludes the archive and superseded notes unless you ask for them, and reports how many it hid.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| area | No | ||
| kind | No | ||
| limit | No | ||
| query | Yes | ||
| since | No | ||
| folder | No | ||
| status | No | ||
| path_prefix | No | ||
| include_archive | No | ||
| include_superseded | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden — and it delivers richly: never downloads the vault, folds diacritics, expands synonyms, accepts quoted phrases, treats a bare commit sha specially, excludes archive/superseded notes by default, and reports how many results it hid. This is exceptional behavioral disclosure for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly 70 words packed with signal, front-loaded with the most operationally important fact ('CHEAP — start here'). Every sentence earns its place: cost behavior, match scope, normalization, syntax, special case, filtering defaults, and output reporting. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core usage path is fully specified — what is searched, how query syntax works, default exclusions, and what the result reports. The output schema covers return shape, and the cost/staleness behavior is disclosed. The remaining gap is the eight filter parameters that go unexplained despite zero schema descriptions, leaving agents to guess at their formats and interactions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains the critical parameter well — query semantics (fields matched, quoting, diacritics, synonyms, sha lookup) and the defaults for include_archive/include_superseded. However, 8 of 11 parameters (tag, area, kind, limit, since, folder, status, path_prefix) receive no semantics beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Full-text search over the local SQLite index of the vault' — with exact matching scope (title, summary, tags, body). The 'CHEAP — start here' opener and the file-operation siblings make it unmistakably distinct from read_file/write_file/list_files etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with explicit routing guidance: 'CHEAP — start here', telling the agent to try this tool first. 'It never downloads the whole vault' explains the cost tradeoff that justifies that recommendation. It stops short of naming alternatives or stating when not to use it, though the non-overlapping file-op siblings reduce the need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileA
WRITE — validates the frontmatter against the vault schema and refuses the write if it does not hold. Stamps updated with today and fills date when missing. Pass expected_etag from read_file to make the write conditional.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| expected_etag | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses validation, refusal to write, automatic stamping of `updated` and `date`, and conditional writes via expected_etag. It does not mention overwrite semantics or failure details on ETag mismatch, but core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, high-information sentences. The main behavior and key conditional flow are front-loaded, and there is no filler or redundant restating of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with an output schema and no annotations, the description covers the important conceptual pieces: validation, automatic mutation, and conditional writes. It could be more complete about overwriting behavior or what happens when the ETag does not match, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It usefully explains expected_etag's purpose and the frontmatter-validating nature of content, but path is left entirely to its name and no content structure details are given. This partial compensation earns a mid score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a write operation on a vault file, with specific behaviors: frontmatter validation, refusal on invalid schema, and automatic field stamping. This differentiates it from sibling tools like append_file, move_file, and delete_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'Pass expected_etag from read_file to make the write conditional,' which also hints at sequencing with read_file. However, it does not explicitly contrast this tool with alternatives like append_file or state when not to use it.
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.
11 tool updates
v0.2.1- First observed
append_file - First observed
close - First observed
context - First observed
delete_file - First observed
lint - First observed
list_files - First observed
log_append - First observed
move_file - First observed
read_file - First observed
search - First observed
write_file
TDQS
Scored across 11 tools
Each tool owns a clearly distinct operation: search/list_files/context/lint cover different discovery and integrity concerns, while read_file/write_file/append_file/move_file/delete_file/close/log_append cover separate mutation or lifecycle actions. Even the pair write_file/append_file is well separated by full-file conditional write versus append-and-create behavior.
Most file operations follow a clean verb_noun pattern (read_file, write_file, append_file, move_file, delete_file, list_files), but search, close, context, and lint are single words and log_append reverses the pattern. The naming is readable and grouped by function, but it is not consistently predictable across the whole surface.
Eleven tools is well within the ideal scope for a notes vault server: discovery, read/write, move/delete, archive, session context, logging, and lint each have a dedicated tool. No tool feels redundant or like filler.
The surface covers the core lifecycle thoroughly: search/read/create/update/append/move/delete/archive, plus session context, logging, and lint. The main gap is the lack of an explicit restore/reopen operation for archived notes, though move_file combined with write_file can work around it.
Maintenance
Related MCP Connectors
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Notes and memory assistant: one Markdown vault that Claude, ChatGPT and any MCP client can share.
Personal context for every AI: search, read, and write back to your private Markdown library.
Your Valutorio Markdown notes, readable and writable by your AI. Needs Valutorio Sync.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables Claude Code read/write access to an Obsidian vault, including creating, editing, searching, and browsing notes.8MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading, writing, searching, and managing an Obsidian vault through Claude, operating directly on markdown files via Node.js fs without requiring the Obsidian app.8,638 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude to search, read, write, and manage a local markdown vault through 8 tools, turning your notes into an AI-accessible knowledge base.3 npmAGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables bidirectional interaction with Obsidian vaults, allowing reading, writing, and organizing notes through Claude.MIT