Refwright
옛 이름 “Academic Paper Citation Manager” — 같은 플러그인, 같은 id, 설정 그대로.
마크다운 노트가 곧 참고문헌 라이브러리입니다.
PubMed 검색, AI 요약, 저널 스타일 인용까지 — Obsidian 안의 Zotero / EndNote 대체.
설치 · 사용 설명서 · 기능 · Claude Code / Codex · manuwright · 변경 기록
English · 한국어 · 中文 · 日本語 · Español · Deutsch · Français · Português
 PubMed로 논문 추가 |
 @로 인용 |
 라이브러리와 대화 |
 인용 지도 |
모든 레퍼런스는 [CSL-JSON](https://citationstyles.org/) frontmatter를 가진 평범한 `.md`
노트라, 라이브러리가 이식성 있고 미래에도 안전하며 온전히 내 것입니다. 외부 앱·계정·
백엔드 필요 없이 vault 하나로 끝.
---
## 📖 사용 설명서
논문 추가부터 Word 원고 내보내기까지 화면과 함께 설명합니다:
[English](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/en.md) · **[한국어](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/ko.md)** · [中文](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/zh.md) · [日本語](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/ja.md) · [Español](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/es.md) · [Deutsch](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/de.md) · [Français](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/fr.md) · [Português](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/pt.md)
[](https://github.com/grotyx/rag-obsidian/blob/main/docs/manual/ko.md)
---
## ✨ 기능
**📥 수집**
- Obsidian 안에서 **PubMed 키워드 검색** → 논문 선택 → 노트.
- **DOI / PMID / arXiv**, 또는 **논문 제목**으로 추가 (자동 조회).
- 기존 라이브러리 **임포트** — **BibTeX · RIS · PubMed `.nbib` · CSL-JSON**, 또는 실행 중인
**Zotero 7**에서 바로(라이브러리 전체 또는 컬렉션 하나).
**🧠 AI 요약**
- LLM이 **섹션별 요약**(Background / Methods / Results / Conclusions)을 각 노트에 작성.
*Summary language*(설정 → Chat)에서 영어, 한글, 둘 다(기본값 — 영어 섹션 + 간결한 한글 요약),
또는 원하는 다른 언어를 이름으로 지정 가능.
- open access 논문은 **본문 전체**(PubMed Central), 그 외는 abstract 기반.
**🏷️ 정리**
- 모든 노트에 **MeSH 주제 태그** 자동 부여 → Obsidian **그래프 뷰**에서 주제별로 묶임.
- **인용 그래프**(OpenAlex): 라이브러리 내 인용/피인용, *"자주 인용되는데 빠진 논문"* 추천.
Related 패널 버튼으로 한 번 만들면, 이후 추가된 문헌은 자동으로 그래프에 합류한다.
Related 패널에 **지도**로 그려집니다 — 실선 노드는 보유 논문, 점선 노드는 미보유 논문이며
점선 노드를 클릭하면 바로 추가 창이 열립니다.
- 읽기 상태, **대시보드**, 인용수. **라이브러리 창**에서 연도·제목·저자·인용수·추가일로 정렬하고,
빠른 필터(PDF 있음 / 없음 / 안 읽음 / 철회)로 좁힘.
- **중복**: 찾은 뒤 **병합** — 한 노트만 남기고 빈 칸은 다른 노트에서 채우며, 볼트 전체의
`[@옛키]` 인용도 바꿔 씀.
- **철회 확인**: 노트 하나 또는 라이브러리 전체(OpenAlex), 결과 노트 생성.
- **체계적 문헌고찰**: **스크리닝 창**(포함 / 제외 / 보류, 핵심질문, 근거수준, 연구설계, 제외 사유,
단축키)과 전체 또는 태그 범위의 **PRISMA 2020 흐름도**.
- **PDF**: PDF가 없는 참고문헌 전체의 OA 사본 다운로드(Unpaywall), 또는 이미 가진
**PDF 폴더를 연결** — 파일 이름·DOI·PMID·제목으로 짝지음.
**✍️ 인용·집필**
- `@` 입력 → 자동완성으로 `[@citekey]` 삽입.
- **"Update bibliography"**가 실제 **저널 스타일**(citeproc-js / CSL)로 `## References`
생성; in-text 표시도 그에 맞춤(`[1]`, 위첨자, 또는 저자–연도).
- 노트의 `csl:` frontmatter로 **논문별 스타일** 지정 — 또는 **Choose citation style…**에서
저널 이름으로 약 1만 개 스타일 검색.
- **Live Preview**에서도 인용이 저널 형식으로 보이고, 마우스를 올리면 논문 정보가 뜸.
- 투고 전 **Check references in this manuscript**: 라이브러리에 없음, 철회, DOI 없음,
서지 정보 누락을 한 번에 보고.
- **Compile manuscript** → 인용이 풀린 사본 → **`.docx`** 변환.
**🔎 검색·챗**
- 하이브리드 **의미 검색**(BM25 + 벡터) + 라이브러리 근거 기반 **챗** (`[n]` 출처).
- **측정으로 다듬은 검색** (0.8.1): hosted **cross-encoder 재순위**(검색 1번에 약 0.0002달러), **질의 확장**(내 검색 용어집 +
MeSH 동의어), 한국어(비영어) 질문 **자동 번역**. 논문 16,578편, 임상 질문 96개 벤치마크에서
nDCG@10이 영어 질문 0.53 → 0.81, 한국어 질문 0.18 → 0.83로 올랐습니다.
- Claude Code / Codex용 **결과 단위 검색**(MCP `search_findings`): 노트의 `## Evidence (extracted)` 칸에서
효과크기·CI·p값·원문 인용을 개별 결과로 찾아 줍니다.
- **검색 패널과 챗 패널의 필터** — 출판 **연도 범위**, **저자**(성), **태그**로 결과를 좁힙니다.
태그 입력창은 라이브러리에 이미 있는 태그를 자동완성하며, Enter를 누르면 칩으로 추가됩니다.
칩을 여러 개 넣으면 그 태그를 **모두** 가진 논문만 남습니다. 필터는 설정이 아니라 패널에
저장되며, 챗 패널에서는 답변이 근거로 삼을 논문의 범위를 좁히고 출처 목록에 그 범위가 표시됩니다.
- **MCP로 Claude Code / Codex 연결(데스크톱):** 외부 AI가 실행 중인 라이브러리를 검색하고,
PubMed 논문을 찾아 추가·요약하며, Markdown 노트를 안전하게 생성·수정·이동·휴지통 처리하고,
인용 원고를 컴파일할 수 있습니다. 요약문은 Claude/Codex가 작성하며 MCP 경로는 플러그인의
챗·요약·rerank LLM을 호출하지 않습니다. Claude Code·Codex·OpenCode·Antigravity 설정 버튼이
있고, 노트 편집 도구 7개는 끌 수 있습니다.
- **LLM에 API 키 불필요(데스크톱):** 챗과 요약을 로그인된 **Codex CLI** 또는 **OpenCode CLI**로
돌릴 수 있습니다. 검색용 임베딩은 여전히 OpenRouter/OpenAI 또는 로컬 Ollama가 필요합니다.
---
## 📦 설치
> **Obsidian Community directory에 등록되었습니다:**
> [community.obsidian.md/plugins/academic-paper-citation-manager](https://community.obsidian.md/plugins/academic-paper-citation-manager).
> 0.6.0에서 플러그인 id가 바뀌었으므로 아직 0.5.x를 쓰는 분은
> [마이그레이션 안내](docs/MIGRATION-0.6.ko.md)를 한 번 따라 주세요.
### 방법 A — 커뮤니티 플러그인 (권장)
1. Obsidian → **설정 → 커뮤니티 플러그인** → 제한 모드가 켜져 있으면 끕니다.
2. **탐색** → **Refwright** 검색 → **설치** → **활성화**
업데이트는 다른 플러그인처럼 **설정 → 커뮤니티 플러그인 → 업데이트 확인**으로 받습니다.
데스크톱 전용입니다(Obsidian 1.11.4 이상).
예전에 **BRAT**으로 설치했다면 플러그인 id와 폴더가 같아서 설정과 검색 색인은 그대로
남습니다. BRAT 목록에서만 빼고, 이후 업데이트는 커뮤니티 플러그인에서 받으세요.
방법 B — 릴리스 파일 내려받기 (수동)
[최신 릴리스](https://github.com/grotyx/rag-obsidian/releases/latest)에서 `main.js`,
`manifest.json`, `styles.css` 세 파일을 받아 아래 폴더에 넣습니다(없으면 만드세요).
```text
<보관함>/.obsidian/plugins/academic-paper-citation-manager/
```
Obsidian을 새로고침한 뒤 **설정 → 커뮤니티 플러그인**에서 활성화합니다. 업데이트하려면
세 파일을 다시 받으면 됩니다.
방법 C — 직접 빌드
[Node.js 18+](https://nodejs.org) 와 [git](https://git-scm.com) 필요.
```bash
git clone https://github.com/grotyx/rag-obsidian.git
cd rag-obsidian
npm install
cp .env.example .env # Windows: copy .env.example .env
# .env 편집 → VAULT_PLUGIN_DIR 를 <내 vault>/.obsidian/plugins/academic-paper-citation-manager 로
npm run deploy # 빌드 + 플러그인을 vault로 복사
```
이후 Obsidian: **Settings → Community plugins → 플러그인 활성화** → 다시 로드(`Ctrl/Cmd-R`).
방법 D — 클라우드 동기화 vault (둘째 PC는 빌드 불필요)
vault가 OneDrive / iCloud / Dropbox / Obsidian Sync에 있으면 빌드된 플러그인이 vault
**안에**(`/.obsidian/plugins/academic-paper-citation-manager/`) 같이 따라옵니다. 다른 PC에선 동기화된
vault를 열고 활성화만 — Node·빌드 불필요.
---
## 🚀 빠른 시작 (5분)
1. Obsidian **다시 로드**(`Ctrl/Cmd-R`) 후 플러그인 활성화 확인.
2. **AI provider 설정** — Settings → 플러그인 탭 → 아래 **Provider** 참고.
3. **논문 추가** — 리본 **🔍 Search PubMed** → 주제 입력 → 결과 선택 → **Add**.
각각 AI 요약 + 주제 태그가 달린 `References/` 노트가 됨.
4. **집필·인용** — 아무 노트에서 `@` 입력 → 레퍼런스 선택 → `[@citekey]`.
5. **참고문헌** — `Ctrl/Cmd-P` → **Update bibliography** → 선택한 저널 스타일로
`## References` 생성.
> 인용 워크플로는 **임베딩이 필요 없습니다.** 의미 검색·챗은 선택이며, 한 번
> **Rebuild search index**가 필요합니다.
### Claude Code 또는 Codex 연결
Obsidian Desktop에서 **설정 → Refwright → External AI (MCP)**를 열어
접근을 켠 뒤, 생성된 Claude Code 명령 또는 Codex 설정을 복사합니다. 도구를 사용하는 동안 이
vault를 열어 두어야 합니다. 도구 목록, 안전한 수정 흐름, 예시 명령, 보안 모델과 문제 해결은
[MCP 전체 안내서](docs/MCP.ko.md)를 참고하세요.
MCP에서 판단과 글쓰기는 Claude Code/Codex가 담당합니다. 플러그인의 **Chat with library**,
논문 요약, LLM reranker는 호출하지 않으며 라이브러리 검색·인덱스 재구축만 설정된 임베딩
provider를 사용할 수 있습니다.
논문을 완전히 등록하려면 외부 AI에 “찾아서 추가하고 요약까지 저장해줘”라고 요청하십시오.
클라이언트가 `add_reference` → `get_reference_source` → `save_reference_summary` 순서로
진행합니다. PMC 원문을 우선 사용하고 없으면 초록을 사용하며, 최신 노트 hash가 맞지 않으면
사용자의 동시 수정을 덮어쓰지 않고 중단합니다.
---
## 🖋️ manuwright로 논문 쓰기
[**manuwright**](https://github.com/grotyx/Academic_writing_c_claudecode)는 같은 저자가 만든 자매 프로젝트입니다. AI 에이전트(Claude Code, Codex,
Antigravity, opencode, Muse)로 의학 논문을 쓰는 작업 흐름으로, 에이전트가 계획을 승인받기 전에는
쓰지 못하게 하고, 등록된 근거만 인용하게 하고, 모든 숫자를 결과 파일에서 가져오게 하며, 투고 전에
검증 관문을 통과하게 합니다. 참고문헌 라이브러리로는 이 플러그인의 MCP 서버를 씁니다.
- **라이브러리를 모든 에이전트가 함께 씁니다.** `manuwright obsidian connect`가 이 플러그인의 MCP
서버(`rag-obsidian`)를 설치된 에이전트마다 등록하므로, 어느 에이전트든 원고를 쓰면서 내 논문을
검색합니다. `manuwright obsidian install`로 볼트에 플러그인을 설치하고 MCP 접근까지 켤 수도 있습니다.
- **찾는 것은 Obsidian, 인용할 수 있는지는 manuwright가 정합니다.** `manuwright evidence
import-obsidian `는 레퍼런스 노트를 논문의 `knowledge/evidence.md`로 옮깁니다. CSL 필드는
인용 정보가 되고, 플러그인의 AI 요약은 요약 칸을 채우며, citekey는 `[EVID:citekey]` ID가 됩니다.
가져온 항목은 전문을 읽기 전까지 *abstract-only*로 표시됩니다.
```sh
uv tool install git+https://github.com/grotyx/Academic_writing_c_claudecode
manuwright obsidian status # 플러그인이 있는 볼트와 연결된 에이전트 확인
manuwright obsidian connect # 에이전트에 rag-obsidian MCP 서버 추가
manuwright evidence import-obsidian lv2024efficacy
```

manuwright는 선택 사항입니다. 플러그인은 혼자서도 쓸 수 있고, manuwright도 Obsidian 없이 동작합니다.
에이전트가 라이브러리를 쓰는 동안에는 Obsidian을 열어 두고 MCP 접근을 켜 두세요. 자세한 내용은
[manuwright 설명서](https://github.com/grotyx/Academic_writing_c_claudecode/blob/main/docs/manual.ko.md)를 보세요.
---
## ⚙️ Provider
모두 Obsidian Desktop의 `requestUrl` 경유:
**설치 직후 채팅과 임베딩 모두 OpenAI 호환 프로바이더가 OpenRouter를 향하도록 맞춰져 있습니다.**
키 하나로 채팅·논문 요약·임베딩이 전부 돌아가고, 로컬에 설치할 것도 없습니다. 키만 넣으면 끝이고
나머지는 선택입니다.
> OpenRouter 모델 id에는 공급자 접두어가 붙습니다(`openai/…`, `deepseek/…`). base URL을
> `https://api.openai.com/v1`로 바꿔 OpenAI에 직접 붙어도 되며, 그때는 접두어를 뺍니다.
- **LLM**(챗 + 요약): OpenAI / 호환(기본) · Anthropic · Ollama(로컬) · **Codex CLI** ·
**OpenCode CLI**. *Chat model*은 선택 항목으로,
**Chat with library** 답변에만 기본 모델 대신 적용됩니다. 논문 요약과 PDF 메타데이터 추출은
기본 모델을 그대로 쓰므로, 답변 품질이 중요한 채팅에만 더 좋은 모델을 지정할 수 있습니다.
- **임베딩**(검색 + 챗): Ollama(로컬) · OpenAI / 호환.
- **API 키 없이: Codex CLI / OpenCode CLI**(데스크톱). Codex(ChatGPT 로그인)나 OpenCode를 이미
쓰고 있다면 LLM 제공자로 고르세요. 챗·요약·재정렬 호출이 모두 그 CLI를 통해 사용자 로그인으로
나가고, 플러그인은 키를 저장하지 않습니다. *Default model*을 비우면 CLI 기본 모델을 쓰고,
지정할 수도 있습니다(`gpt-5.1-codex`, OpenCode는 `provider/model`). CLI는 흔한 설치 위치에서 찾고,
다르면 *CLI executable*에 경로를 넣으세요. **Test** 버튼으로 확인합니다. 호출은 빈 임시 폴더에서
CLI 사용자 설정을 건너뛰고 실행되며(그렇지 않으면 CLI의 MCP 서버와 훅이 매번 뜸), 한 번에
4–7초, 일괄 작업은 3개씩입니다. 임베딩은 여전히 OpenRouter/OpenAI 또는 Ollama가 필요합니다.
- **인덱스 위치**: *Keep the search index outside the vault*(데스크톱)를 켜면 인덱스를 컴퓨터의
앱 데이터 폴더에 둡니다. 동기화되는 vault가 변경 때마다 인덱스를 다시 올리지 않고, 기기마다 따로
만듭니다.
- **검색**: *Results (top-k)*는 답변 하나가 참고하는 구절 수(기본 20, 문헌당 최대 3구절이라
긴 논문 하나가 전체를 차지하지 못함). *Rerank chat results with the LLM*은 기본 꺼짐 —
켜면 두 배로 뽑은 뒤 모델이 관련도 순으로 재정렬하고, 질문당 요청이 1회 늘어난다.
**OpenRouter 사용 시?** 채팅과 임베딩 모두 **OpenAI** provider를 고르면 됩니다. 키 하나, base URL 하나:
| 설정 | 값 |
|---|---|
| 채팅 / 임베딩 provider | `OpenAI` |
| OpenAI base URL (공용) | `https://openrouter.ai/api/v1` |
| 채팅 모델 | OpenRouter 모델 id, 예: `deepseek/deepseek-v4-flash` |
| 임베딩 모델 | `openai/text-embedding-3-small` |
| OpenAI API 키 | OpenRouter 키 ([openrouter.ai/keys](https://openrouter.ai/keys)) |
**Google Gemini 사용 시?** **OpenAI** provider를 고르고 base URL을 Google로:
| 설정 | 값 |
|---|---|
| Chat provider | `OpenAI` |
| Chat model | `gemini-3.5-flash` |
| Embedding provider | `OpenAI` |
| Embedding model | `gemini-embedding-001` |
| OpenAI base URL (공유) | `https://generativelanguage.googleapis.com/v1beta/openai` |
| API key (OpenRouter or OpenAI) | Gemini 키 ([Google AI Studio](https://aistudio.google.com/apikey)) |
---
## ✍️ 논문 쓰기 (Zotero / Word 플러그인 없이)
```text
Obsidian: Manuscript.md 작성 → @ 로 인용 → 저널 지정: csl: springer-basic-brackets
Ctrl/Cmd-P → "Compile manuscript" → Manuscript (compiled).md
Ctrl/Cmd-P → "Export manuscript to Word (.docx)" → Manuscript.docx (Pandoc 필요)
```
- **Compile manuscript**가 모든 `[@citekey]`를 저널 형식 in-text로 풀고 `## References`를
붙임 — Pandoc / 제출 준비 완료.
- **Export manuscript to Word (.docx)**가 같은 방식으로 컴파일한 뒤 내장 학술 템플릿으로
Pandoc을 실행 — Times New Roman 12pt, 더블스페이스, 검정. Pandoc은 흔한 설치 위치에서 자동으로
찾고, 다른 곳에 있으면 설정 → Writing에서 경로 지정. (터미널에서는 `scripts/to-docx.cjs`도 그대로 사용 가능.)
---
## 🎨 인용 스타일
참고문헌·in-text 표시는 **citeproc-js**(Zotero와 동일 엔진)로 CSL-JSON에서 렌더.
- **전역:** Settings → *Bibliography style (CSL)*. 오프라인 번들: **Spine · The Spine
Journal · European Spine Journal · AMA · APA**. 또는 아무 스타일 id(`nature`,
`the-lancet` 등) 입력 → [CSL 저장소](https://github.com/citation-style-language/styles)에서
받아 캐시.
- **논문별:** 노트 frontmatter에 `csl:` 추가 → 전역 설정을 덮어씀.
```yaml
---
csl: springer-basic-brackets
---
```
| 저널 | `csl:` 값 |
|---|---|
| Spine | `spine` |
| The Spine Journal | `elsevier-vancouver` |
| European Spine Journal | `springer-basic-brackets` |
| Global Spine Journal | `american-medical-association` |
| 그 외 | CSL 저장소의 아무 id |
---
## 🧰 명령
| 그룹 | 명령 |
|---|---|
| **추가** | Search PubMed · DOI / PMID / arXiv / 제목 추가 · Import(BibTeX / RIS / nbib / CSL-JSON / Zotero) · Import PDF |
| **독서** | 읽기 상태(unread / reading / read) · Reading queue · OA PDF 찾기 · OA PDF 다운로드 · OA PDF 일괄 다운로드 · 폴더의 PDF 연결 · PDF 형광펜 추출 · 링크된 PDF 본문 색인 · 이 노트의 PDF 색인 · 온라인으로 열기 |
| **정리** | 요약·태그 일괄 채우기 · 이 참고문헌 요약·태그 채우기 · 폴더/태그 범위로 요약·태그 채우기… · 이 참고문헌 다시 요약 · 옛 모델로 만든 요약 다시 생성 · 스크리닝 창 · PRISMA 흐름도 · 대시보드 · 중복 찾기 · 중복 병합… · 인용수 채우기 · 철회 확인(이 노트 / 전체) · 태그 변경 · 메타데이터 보강 · 관련 논문 추천 · 인용 네트워크 내보내기 |
| **집필** | `@` 자동완성 · 선택 문단에 인용 추천 · 근거 없는 주장 찾기 · Update bibliography · 인용 스타일 선택 · 원고 참고문헌 점검 · Compile manuscript · Word(.docx)로 내보내기 · 인용 복사 · 주석 참고문헌 · 최근 챗 답변을 노트로 저장 |
| **검색** | 의미 검색 · 챗 · 관련 논문 · 인용 그래프 만들기 · 인덱스 재생성 |
| **내보내기** | 라이브러리 → BibTeX / RIS / CSL-JSON |
---
## 🛠️ 개발자용
```bash
npm run dev # esbuild watch → main.js
npm run deploy # 빌드 + vault로 복사 (.env의 VAULT_PLUGIN_DIR)
npm run build # tsc + esbuild production
npm test # 라이브 통합 테스트 + MCP 계약/보안 검사
```
헬퍼 스크립트 (터미널, Obsidian 불필요) — 경로는 `.env`에서:
```bash
node scripts/to-docx.cjs "Manuscript (compiled).md" # compiled md → 서식 .docx
```
외부 AI 설정은 [`docs/MCP.ko.md`](./docs/MCP.ko.md), 0.5.x 이전은
[`docs/MIGRATION-0.6.ko.md`](./docs/MIGRATION-0.6.ko.md), 모듈 맵은
[`CLAUDE.md`](./CLAUDE.md) 참고.
---
## ⚠️ 참고 & 한계
- Community 호환 플러그인 id는 `academic-paper-citation-manager`입니다. MCP 연결 이름
`rag-obsidian`은 별도 식별자라 그대로 유지합니다.
- 파일명은 **읽기 쉬움**(`2022-SpineJ-ParkSM-Biportal.md`); frontmatter의 짧은
`citekey:`가 `[@cite]` 핸들.
- `.docx` 변환은 **Pandoc** 필요; PDF 형광펜 추출은 주석이 있는 PDF 필요.
- 이 릴리스는 MCP의 Node API 사용 때문에 **데스크톱 전용**입니다. MCP 사용 중에는 대상
vault를 Obsidian Desktop에서 열어 두어야 합니다.
- Obsidian Properties 패널이 중첩 CSL frontmatter에 경고할 수 있음 — 데이터는 유효함.
- 설정의 **Contact e-mail**을 채워 두세요. OpenAlex·Unpaywall·PubMed가 같이 쓰는 값이고,
오픈액세스 PDF 조회는 이 값이 없으면 동작하지 않습니다.
- source build/deploy의 `styles/` CSL 파일은 CC BY-SA 3.0입니다(`styles/README.md`). Community
설치에는 세 release 파일에 없는 CSL style/locale을 내려받아 cache합니다. plugin 코드는 MIT.
- 0.6.0부터 모바일 설치를 지원하지 않습니다. 자세한 이유는 [docs/MOBILE.md](docs/MOBILE.md).
## 🔒 네트워크와 개인정보
- 문헌 조회·검색 시 필요에 따라 식별자나 검색어를 Crossref, NCBI PubMed/PMC, OpenAlex,
Unpaywall, arXiv에 보냅니다. CSL 스타일/locale은 공식 CSL GitHub 저장소에서 받을 수
있습니다. PDF.js는 plugin에 bundle되며 CDN의 실행 코드를 불러오지 않습니다.
- AI 기능은 선택한 원문과 prompt를 사용자가 설정한 OpenAI 호환 endpoint(OpenRouter,
Gemini 포함), Anthropic 또는 Ollama로 보냅니다. API key는 가능한 경우 Obsidian
SecretStorage에 저장되고, 구버전 Obsidian에서는 plugin `data.json`으로 fallback합니다.
telemetry, 광고, 계정 서비스, 별도 hosted backend는 없습니다.
- *Rerank results with a cross-encoder*(기본 켬)를 쓰면 검색어와 검색된 문단이 OpenRouter rerank
endpoint로 갑니다. *Translate non-English searches*(기본 켬)를 쓰면 비영어 검색어가 번역을 위해
채팅 모델로 갑니다. *Build MeSH synonym list for search*는 라이브러리의 주요 주제 태그를 NCBI
E-utilities로 보냅니다.
- MCP는 인증된 `127.0.0.1`에서만 열립니다. 생성된 bridge는 plugin 폴더에, 짧게 유지되는
discovery 파일은 vault 밖의 운영체제 임시 폴더에 저장됩니다. 둘 다 노트 내용이나 provider
API key를 담지 않습니다. MCP를 켠 동안에만 외부 AI가 vault Markdown을 읽고 변경할 수
있습니다. [MCP 보안 규칙](docs/MCP.ko.md#수정과-삭제의-안전-규칙)을 확인하세요.
- **로컬 프로그램 실행(데스크톱, 선택).** 두 기능은 사용할 때만 이미 설치된 프로그램을 실행합니다.
**Codex CLI / OpenCode CLI** LLM 제공자(프롬프트와 원문이 그 CLI로 가고, CLI가 사용자 로그인으로
자기 제공자에게 보냅니다. 플러그인은 키를 저장하지 않고 CLI의 사용자 설정을 건너뜁니다)와
**Word로 내보내기**(Pandoc을 로컬에서 실행)입니다. 플러그인이 이 프로그램들을 내려받거나 설치하지 않습니다.
- **vault 밖 파일(데스크톱, 선택).** "Keep the search index outside the vault"를 켜면 인덱스를
운영체제 앱 데이터 폴더(`~/Library/Application Support`, `%LOCALAPPDATA%`, `~/.local/share` 아래
`academic-paper-citation-manager/`)에 씁니다. CLI와 Pandoc 호출은 매번 지워지는 임시 폴더를 씁니다.
## 👤 저자
**박상민 교수 (Sang-Min Park, M.D., Ph.D.)**
서울대학교 의과대학 · 분당서울대학교병원 정형외과
(Department of Orthopaedic Surgery, Seoul National University Bundang Hospital,
Seoul National University College of Medicine)
🌐 [sangmin.me](https://sangmin.me/)
## 📄 라이선스
MIT (플러그인 코드). PDF.js의 전체 Apache-2.0 라이선스와 수정 고지는 `main.js`에 유지되며, CSL 스타일/locale은
CC BY-SA 3.0을 유지합니다([THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md)).