Skip to main content
Glama

# Vault Bridge

Bridge your AI assistant to local knowledge vaults — read, write, search, and manage notes without cloud dependencies.

Default mode: local stdio connector (no listening port). Vault content stays on the path you configure.

Non-technical readers (COLP / practice manager / firm IT): start with CLIENT-README.md - install, privacy boundary, verify, uninstall, and support without developer jargon.

Features

  • read_note — Read a note with optional frontmatter parsing

  • write_note — Write notes with YAML frontmatter support

  • list_notes — List notes with glob filtering and recursion

  • search_notes — Regex search across vault content

  • search_frontmatter — Query notes by frontmatter key/value

  • get_daily_note — Get or create daily notes with templates

Related MCP server: obsidian-codex-mcp

One command from the product tree (UNSIGNED INTERNAL until Authenticode is available):

powershell -ExecutionPolicy Bypass -File .\installer\Install-VaultBridge.ps1 -VaultPath "C:\Path\To\Your\Vault"

Silent (firm IT):

powershell -ExecutionPolicy Bypass -File .\installer\Install-VaultBridge.ps1 -VaultPath "C:\Path\To\Your\Vault" -Quiet

Post-install smoke (JSON-RPC; fails loudly):

powershell -ExecutionPolicy Bypass -File .\scripts\self_test.ps1 -VaultPath "C:\Path\To\Your\Vault"

Details: installer\README.md. Zero-egress proof pack: proof-pack\README.md (see also proof-pack\DEMO-CHECKLIST.md).

Signing: builds produced without an Authenticode certificate are labelled UNSIGNED INTERNAL. See proof-pack\SIGNING.md.

Advanced — pip / uv (developers)

pip install vault-bridge
# (some indexes may still show airgap-vault-bridge)
# or, from a checkout with uv.lock:
uv sync --frozen

Usage

CLI (Direct)

vault-bridge

MCP Client Config (Claude Desktop, Cursor, VS Code)

Prefer the Private Desk / installer local path over uvx for air-gapped desks:

Windows (requires full path to executable):

{
  "mcpServers": {
    "vault-bridge": {
      "command": "C:\\Users\\YOU\\AppData\\Local\\AirgapFleet\\vault-bridge\\bin\\vault-bridge.cmd",
      "env": {
        "OBSIDIAN_MCP_VAULT_PATH": "C:/path/to/vault",
        "OBSIDIAN_MCP_TRANSPORT": "stdio"
      }
    }
  }
}

macOS/Linux (if on PATH):

{
  "mcpServers": {
    "vault": {
      "command": "vault-bridge",
      "env": {
        "OBSIDIAN_MCP_VAULT_PATH": "/path/to/vault"
      }
    }
  }
}

DXT (Claude Desktop 1-Click)

Download airgap-vault-bridge-1.0.2.dxt from Releases → drag into Claude Desktop.

Configuration

Runtime settings use the OBSIDIAN_MCP_ environment prefix (see src/obsidian_mcp/models.py).

Environment Variable

Default

Description

OBSIDIAN_MCP_VAULT_PATH

Current directory

Path to vault root

OBSIDIAN_MCP_MAX_FILE_SIZE

10MB

Max file size for operations

OBSIDIAN_MCP_DEFAULT_ENCODING

utf-8

Text encoding

OBSIDIAN_MCP_INDEX_FRONTMATTER

true

Parse YAML frontmatter

OBSIDIAN_MCP_FOLLOW_SYMLINKS

false

Follow symlinks

Tool Reference

read_note

{
  "path": "Projects/roadmap.md",
  "include_frontmatter": true
}

write_note

{
  "path": "Projects/new-idea.md",
  "content": "# New Idea\n\nDetails here...",
  "frontmatter": { "tags": ["idea", "draft"], "status": "wip" }
}

list_notes

{
  "path": "Projects",
  "glob_pattern": "**/*.md",
  "recursive": true
}

search_notes

{
  "pattern": "MCP",
  "path": ".",
  "max_results": 50
}

search_frontmatter

{
  "key": "status",
  "value": "done",
  "operator": "eq"
}

get_daily_note

{
  "date": "2026-08-21",
  "folder": "Daily Notes",
  "create_if_missing": true
}

Windows-Specific Notes

  • Preferred install path after Private Desk installer: %LOCALAPPDATA%\AirgapFleet\vault-bridge\bin\vault-bridge.cmd (avoid legacy Hermes venv paths for pilots)

  • Always use the full .exe path in MCP client configs on Windows — bare commands like vault-bridge will fail with ENOENT because the venv Scripts folder is not on system PATH

  • Use forward slashes in environment variable values (C:/path/to/vault) — they work fine in JSON

  • Escape backslashes in JSON command paths (C:\Users\...)

License

MIT

Available Tools

6 tools
get_daily_noteB

