Claude-scholar zotero-obsidian-bridge
Use this skill when papers are collected in Zotero but the user wants detailed reading notes, project-linked literature synthesis, collection-wide paper-note coverage checks, and a connected knowledge map inside the bound Obsidian project knowledge base.
install
source · Clone the upstream repo
git clone https://github.com/Galaxy-Dawn/claude-scholar
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Galaxy-Dawn/claude-scholar "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/zotero-obsidian-bridge" ~/.claude/skills/galaxy-dawn-claude-scholar-zotero-obsidian-bridge && rm -rf "$T"
manifest:
skills/zotero-obsidian-bridge/SKILL.mdsource content
Zotero Obsidian Bridge
Bridge Zotero as the literature source of truth with Obsidian as the durable project knowledge base.
Use this skill when the user wants to:
- collect and organize papers in Zotero,
- read papers from Zotero MCP,
- create or update one detailed paper note per paper under Obsidian
,Papers/ - synthesize those notes into
notes,Knowledge/ - verify that a whole Zotero collection has complete canonical note coverage,
- visualize the literature structure as a default Obsidian canvas.
Core stance
- Zotero owns collection, metadata, attachments, PDF full text, annotations.
- Obsidian owns durable reading notes, project-facing literature knowledge, cross-note links, synthesis.
- Prefer one canonical paper note per paper.
- Prefer filesystem-first Obsidian notes; do not require Obsidian MCP.
- Use this as an explicit, agent-first skill for Zotero ingestion.
- Prefer
+Papers/
as the default bridge targets.Knowledge/ - Prefer
as the default graph artifact.Maps/literature.canvas - Prefer a strong review schema inside each canonical paper note:
ClaimMethodEvidenceLimitationDirect relevance to repoRelation to other papers
- Treat some Zotero
items as valid literature sources when they still expose useful metadata, attachment text, or fulltext.webpage
Default workflow
- Resolve the current project via
.$obsidian-project-memory- If the repo is already bound, use the existing vault.
- If it looks like a research repo but is not bound, bootstrap it first.
- Read Zotero items from the target collection/query.
- If the user asked for a full collection pass, prefer full coverage over a small representative subset.
- If the transport path through MCP is failing but a local
source checkout or Python environment is available, use that local fallback to read metadata/fulltext instead of stopping the workflow.zotero-mcp
- For each paper:
- get metadata,
- get full text when available,
- get annotations/notes when helpful,
- create or update the canonical paper note in
.Papers/
- Add project-facing structure to each paper note:
- claim,
- research question,
- method,
- evidence,
- strengths,
- limitation,
- direct relevance to repo,
- relation to other papers,
- links to related papers and the best matching
notes.Knowledge/
- Synthesize the batch into durable
notes such as:Knowledge/Knowledge/Literature-Overview.mdKnowledge/Method-Families.md
only when the synthesis is stable enough to deserve a canonical note.Knowledge/Research-Gaps.md
- If the request is collection-scoped, update a durable inventory note that records:
- collection size,
- item triage,
- item -> canonical note mapping,
- current coverage count such as
.16 / 16 - use the canonical inventory path
.Knowledge/Zotero-Collection-{collection-slug}-Inventory.md
- Refresh
.Maps/literature.canvas- Prefer semantic filtering and edge thinning.
- Prefer argument-map structure (
) over dense all-to-all paper links.paper + claim + method + gap - If needed, keep a second lightweight display canvas such as
.Maps/literature-main.canvas
- If the user also wants writing deliverables, update:
Writing/literature-review.mdWriting/comparison-matrix.md
- Update today's
note and repo-local project memory.Daily/ - Run a deterministic verification pass after batch ingestion or schema refactors.
Default outputs
- one detailed reading note per paperPapers/*.md
- durable literature synthesis notes when the batch yields stable knowledgeKnowledge/*.md
- when the source is a concrete Zotero collection and coverage tracking mattersKnowledge/Zotero-Collection-{collection-slug}-Inventory.md
- default visual literature graphMaps/literature.canvas
- optional lightweight presentation graph after semantic filteringMaps/literature-main.canvas
- when the user asks for synthesisWriting/literature-review.md
- when cross-paper comparison is usefulWriting/comparison-matrix.md
Safety rules
- Do not dump raw full text into Obsidian.
- Do not create a new note if the canonical paper note already exists.
- Do not create
orConcepts/
trees by default.Datasets/ - Do not treat
,Experiments/
, orResults/
as the default bridge target during Zotero ingestion.Writing/ - Do not force every relationship into a new note; use frontmatter fields, sections, wikilinks, and
first.linked_knowledge - If a relationship is uncertain, record it in the note body or
instead of manufacturing durable structure.Daily/ - Do not stop at a representative subset if the user explicitly asked to check all papers in a collection.
- Do not leave schema drift unresolved across notes in the same collection after a batch pass.
References
Load only what is needed:
- end-to-end Zotero -> Obsidian procedurereferences/WORKFLOW.md
- detailed paper note fields and sectionsreferences/PAPER-NOTE-SCHEMA.md
- canonical inventory note naming and mapping contractreferences/COLLECTION-INVENTORY-SCHEMA.md
- local fallback runbook when MCP transport failsreferences/LOCAL-ZOTERO-FALLBACK.md
- example inventory noteexamples/example-collection-inventory.md
- deterministic schema, zotero-key, and inventory consistency checkscripts/verify_paper_notes.py
- shared note schema../obsidian-literature-workflow/references/PAPER-NOTE-SCHEMA.md
- default literature canvas refresh rules../obsidian-literature-workflow/references/CANVAS-WORKFLOW.md