RAGOpen SourceFreeActiveMachine-verified· beginner · ~10 min setup

Research Ingestion: File a Source Into Your Knowledge Base

Paste an article or transcript into your vault and have Claude summarize, link, and flag contradictions.

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

Run this workflow

CI-verified, 4/4 fixtures passing.

Intended Use

Researchers and note-takers who paste sources into an Inbox and want Claude to file them: a References/ summary with metadata and takeaways, two-way links to related notes, and a flag on anything that contradicts existing notes.

Not for

  • Expecting it to browse the web, these connectors work on what's in the vault, paste the content in
  • Vaults you haven't backed up

The Stack

Tested Against

obsidian-mcp@0.xclaude-desktopnode@20.x

Side effects & data flow

Network
Anthropic API, only in the non-CI Claude step
Writes
./vault/References/, claude_desktop_config.json
Credentials
Claude Desktop login, for the ingestion step only

Data privacy

  • Anthropic (Claude), only in the non-CI agent step the source text you paste in (retention: per Anthropic's API/data policy)

Prerequisites

  • Claude Desktop, https://claude.ai/download
  • Node 20+ (obsidian-mcp runs via npx)
  • The source text pasted into Inbox/ (these connectors don't fetch URLs)

Steps

  1. 1

    Check your toolchain

    Config validation needs Node; Claude Desktop is the agent for the final step.

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

    Validate the Claude Desktop config (Option A)

    Write the exact Option A block and prove it parses and points npx at obsidian-mcp.

    cat > claude_desktop_config.json <<'EOF'
    {
      "mcpServers": {
        "obsidian": {
          "command": "npx",
          "args": ["-y", "obsidian-mcp", "/Users/you/Documents/MyVault"]
        }
      }
    }
    EOF
    node -e 'const c=JSON.parse(require("fs").readFileSync("claude_desktop_config.json","utf8"));const o=c.mcpServers.obsidian;if(o.command==="npx"&&o.args.includes("obsidian-mcp")){console.log("config OK: npx -> obsidian-mcp")}else{console.log("BAD");process.exit(1)}'
  3. 3

    Scaffold the inbox and references folders

    Create Inbox/ and References/ and drop a sample source note for Claude to file.

    mkdir -p vault/Inbox vault/References
    printf '%s\n' 'Source: a paper arguing vectorless RAG beats embeddings for small corpora.' > vault/Inbox/source.md
    echo "references ready: vault/References/"
  4. 4

    File the source (the Claude step, not checked by CI)

    Tell Claude: read the note in Inbox/, create a summary in References/ with key insights + source metadata + 3 to 5 takeaways, then search the vault for related notes, link both ways, and flag anything that contradicts existing notes. Non-deterministic and key-gated, so CI doesn't run it.

Eval, 4 fixtures

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

    Expected: 0

  • config-validcontainstimeout 15s · max $0

    Expected: config OK: npx -> obsidian-mcp

  • preflight-okcontainstimeout 15s · max $0

    Expected: preflight OK

  • references-readycontainstimeout 15s · max $0

    Expected: references ready: vault/References/

Results

The contradiction-flag is the sleeper feature, from the WebAfterAI guide.