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.
Run this workflow
CI-verified, 4/4 fixtures passing.
Build this with your agent
One copy-paste hands Claude Code, Codex, or Cursor the full recipe, steps included, nothing to fetch.
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.xSide 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
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
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
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
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 todaypreflight-okcontainstimeout 15s · max $0Expected:
preflight OKconfig-validcontainstimeout 15s · max $0Expected:
config OK: npx -> obsidian-mcpreferences-readycontainstimeout 15s · max $0Expected:
references ready: vault/References/clean-exitexit_codetimeout 15s · max $0Expected:
0
Results
The contradiction-flag is the sleeper feature, from the WebAfterAI guide.
Did this work for you?
Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.
Related workflows
- pgvector on Postgres you already run: prove you picked the right distance operator
- One shared memory for every coding agent: prove the configs actually point at the same server
- zvec: run vector search inside your app, no server, offline
- LlamaIndex: index your documents and query them at runtime
- Crawl4AI: a page to clean, LLM-ready markdown (no API key)
- Khoj + Fable 5: A Second Brain That Knows Your Notes
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).