Get or create a daily note.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest model for get_daily_note tool.

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 provided, the description carries the burden of behavioral disclosure. It states the dual get-or-create behavior, which is useful, but doesn't disclose details like whether creation is silent, what happens if the note exists, or any side effects. The create_if_missing parameter adds some context, but the description itself is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core purpose. It's efficient and doesn't waste words, though it could add a bit more context without becoming verbose.

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 tool has an output schema and 100% schema coverage, so the description doesn't need to explain return values or parameters. However, given the dual get-or-create behavior and the existence of sibling tools like read_note and write_note, a bit more context on when to use this tool would improve completeness.

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 100%, so the schema already documents all parameters well. The description adds no additional parameter semantics beyond what the schema provides. Baseline 3 is appropriate since the schema does the heavy lifting.

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 'Get or create a daily note' clearly states the verb and resource, and the dual behavior (get or create) is explicit. It doesn't explicitly distinguish from siblings like read_note or write_note, but the 'daily note' resource is specific enough to convey its purpose.

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 implies usage for daily notes but doesn't explicitly state when to use this tool versus read_note or write_note. The create_if_missing parameter hints at the conditional creation behavior, but there's no explicit guidance on when to choose this over alternatives.

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

list_notesC

List notes in the Obsidian vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest model for list_notes tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/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. It does not state whether the operation is read-only, whether there are side effects, or what the return structure looks like (though an output schema exists). It only states the basic function, omitting important behavioral context such as recursion limits or filtering behavior. This is a significant gap, so a 2 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler words. It is concise and directly states the primary action. However, its brevity results in under-specification, which slightly reduces the score; it does not merit a 5 because it omits necessary contextual details.

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 moderately complex tool with a nested request object and five sub-parameters, plus an output schema. The description only states 'List notes in the Obsidian vault' and fails to mention key contextual aspects such as recursion defaults, the fact that it filters by Markdown files, or the read-only nature. While the output schema may cover return values, usage context is largely absent, making the tool incomplete for an agent to use correctly.

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

Parameters3/5

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

The schema description coverage is 100%, with each parameter (path, max_depth, recursive, glob_pattern, include_frontmatter) having a description. The tool description adds no additional parameter meaning beyond what the schema already provides. Per the rubric, the baseline is 3 given high schema coverage, and the description does not enhance it.

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 (list) and resource (notes in the Obsidian vault). It is specific enough to distinguish from siblings like read_note or write_note, though it does not explicitly call out those alternatives. A clear verb+resource is present, so it earns a 4 for purpose clarity.

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 provides no guidance on when to use this tool versus search_notes, search_frontmatter, or get_daily_note. There is no mention of use cases, exclusions, or alternatives. This falls short of the expected guidance for selecting the right tool, earning a 2.

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

read_noteB

Read a note from the Obsidian vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest model for read_note tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. 'Read a note' conveys non-mutating intent, which is helpful, but it does not mention how missing paths are handled, how include_frontmatter affects the result, or any other runtime behavior. The opacity is acceptable for a simple read tool but not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler and no redundancy with the schema. It is easy to parse, though its brevity comes at the cost of usage guidance.

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 read operation with complete schema coverage and an output schema present, the minimal description is largely sufficient. However, it does not connect the tool to its sibling tools or explain the intended relationship to get_daily_note, which leaves a modest contextual gap.

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 100%, with both path and include_frontmatter documented in the input schema. The tool description adds no parameter-level meaning, so the schema does the necessary work. This matches the baseline-3 case where the description need not repeat schema details.

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 ('read') and resource ('a note from the Obsidian vault'), so an agent can distinguish it from write_note, list_notes, and search_notes. It does not explicitly contrast with get_daily_note or mention the by-path access mode, but the core purpose is unambiguous.

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 provides no guidance about when to use this tool versus siblings such as get_daily_note or search_notes. There are no stated alternatives, exclusions, or prerequisites, leaving the agent to infer selection criteria from the tool name alone.

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

search_frontmatterB

Search notes by frontmatter key/value.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest model for search_frontmatter tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/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 of behavioral disclosure. It communicates a read-only search operation but gives no detail on recursion behavior, default path, matching semantics, result limiting (max_results default 100), or how missing keys are handled, despite all of this being configurable in the schema.

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?

One efficient sentence with zero wasted words; the verb, resource, and scope are front-loaded. It is arguably under-sized relative to the tool's 6-parameter nested request model with 9 operators, but it earns its place and is easy to parse.

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 schema covers every parameter with descriptions and an output schema exists, so the description doesn't need to explain return values or field semantics. However, for a parameterized tool of this complexity, the single-sentence description leaves gaps — no guidance on topological scope, operator semantics in practice, or distinction from sibling search tools. Adequate, but clearly short of complete.

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 100%, so the schema already documents all six nested parameters thoroughly. The description's mention of 'key/value' maps to the key and value parameters, adding slight semantic emphasis, but it provides nothing beyond what the schema fields already describe. Baseline 3 applies.

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 (search), resource (notes), and scope (frontmatter key/value) in a single phrase. The frontmatter qualifier cleanly differentiates it from the sibling search_notes, which presumably searches full note content, so an agent can tell this tool apart without opening schemas.

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 implies usage: use this tool when the search target is frontmatter metadata rather than note body content. However, it never explicitly names search_notes as the alternative or states when not to use this tool, leaving the routing decision to inference.

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

