Sang-Min Park212 downloadsAI-native citation manager: PubMed search, LLM summaries, MeSH tags, CSL citations, and optional Claude Code/Codex MCP access to the live vault.
Formerly “Academic Paper Citation Manager” — same plugin, same id, same settings.
Your markdown notes are the reference library.
Search PubMed, get AI summaries, cite in any journal style — a Zotero / EndNote replacement inside Obsidian.
Install · User guide · Features · Claude Code / Codex · manuwright · Changelog
English · 한국어 · 中文 · 日本語 · Español · Deutsch · Français · Português
![]() Add papers from PubMed |
![]() Cite with @ |
![]() Chat with your library |
![]() Citation map |
Every reference is a plain .md note with CSL-JSON
frontmatter, so your library stays portable, future-proof, and yours. No external app,
no account, no backend — just your vault.
A step-by-step guide with screenshots, from adding papers to exporting a Word manuscript: English · 한국어 · 中文 · 日本語 · Español · Deutsch · Français · Português
📥 Collect
.nbib · CSL-JSON, or straight
from a running Zotero 7 (whole library or one collection).🧠 Summarize (AI)
🏷️ Organize
[@old] citations rewritten across the vault.✍️ Cite & write
@ → autocomplete inserts [@citekey].## References list in a real journal style
(citeproc-js / CSL); in-text marks render to match ([1], superscript, or author–date).csl: frontmatter — or Choose citation style… and
search about 10,000 journal styles by journal name..docx.🔎 Search & chat
[n] sources.search_findings): individual results —
effect size, CI, p and the verbatim quote — from a note's ## Evidence (extracted) section.Published in the Obsidian Community directory: community.obsidian.md/plugins/academic-paper-citation-manager. Version 0.6.0 changed the plugin id; anyone still on 0.5.x follows the migration guide once.
Obsidian updates it like any other plugin (Settings → Community plugins → Check for updates). Desktop only (Obsidian 1.11.4+).
Installed earlier through BRAT? The plugin id and folder are the same, so your settings and index stay: remove the plugin from BRAT's list and keep updating through Community plugins.
From the latest release, download
main.js, manifest.json and styles.css into
<your vault>/.obsidian/plugins/academic-paper-citation-manager/
(create the folder if it does not exist), then reload Obsidian and enable the plugin under Settings → Community plugins. Updating means downloading the three files again.
Requires Node.js 18+ and git.
git clone https://github.com/grotyx/rag-obsidian.git
cd rag-obsidian
npm install
cp .env.example .env # Windows: copy .env.example .env
# edit .env → set VAULT_PLUGIN_DIR to <your vault>/.obsidian/plugins/academic-paper-citation-manager
npm run deploy # builds + copies the plugin into your vault
Then in Obsidian: Settings → Community plugins → enable the plugin → reload (Ctrl/Cmd-R).
If your vault is in OneDrive / iCloud / Dropbox / Obsidian Sync, the built plugin travels
inside the vault (<vault>/.obsidian/plugins/academic-paper-citation-manager/). On another machine just
open the synced vault and enable the plugin — no Node, no build.
Ctrl/Cmd-R) and confirm the plugin is enabled.References/ with an AI summary + topic tags.@ and pick a reference → [@citekey].Ctrl/Cmd-P → Update bibliography → a ## References list in
your chosen journal style.The citation workflow needs no embeddings. Semantic search & chat are optional and require a one-off Rebuild search index.
On Obsidian Desktop, open Settings → Refwright → External AI (MCP), enable access, then copy the generated Claude Code command or Codex configuration. Keep this vault open while using the tools. See the complete MCP guide for the tool list, safe editing workflow, example prompts, security model, and troubleshooting.
MCP delegates reasoning and prose to Claude Code or Codex. It does not call Chat with library, paper summarization, or the LLM reranker; only library search/index rebuild may use the configured embedding provider.
For a complete import, ask the client to add and summarize the paper. It will follow
add_reference → get_reference_source → save_reference_summary: PMC full text is preferred,
an abstract is the fallback, and a current note hash prevents overwriting concurrent edits.
manuwright is a companion project by the same author: a medical-manuscript workflow for AI agents (Claude Code, Codex, Antigravity, opencode, Muse). It makes the agent plan before it writes, cite only registered sources, take every number from your results files, and pass verification gates before submission. It uses this plugin's MCP server as its reference library:
manuwright obsidian connect registers this
plugin's MCP server (rag-obsidian) with each installed agent, so any of them can search your
papers while it drafts. manuwright obsidian install can also install the plugin into a vault
and turn on MCP access for you.manuwright evidence import-obsidian <citekey> copies a reference note into the paper's knowledge/evidence.md: the
CSL fields become the citation, the plugin's AI summary fills the summary fields, and the
citekey becomes the [EVID:citekey] id. Imported entries start as abstract-only until you
have read the full text.uv tool install git+https://github.com/grotyx/Academic_writing_c_claudecode
manuwright obsidian status # vaults with this plugin, and which agents are connected
manuwright obsidian connect # add the rag-obsidian MCP server to your agents
manuwright evidence import-obsidian lv2024efficacy

