RAGOpen SourceFreeActiveMachine-verified· intermediate · ~15 min setup

Idea Cross-Pollinator: Find the Links You'd Never Spot

Have Claude search your whole vault and surface non-obvious connections to an idea.

by Shilpa Mitra· verified 10d ago· v1.0.0

Run this workflow

CI-verified, 5/5 fixtures passing.

Intended Use

People with a large vault who want Claude to surface 5 non-obvious notes that connect to an idea, using mcp-obsidian's indexed search over the whole vault (Option B).

Not for

  • Small vaults, there's not enough material for surprising links
  • Anyone unwilling to install the Local REST API plugin and copy its key

The Stack

Tested Against

mcp-obsidian@0.xobsidian-local-rest-apiclaude-desktopnode@20.x

Side effects & data flow

Network
Anthropic API, only in the non-CI Claude step, localhost:27124 (the Local REST API, on your machine)
Writes
claude_desktop_config.json
Credentials
Local REST API key, Claude Desktop login, for the search step only

Data privacy

  • Anthropic (Claude), only in the non-CI agent step the idea note and search results from your vault (retention: per Anthropic's API/data policy)

Prerequisites

  • Claude Desktop, https://claude.ai/download
  • The Local REST API community plugin, enabled, with its API key copied
  • uv / uvx installed (mcp-obsidian runs via uvx)
  • Node 20+ (used here to validate the config)

Steps

  1. 1

    Check your toolchain

    Config validation needs Node. uvx + the Local REST API plugin + Claude Desktop power the actual search step.

    command -v node >/dev/null 2>&1 || { echo "MISSING required: node"; exit 1; }
    command -v uvx >/dev/null 2>&1 || echo "optional (runs the server): uvx"
    command -v claude >/dev/null 2>&1 || echo "optional: Claude Desktop (for the search step)"
    echo "preflight OK"
  2. 2

    Validate the Claude Desktop config (Option B)

    Write the exact Option B block from the guide and prove it parses, runs uvx mcp-obsidian, and points at the Local REST API on port 27124.

    cat > claude_desktop_config.json <<'EOF'
    {
      "mcpServers": {
        "mcp-obsidian": {
          "command": "uvx",
          "args": ["mcp-obsidian"],
          "env": {
            "OBSIDIAN_API_KEY": "your_key_here",
            "OBSIDIAN_HOST": "127.0.0.1",
            "OBSIDIAN_PORT": "27124"
          }
        }
      }
    }
    EOF
    node -e 'const c=JSON.parse(require("fs").readFileSync("claude_desktop_config.json","utf8"));const o=c.mcpServers["mcp-obsidian"];if(o.command==="uvx"&&o.args.includes("mcp-obsidian")&&o.env.OBSIDIAN_PORT==="27124"){console.log("config OK: uvx -> mcp-obsidian, port "+o.env.OBSIDIAN_PORT)}else{console.log("BAD");process.exit(1)}'
  3. 3

    Scaffold an idea note

    Create Ideas/ with a sample note for Claude to cross-pollinate.

    mkdir -p vault/Ideas
    printf '%s\n' 'Idea: a verified library of AI workflows.' > vault/Ideas/this-idea.md
    echo "ideas ready: vault/Ideas/this-idea.md"
  4. 4

    Cross-pollinate (the Claude step, not checked by CI)

    Ask Claude: read Ideas/this-idea.md, search the whole vault and surface 5 notes that connect to it in a non-obvious way, each with a one-sentence explanation of the hidden link. Needs the running Local REST API + Claude Desktop and is non-deterministic, so CI doesn't run it.

Eval, 5 fixtures

Last passed: verified 10d ago
  • clean-exitexit_codetimeout 15s · max $0

    Expected: 0

  • config-validcontainstimeout 15s · max $0

    Expected: config OK: uvx -> mcp-obsidian

  • ideas-readycontainstimeout 15s · max $0

    Expected: ideas ready: vault/Ideas/this-idea.md

  • port-27124containstimeout 15s · max $0

    Expected: port 27124

  • preflight-okcontainstimeout 15s · max $0

    Expected: preflight OK

Results

The one that finds the bridges between unrelated topics, from the WebAfterAI guide.