search_notesB

Search notes in the Obsidian vault using regex.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest model for search_notes tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/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 of disclosing behavioral traits. It only states that it searches notes with regex, implying a read-only operation, but does not disclose that it defaults to markdown files, uses ripgrep, or how results/context lines are returned. The schema provides parameter defaults but the description itself adds no behavioral detail beyond what the tool name suggests.

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 zero filler words. It front-loads the primary purpose (search notes) and the method (regex) without redundant qualifications. It is appropriately sized for the tool's complexity.

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?

Even though the schema is rich with six parameters and an output schema exists, the description is incomplete for an agent deciding when to invoke this tool. It lacks usage guidance, alternative routing, and behavioral transparency beyond the literal action. The description's brevity means the agent must infer context from the tool name and schema alone, which is insufficient for a tool with multiple sibling search/list options.

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 100%, so the baseline is 3. The description's mention of 'regex' aligns with the pattern parameter and adds a small semantic cue, but it does not elaborate on path, glob_pattern, max_results, or case_sensitive. Since the schema already documents each parameter thoroughly, the description adds minimal extra parameter meaning, which is acceptable at baseline 3.

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 action (search), resource (notes in the Obsidian vault), and method (regex), which clearly conveys what the tool does. It is distinguishable from siblings like read_note, write_note, and list_notes by its focus on searching, and from search_frontmatter by the general 'notes' target. The phrasing 'using regex' adds precision beyond the tool name.

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 provides no guidance on when to use this tool versus alternatives such as search_frontmatter, which searches only frontmatter, or list_notes for enumeration. It does not mention exclusions, prerequisites, or specific use cases. The only hint is the tool name and the one-line description, leaving the agent to infer usage context on its own.

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

write_noteB

Write a note to the Obsidian vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesRequest model for write_note tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/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 of behavioral disclosure. It only says 'Write a note' without mentioning that it overwrites existing notes, whether it creates parent directories (though schema has create_dirs), whether it prepends frontmatter, or any side effects. The schema covers some parameters, but the description itself adds no behavioral context beyond the basic write action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that is front-loaded with the verb and resource. It's concise and to the point, though it could add a bit more context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a nested request object, an output schema, and no annotations, the description is thin. It doesn't mention overwrite behavior, path constraints, or any return value expectations. The schema covers parameters, but the description doesn't provide enough behavioral context for an agent to fully understand the tool's side effects.

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 100%, so the schema already documents all parameters including path, content, atomic, create_dirs, and frontmatter. The description adds no parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate since the schema does the heavy lifting.

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 states a specific verb ('Write') and resource ('note to the Obsidian vault'), which clearly distinguishes it from read_note, list_notes, and search_notes. It doesn't explicitly name sibling tools, but the action is unambiguous enough that an agent can tell it apart from the read/search siblings.

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 implies usage: use this when you need to create or overwrite a note in the vault. It doesn't explicitly state when not to use it or mention alternatives like update_note (which doesn't exist among siblings), but the context of a write operation versus read/search siblings is clear enough for basic selection.

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. 6 tool updatesv1.0.4
    • First observedget_daily_note
    • First observedlist_notes
    • First observedread_note
    • First observedsearch_frontmatter
    • First observedsearch_notes
    • First observedwrite_note

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

The tools are mostly distinct: read/write/list/search are clearly separated, and search_notes vs search_frontmatter are differentiated by search type. However, search_notes and search_frontmatter could be confused if an agent doesn't read carefully, though the descriptions clarify the distinction.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern (read_note, write_note, list_notes, search_notes, search_frontmatter, get_daily_note). The only minor deviation is get_daily_note, which uses 'get' instead of 'read' and includes a specific noun, but it's still predictable.

Tool Count5/5

Six tools is well-scoped for a vault-bridge server. Each tool covers a distinct core operation for interacting with an Obsidian vault, and none feel redundant or excessive.

Completeness4/5

The tool set covers the core note lifecycle: read, write, list, search, and daily note handling. Missing operations like delete_note or rename_note are minor gaps since agents can work around them, but the surface is largely complete for typical vault interactions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Local-first MCP server for Obsidian vaults with 66 tools for reading, writing, searching, and managing notes, tasks, graphs, and more. Works without Obsidian running and requires no plugins.
    66
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for Obsidian that exposes tools for reading/writing notes, managing frontmatter and tags, querying Tasks, semantic search, and interacting with Obsidian Bases, with shared local caching and support for various runtime modes.
    40
    Apache 2.0
  • 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