RAGOpen SourceFreeActiveMachine-verified· beginner · ~5 min setup

Obsidian × MCPVault: Read a Note from Any MCP Client

Read a note from your Obsidian vault through MCPVault, from any MCP client, including a fully local LM Studio + open-model setup.

by Shilpa Mitra· verified today· v1.0.0

Run this workflow

CI-verified, 4/4 fixtures passing.

Intended Use

Anyone who wants their AI client to read notes from an Obsidian vault over MCP, regardless of host. MCPVault is a standard MCP server, so it works with Claude Desktop, LM Studio, or any MCP client, including 100% local open-model setups. CI verifies the host-agnostic spine: the config is valid and the note is present and readable (what read_note returns). The model-driven read_note call is fenced.

Not for

  • Vaults you have not backed up
  • Expecting CI to prove a specific model, GPU, or OS works, that part is host-side and community-reported, not machine-checked

The Stack

Tested Against

mcpvault@latestnode@20.xobsidian@1.7.x

Side effects & data flow

Network
none, local only
Writes
./mcp.json, ./vault/Inbox/
Credentials
none required

Prerequisites

  • Node 20+ (MCPVault runs via npx)
  • Any MCP client: Claude Desktop, or LM Studio with MCP enabled
  • An Obsidian vault folder

Steps

  1. 1

    Configure MCPVault for any MCP client, and scaffold a note

    The same MCPVault block works in any MCP host: Claude Desktop or LM Studio. Point the args path at your vault folder; the reader who reported this used a Windows path. CI validates the config and drops a note for read_note to return.

    cat > mcp.json <<'EOF'
    { "mcpServers": { "obsidian": { "command": "npx", "args": ["@bitbonsai/mcpvault@latest", "/path/to/your/Vault"], "env": {} } } }
    EOF
    node -e 'const c=JSON.parse(require("fs").readFileSync("mcp.json","utf8"));const o=c.mcpServers.obsidian;if(o.command==="npx"&&o.args.some(a=>a.indexOf("@bitbonsai/mcpvault")===0)){console.log("config OK: npx -> @bitbonsai/mcpvault")}else{console.log("BAD");process.exit(1)}'
    mkdir -p vault/Inbox
    cat > vault/Inbox/welcome.md <<'EOF'
    # Welcome to your vault
    
    MCPVault reads this note over MCP, from Claude Desktop or LM Studio.
    EOF
    test -s vault/Inbox/welcome.md && echo "note scaffolded: vault/Inbox/welcome.md"
  2. 2

    What CI checks: the note is present and readable (what read_note returns)

    read_note is a filesystem read over MCP. CI confirms the note exists at the vault path and its title and body are readable, which is exactly the content read_note hands back. No model, no key, host-agnostic.

    cat > checkread.mjs <<'EOF'
    import { readFileSync, existsSync } from 'node:fs';
    const path = 'vault/Inbox/welcome.md';
    let ok = true;
    function check(label, cond){ console.log(label + ': ' + (cond ? 'yes' : 'NO')); if(!cond) ok=false; }
    check('note exists at vault path', existsSync(path));
    const t = existsSync(path) ? readFileSync(path, 'utf8') : '';
    check('read_note returns the title', t.includes('# Welcome to your vault'));
    check('read_note returns the body', t.includes('MCPVault reads this note over MCP'));
    if(!ok){ console.log('mcpvault read check FAILED'); process.exit(1); }
    console.log('mcpvault read check OK');
    EOF
    node checkread.mjs
  3. 3

    Ask your model to read it (the model step, not checked by CI)

    In your MCP client (Claude Desktop, or LM Studio with a local model), ask it to read the note. That call routes through the model, so it is non-deterministic and fenced: CI proves the note is there and readable, never the model's phrasing.

Eval, 4 fixtures

Last passed: verified today
  • config-validcontainstimeout 30s · max $0

    Expected: config OK: npx -> @bitbonsai/mcpvault

  • read-titlecontainstimeout 30s · max $0

    Expected: read_note returns the title: yes

  • read-okcontainstimeout 30s · max $0

    Expected: mcpvault read check OK

  • clean-exitexit_codetimeout 30s · max $0

    Expected: 0

Results

Community-tested on Windows with LM Studio + a local open model (Qwopus-3.5-9B-Coder, Q4_K_M); read_note confirmed working by a reader.

Did this work for you?

Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.

Liked this workflow?

Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).