manuwright is optional: the plugin works on its own, and manuwright works without Obsidian. Keep Obsidian open with MCP access enabled while agents use the library. See the manuwright manual.
Pluggable, all through Obsidian's requestUrl on Obsidian Desktop:
Out of the box both are set to the OpenAI-compatible provider pointed at OpenRouter, so a single key covers chat, paper summaries and embeddings and nothing has to be installed locally. Paste the key and you are done; everything else is optional.
gpt-5.1-codex; for OpenCode provider/model). The CLI
is found in the usual install folders, or set CLI executable; Test checks it. Calls run
from an empty temporary folder with the CLI's user config skipped (its MCP servers and hooks
would otherwise start on every call), about 4–7 s each, three at a time in batches.
Embeddings still need OpenRouter/OpenAI or Ollama.OpenRouter model ids carry a vendor prefix (
openai/…,deepseek/…). Pointing the base URL athttps://api.openai.com/v1instead works too — drop the prefix from the model ids.
Using OpenRouter? Pick the OpenAI provider for both chat and embeddings — one key, one base URL, hundreds of models:
| Setting | Value |
|---|---|
| Chat / Embedding provider | OpenAI |
| OpenAI base URL (shared) | https://openrouter.ai/api/v1 |
| Chat model | any OpenRouter id, e.g. deepseek/deepseek-v4-flash |
| Embedding model | openai/text-embedding-3-small |
| OpenAI API key | your OpenRouter key (openrouter.ai/keys) |
Using Google Gemini? Pick the OpenAI provider and point it at Google's endpoint:
| Setting | Value |
|---|---|
| Chat provider | OpenAI |
| Chat model | gemini-3.5-flash |
| Embedding provider | OpenAI |
| Embedding model | gemini-embedding-001 |
| OpenAI base URL (shared) | https://generativelanguage.googleapis.com/v1beta/openai |
| OpenAI API key | your Gemini key (Google AI Studio) |
Obsidian: write Manuscript.md → type @ to cite → set the journal: csl: springer-basic-brackets
Ctrl/Cmd-P → "Compile manuscript" → Manuscript (compiled).md
Ctrl/Cmd-P → "Export manuscript to Word (.docx)" → Manuscript.docx (needs Pandoc)
[@citekey] to its styled in-text mark and appends
the ## References list — ready for Pandoc / submission.scripts/to-docx.cjs still does the same from a terminal.)Bibliographies and in-text marks use citeproc-js over your CSL-JSON — the same engine Zotero uses.
nature,
the-lancet) — it's fetched from the CSL repo
and cached.csl: to the note's frontmatter — it overrides the global style.---
csl: springer-basic-brackets
---
| Journal | csl: value |
|---|---|
| Spine | spine |
| The Spine Journal | elsevier-vancouver |
| European Spine Journal | springer-basic-brackets |
| Global Spine Journal | american-medical-association |
| anything else | any id from the CSL styles repo |
| Group | Commands |
|---|---|
| Add | Search PubMed · Add by DOI / PMID / arXiv / title · Import (BibTeX / RIS / nbib / CSL-JSON / Zotero) · Import PDF |
| Read | Mark unread / reading / read · Reading queue · Find open-access PDF · Download open-access PDF · Download open-access PDF files for references without one · Link PDF files in a folder to references · Extract PDF highlights · Index linked PDF files · Index this note's PDF · Open reference online |
| Organize | Summarize and tag references (fill gaps) · Summarize and tag this reference · Summarize and tag references in a folder or tag… · Re-summarize this reference · Re-summarize references made by an older model · Open screening pane · Create PRISMA flow diagram · Library dashboard · Find duplicates · Merge duplicates… · Backfill citation counts · Check retraction (this note / all) · Rename tag · Enrich metadata · Suggest related papers · Export citation network |
| Write | @ autocomplete · Suggest citations for selection · Find unsupported claims · Update bibliography · Choose citation style… · Check references in this manuscript · Compile manuscript · Export manuscript to Word (.docx) · Copy citation · Export annotated bibliography · Save latest chat answer as note |
| Search | Search library (semantic) · Chat with library · Show related papers · Build citation graph · Rebuild search index |
| Export | Library → BibTeX / RIS / CSL-JSON |
npm run dev # esbuild watch → main.js
npm run deploy # build + copy into the vault (VAULT_PLUGIN_DIR in .env)
npm run build # tsc + esbuild production
npm test # live integration suite + MCP contract/security checks
Helper script (terminal, no Obsidian needed) — path from .env:
node scripts/to-docx.cjs "Manuscript (compiled).md" # compiled md → styled .docx
See docs/MCP.md for external-AI setup,
docs/MIGRATION-0.6.md for the 0.5.x migration, and
CLAUDE.md for the module map.
academic-paper-citation-manager. The MCP connection
name remains rag-obsidian; these identifiers are independent.2022-SpineJ-ParkSM-Biportal.md); the short citekey: in
frontmatter is the [@cite] handle..docx export needs Pandoc; PDF highlight extraction needs a PDF with annotations.data.json; on a
synced vault, enter the key once per device.styles/ (CC BY-SA 3.0; see
styles/README.md). Community installs fetch and cache a selected CSL style/locale if it is
not present in the three release files. Plugin code is MIT.data.json. The plugin has no telemetry, advertising, account service, or hosted backend.127.0.0.1. It writes a generated bridge beside the plugin
and a short-lived discovery file in the operating-system temporary directory (outside the
vault); both contain connection data, never note contents or provider API keys. MCP tools can
read and change vault Markdown only when you enable MCP access. See the MCP security
model.~/Library/Application Support, %LOCALAPPDATA% or ~/.local/share, under
academic-paper-citation-manager/; through 0.8.1 it was the cache folder, which cleaners empty).
CLI and Pandoc calls use a temporary folder that is deleted after each call.Professor Sang-Min Park, M.D., Ph.D. Department of Orthopaedic Surgery, Seoul National University Bundang Hospital, Seoul National University College of Medicine 🌐 sangmin.me
MIT (plugin code). Bundled PDF.js retains its full Apache-2.0 license and modification notice in main.js; CSL
styles/locales retain their CC BY-SA 3.0 license (see THIRD_PARTY_NOTICES.md).