# kci-openapi-mcp [![CI](https://github.com/rubatoyd/KCI_openAPI/actions/workflows/ci.yml/badge.svg)](https://github.com/rubatoyd/KCI_openAPI/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/rubatoyd/KCI_openAPI)](https://github.com/rubatoyd/KCI_openAPI/releases/latest) [![Downloads](https://img.shields.io/github/downloads/rubatoyd/KCI_openAPI/total?label=downloads)](https://github.com/rubatoyd/KCI_openAPI/releases) > ๐Ÿ“ˆ **์‚ฌ์šฉ๋Ÿ‰** โ€” ์ตœ๊ทผ 14์ผ ์กฐํšŒ **0**ํšŒ(๊ณ ์œ  0) ยท ํด๋ก  **0**ํšŒ(๊ณ ์œ  0) ยท ๋ฆด๋ฆฌ์Šค ์ž์‚ฐ ๋ˆ„์  ๋‹ค์šด๋กœ๋“œ **โ€”** > > ![์ผ๋ณ„ ํด๋ก ยท์กฐํšŒ ์ถ”์ด](docs/usage.svg) > > 2026-10-26 ์ž๋™ ๊ฐฑ์‹  ยท ์ „์ฒด ์ด๋ ฅ์€ [`docs/usage.csv`](docs/usage.csv). GitHub ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณ„๋Š” 14์ผ ์ฐฝ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด ์ €์žฅ์†Œ๊ฐ€ ๋งค์ผ ์ฐ์–ด ๋ˆ„์ ํ•œ๋‹ค. ํ•œ๊ตญ์—ฐ๊ตฌ์žฌ๋‹จ(NRF) **KCI(Korea Citation Index)** ๋ฌธํ—Œยท์ธ์šฉ์ง€์ˆ˜ ๊ฒ€์ƒ‰ยท์ˆ˜์ง‘ **MCP ์„œ๋ฒ„ + CLI**. **REST Open API**(ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰)์™€ **OAI-PMH**(๋ฌด์ธ์ฆ ๋Œ€๋Ÿ‰ ์ˆ˜ํ™•)๋ฅผ ํ•จ๊ป˜ ๋‹ค๋ฃฌ๋‹ค. ## ๊ธฐ๋Šฅ - **๋…ผ๋ฌธ ๊ฒ€์ƒ‰ยท์ƒ์„ธ** โ€” ์„œ์ง€ ยท ๊ตญ๋ฌธ/์˜๋ฌธ ์ดˆ๋ก ยท ํ‚ค์›Œ๋“œ ยท ์ €์ž/์†Œ์† - **์ฐธ๊ณ ๋ฌธํ—Œ ์ˆ˜์ง‘** โ€” ์›ํ˜• ํ…์ŠคํŠธ + ํ”ผ์ธ์šฉ ๋…ผ๋ฌธ์˜ KCI ID(`arti_id`) โ†’ ์ธ์šฉ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ - **์ €๋„ ์ธ์šฉ์ง€์ˆ˜** โ€” ์—ฐ๋„๋ณ„ IF ยท ๋“ฑ์žฌ์ด๋ ฅ - **OAI-PMH ๋Œ€๋Ÿ‰ ์ˆ˜ํ™•** โ€” ์ธ์ฆํ‚ค ์—†์ด ์„ธํŠธ + ๋‚ ์งœ๋ฒ”์œ„ ์ „์ˆ˜ ์ˆ˜์ง‘ - **๋‚ด๋ณด๋‚ด๊ธฐ** โ€” xlsx ยท csv ยท json ยท sqlite ## ๋‘ ์ธํ„ฐํŽ˜์ด์Šค | | REST Open API | OAI-PMH | |---|---|---| | ์—”๋“œํฌ์ธํŠธ | `โ€ฆ/po/openapi/openApiSearch.kci` | `โ€ฆ/oai/request` | | ์ธ์ฆ | `KCI_API_KEY` ํ•„์š” | **๋ถˆํ•„์š”** | | ์งˆ์˜ | ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰(`title` ํ•„์ˆ˜) | ์„ธํŠธ + ๋‚ ์งœ๋ฒ”์œ„ ์ˆ˜ํ™• | | ์ธ์šฉ์ง€์ˆ˜ยท์ฐธ๊ณ ๋ฌธํ—Œ | โœ… | โŒ | ๊ทœ๊ฒฉ: [docs/KCI_API_GUIDE.md](docs/KCI_API_GUIDE.md) ยท [docs/KCI_OAI_PMH_GUIDE.md](docs/KCI_OAI_PMH_GUIDE.md) ยท ์„ค๊ณ„: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) ## ์ธ์ฆํ‚ค ์—†์ด ๋ฐ”๋กœ ์จ๋ณด๊ธฐ REST ๊ฒ€์ƒ‰๋งŒ ์ธ์ฆํ‚ค๊ฐ€ ํ•„์š”ํ•˜๊ณ , OAI-PMH ์ˆ˜ํ™•์€ ํ‚ค ์—†์ด ๋™์ž‘ํ•œ๋‹ค. ```bash uvx --from git+https://github.com/rubatoyd/KCI_openAPI kci identify ``` ```bash uvx --from git+https://github.com/rubatoyd/KCI_openAPI kci harvest --set ARTI --from 2024-01-01 --until 2024-03-31 --contains ํ•™๋ถ€๋ชจ --max 200 ``` MCP ๋กœ ๋ถ™์˜€๋‹ค๋ฉด `kci_status` โ†’ `kci_harvest` ์ˆœ์œผ๋กœ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ํ‚ค๊ฐ€ ์—†์œผ๋ฉด REST ๋„๊ตฌ๋Š” ์˜ค๋ฅ˜ ๋Œ€์‹  OAI ๋Œ€์•ˆ์„ ์•ˆ๋‚ดํ•œ๋‹ค. ## ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰ REST ๋„๊ตฌ(`kci_search` ยท `kci_detail` ยท `kci_references` ยท `kci_journal_citation`)์—๋งŒ ํ•„์š”ํ•˜๋‹ค. 1. [open.kci.go.kr](https://open.kci.go.kr) ์—์„œ **Open API ์ด์šฉ ์‹ ์ฒญ** 2. ๋ฐœ๊ธ‰๋œ ์ธ์ฆํ‚ค ๋ฌธ์ž์—ด 1๊ฐœ๋ฅผ ๋ฐ›๋Š”๋‹ค 3. ์•„๋ž˜ ์ค‘ ํ•œ ๊ณณ์— ๋„ฃ๋Š”๋‹ค โ€” ์ฝ”๋“œ๋‚˜ ์ปค๋ฐ‹์—๋Š” ๋„ฃ์ง€ ์•Š๋Š”๋‹ค | ์‚ฌ์šฉ ํ™˜๊ฒฝ | ๋„ฃ๋Š” ๊ณณ | |---|---| | Claude Code | `.claude/settings.local.json` ์˜ `env` (gitignore ๋Œ€์ƒ) | | Claude Desktop | `claude_desktop_config.json` ์˜ `env` โ€” ํ‰๋ฌธ ์ธ๋ผ์ธ(`${VAR}` ํ™•์žฅ ์•ˆ ๋จ) | | `.mcpb` ์„ค์น˜ | ์„ค์น˜ ์ฐฝ์˜ ์ž…๋ ฅ๋ž€ | | CLI / ๋กœ์ปฌ ๊ฐœ๋ฐœ | `.env`(gitignore) ๋˜๋Š” OS ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ๋ณ€์ˆ˜ | AES ์•”ํ˜ธํ™”ยทํ† ํฐ ๋ฐœ๊ธ‰ยท๊ณต์ธ IP ๋“ฑ๋ก์€ ๋ถˆํ•„์š”ํ•˜๋‹ค. ํ‰๋ฌธ `key` ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ•˜๋‚˜๋กœ ํ˜ธ์ถœํ•œ๋‹ค. ## ์„ค์น˜ ### Claude Desktop **์ž์ฒด์™„๊ฒฐ `.mcpb`(๊ถŒ์žฅ)** โ€” Pythonยทuv ๋ถˆํ•„์š”. [๋ฆด๋ฆฌ์Šค](https://github.com/rubatoyd/KCI_openAPI/releases/latest)์—์„œ OS์— ๋งž๋Š” ํŒŒ์ผ์„ ๋ฐ›์•„ ๋”๋ธ”ํด๋ฆญ(๋˜๋Š” Settings โ†’ Extensions โ†’ Install) โ†’ `KCI_API_KEY` ์ž…๋ ฅ(์„ ํƒ). | ์ž์‚ฐ | ํŠน์ง• | |---|---| | `kci-openapi-mcp-win-x64.mcpb` / `โ€ฆ-macos-arm64.mcpb` / `โ€ฆ-linux-x64.mcpb` | ์ž์ฒด์™„๊ฒฐ โ€” ์‚ฌ์ „ ์„ค์น˜๋ฌผ ์—†์Œ | | `kci-openapi-mcp.mcpb` | ๊ฒฝ๋Ÿ‰. ์‹คํ–‰์— `uv` ํ•„์š” | **์ˆ˜๋™ config** โ€” `%APPDATA%/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "kci": { "command": "uvx", "args": ["--from", "git+https://github.com/rubatoyd/KCI_openAPI", "kci-mcp"], "env": { "KCI_API_KEY": "<๋ฐœ๊ธ‰ํ‚ค ๋˜๋Š” ๋น„์›€>", "KCI_OS_TRUST": "1" } } } } ``` ### Claude Code ```bash claude mcp add kci --env KCI_API_KEY=$KCI_API_KEY -- uvx --from git+https://github.com/rubatoyd/KCI_openAPI kci-mcp ``` ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `.mcp.json` ๋„ ์ž๋™ ์ธ์‹๋œ๋‹ค. ### ๋‹ค๋ฅธ MCP ํด๋ผ์ด์–ธํŠธ ํ‘œ์ค€ stdio MCP ์„œ๋ฒ„์ด๋ฏ€๋กœ MCP ๋ฅผ ์ง€์›ํ•˜๋Š” ์—์ด์ „ํŠธ๋ฉด ๊ทธ๋Œ€๋กœ ๋ถ™๋Š”๋‹ค โ€” Cursor ยท Windsurf ยท Cline ยท Zed ยท VS Code Copilot(agent mode) ยท OpenAI Agents SDK ยท ์ž์ฒด ํด๋ผ์ด์–ธํŠธ ๋“ฑ. ์œ„ `command`/`args`/`env` 3์š”์†Œ๋ฅผ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์„ค์ •์— ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค. ```python from mcp import StdioServerParameters params = StdioServerParameters( command="uvx", args=["--from", "git+https://github.com/rubatoyd/KCI_openAPI", "kci-mcp"], env={"KCI_API_KEY": "..."}, # ๋น„์šฐ๋ฉด OAI ๋ฌด์ธ์ฆ ๋„๊ตฌ๋งŒ ) ``` ### ์ „์†ก ๋ฐฉ์‹ ```bash kci-mcp # stdio (๊ธฐ๋ณธ) kci-mcp --transport streamable-http # http://127.0.0.1:8000/mcp kci-mcp --transport sse --port 9000 # http://127.0.0.1:9000/sse ``` ํ™˜๊ฒฝ๋ณ€์ˆ˜: `KCI_MCP_TRANSPORT` ยท `KCI_MCP_HOST` ยท `KCI_MCP_PORT`. ## MCP ๋„๊ตฌ | ๋„๊ตฌ | ํ•˜๋Š” ์ผ | |---|---| | `kci_status` | ์—ฐ๊ฒฐ ์ ๊ฒ€ โ€” OAI Identify + ์ธ์ฆํ‚ค ๋ณด์œ  ์—ฌ๋ถ€ | | `kci_search` | ๋…ผ๋ฌธ ๊ฒ€์ƒ‰ โ€” `title` ํ•„์ˆ˜ + author/journal/keyword/abstract/doi/๋ฐœํ–‰์—ฐ์›”/institution ํ•„ํ„ฐ, ์ •๋ ฌ | | `kci_detail` | Control Number(`ARTโ€ฆ`)๋กœ ์ƒ์„ธ โ€” ํ‚ค์›Œ๋“œยทISSNยท์ €์ž์†Œ์†ยท**์ฐธ๊ณ ๋ฌธํ—Œ**์˜ ์œ ์ผํ•œ ์ถœ์ฒ˜ | | `kci_references` | ์ œ๋ชฉ ๊ฒ€์ƒ‰์–ด์— ๋งค์นญ๋œ ๋…ผ๋ฌธ๋“ค์˜ ์ฐธ๊ณ ๋ฌธํ—Œ ์›ํ˜• | | `kci_journal_citation` | ์ €๋„ ์ธ์šฉ์ง€์ˆ˜ โ€” ์—ฐ๋„ ๋ชฉ๋ก / `journal_id` ์ƒ์„ธ(๋“ฑ์žฌ์ด๋ ฅยท์—ฐ๋„๋ณ„ IF) | | `kci_harvest` | OAI-PMH ๋ฌด์ธ์ฆ ๋Œ€๋Ÿ‰ ์ˆ˜ํ™• โ€” ์„ธํŠธ + ๋‚ ์งœ๋ฒ”์œ„, `contains` ๋กœ์ปฌ ํ•„ํ„ฐ | | `kci_collect` | ๋ผ์šฐํ„ฐ โ€” ํ‚ค ์œ ๋ฌดยท์š”์ฒญ ์„ฑ๊ฒฉ์œผ๋กœ RESTโ†”OAI ์ž๋™ ์„ ํƒ ํ›„ ํŒŒ์ผ ์ €์žฅ | ## ์•Œ์•„๋‘˜ ์ œํ•œ **`articleSearch` ๋Š” ํ‚ค์›Œ๋“œยทISSNยทUCI ๋ฅผ ์‘๋‹ต์— ์‹ฃ์ง€ ์•Š๋Š”๋‹ค.** `keyword=` ๋กœ ๊ฒ€์ƒ‰์€ ๋˜์ง€๋งŒ ๊ฒฐ๊ณผ์—๋Š” ์—†๋‹ค. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ๋นˆ `keywords` ๋Š” 'ํ‚ค์›Œ๋“œ ์—†๋Š” ๋…ผ๋ฌธ'์ด ์•„๋‹ˆ๋‹ค โ€” ํ•„์š”ํ•˜๋ฉด `kci_detail` ๋กœ ๊ฑด๋ณ„ ๋ณด๊ฐ•ํ•œ๋‹ค. **`kci_collect` ์˜ REST ๊ฒฝ๋กœ๋Š” ์ œ๋ชฉ์ถ• โˆช ํ‚ค์›Œ๋“œ์ถ•์ด๋‹ค.** ๊ฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ๋‘ ์ถ•์œผ๋กœ ์กฐํšŒํ•ด ํ•ฉ์ง‘ํ•ฉ์„ ๋งŒ๋“ ๋‹ค. ๊ฒฐ๊ณผ๋Š” '์ œ๋ชฉ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ'๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ฝ”ํผ์Šค ๊ฒฝ๊ณ„๋ฅผ ๊ธฐ์ˆ ํ•  ๋•Œ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. `meta.axes` ์— ์ถ•๋ณ„ `total` ์ด ๋‹ด๊ธด๋‹ค. **์ฐธ๊ณ ๋ฌธํ—Œ์˜ `arti_id` ๋Š” KCI ๋“ฑ์žฌ๋ถ„์—๋งŒ ๋ถ™๋Š”๋‹ค.** ๋‹จํ–‰๋ณธยท๋ณด๊ณ ์„œยทํ•ด์™ธ๋ฌธํ—Œ์€ ๋นˆ ๋ฌธ์ž์—ด์ด๋‹ค. ์ธ์šฉ ๋„คํŠธ์›Œํฌ๋Š” ์ด ID ๊ฐ€ ์žˆ๋Š” ํ•ญ๋ชฉ์œผ๋กœ๋งŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค(`references_linked_count` ๋กœ ํ™•์ธ). **`referenceSearch` ๋Š” ํŽ˜์ด์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์–ด 1ํšŒ 100๊ฑด์ด ์ƒํ•œ์ด๋‹ค.** ๋ถ€์กฑํ•œ ์ด์œ ๊ฐ€ ๋‘˜์ด๊ณ  ์ฒ˜๋ฐฉ์ด ์ •๋ฐ˜๋Œ€์ด๋ฏ€๋กœ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. | ์ƒํ™ฉ | ์ฒ˜๋ฐฉ | |---|---| | `total > 100` โ€” API ๊ฐ€ ๋” ์ค„ ์ˆ˜ ์—†๋‹ค | `sort_dir` ๋ฅผ ๋’ค์ง‘์–ด(ascโ†”desc) ๋ฐ˜๋Œ€์ชฝ์„ ๋ฐ›์•„ ํ•ฉ์ง‘ํ•ฉ | | `total โ‰ค 100` ์ธ๋ฐ `rows` ๋กœ ์ž˜๋ ธ๋‹ค | `rows` ๋ฅผ `total` ์ด์ƒ์œผ๋กœ ์˜ฌ๋ฆฐ๋‹ค (์ •๋ ฌ ๋ฐ˜์ „์€ ๊ฐ™์€ ๋ ˆ์ฝ”๋“œ๋งŒ ๋‹ค์‹œ ์˜จ๋‹ค) | **KCI ๊ฐ€ ๋ณด๊ณ ํ•˜๋Š” `total` ์€ ์‹ค์ œ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฑด์ˆ˜๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๋‹ค.** ๊ทธ๋ž˜์„œ ๋‘ ์ƒํ™ฉ์„ ๋‹ค๋ฅธ ํ”Œ๋ž˜๊ทธ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. | ํ”Œ๋ž˜๊ทธ | ๋œป | ๋Œ€์ฒ˜ | |---|---|---| | `truncated` | `max_records` ์ƒํ•œ์— ๊ฑธ๋ ธ๋‹ค | ์ƒํ•œ์„ ์˜ฌ๋ ค ์žฌ์ˆ˜์ง‘ํ•˜๋ฉด ๋Š˜์–ด๋‚œ๋‹ค | | `total_mismatch` | ๋๊นŒ์ง€ ํŽ˜์ด์ง•ํ–ˆ๋Š”๋ฐ `total` ์— ๋ชป ๋ฏธ์ณค๋‹ค | ์ƒํ•œ์„ ์˜ฌ๋ ค๋„ ๋Š˜์ง€ ์•Š๋Š”๋‹ค. ํšŒ์ˆ˜๋Ÿ‰์„ ํ™•์ • ์ˆ˜์น˜๋กœ ์“ด๋‹ค | **๋‹ค์ค‘ ํŽ˜์ด์ง€ ์งˆ์˜๋Š” ํ˜ธ์ถœ๋งˆ๋‹ค ๊ฒฐ๊ณผ๊ฐ€ ๋ฏธ์„ธํ•˜๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.** ๋‹จ์ผ ํŽ˜์ด์ง€ ์งˆ์˜๋Š” ์•ˆ์ •์ ์ด๋‹ค. `total` ์— ๋ชป ๋ฏธ์น˜๊ณ  ์ƒํ•œ๋„ ์•„๋‹ˆ๋ฉด ํ•œ ๋ฒˆ ๋” ํ›‘์–ด ํ•ฉ์ง‘ํ•ฉ์„ ์ทจํ•œ๋‹ค(`meta.sweeps` ๊ฐ€ 1๋ณด๋‹ค ํฌ๋ฉด ๋ณด์ •๋œ ๊ฒƒ, ์ˆ˜์ง‘ ์ „์ฒด๋Š” `meta.sweeps_total`). ๋ณด์ •์ด ๊ฑธ๋ฆฐ ์ถ•์€ ์ „์ฒด๋ฅผ ์žฌํŽ˜์ด์ง•ํ•˜๋ฏ€๋กœ ๊ทธ๋งŒํผ ์š”์ฒญ์ด ๋Š˜์–ด๋‚œ๋‹ค. ๋Œ€๊ทœ๋ชจ ์ˆ˜์ง‘์—์„œ ๋ถ€๋‹ด๋˜๋ฉด `kci_collect` ์˜ `retry_incomplete=0` ์œผ๋กœ ๋ˆ๋‹ค โ€” ๋Œ€์‹  ๊ฒฐ์†์ด ๋‚จ๊ณ  `total_mismatch` ๋กœ๋งŒ ํ‘œ์‹œ๋œ๋‹ค. **์ถœ๋ ฅ ํŒŒ์ผ๋ช…์€ ์ •๊ทœํ™”๋œ๋‹ค.** `name` ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒ€์ƒ‰์–ด๊ฐ€ ๊ทธ๋Œ€๋กœ ํŒŒ์ผ๋ช…์ด ๋˜๋ฏ€๋กœ, ๊ฒฝ๋กœ ๊ตฌ๋ถ„์žยท`..`ยท์œˆ๋„ ๊ธˆ์ง€๋ฌธ์ž๋Š” ์ œ๊ฑฐ๋˜๊ณ  ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ `out_dir` ์•ˆ์—๋งŒ ์ €์žฅ๋œ๋‹ค. ํ•œ๊ธ€ ํŒŒ์ผ๋ช…์€ ๊ทธ๋Œ€๋กœ ๋ณด์กด๋œ๋‹ค. **์ •๋ ฌ ์ธ์ž๋Š” ์ „์†ก ์ „์— ๊ฒ€์ฆํ•œ๋‹ค.** `sort_by` ๋Š” `title`/`author`/`pubiYr`, `sort_dir` ์€ `asc`/`desc`. ํ—ˆ์šฉ๊ฐ’ ๋ฐ–์ด๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋Œ๋ ค์ค€๋‹ค. **Claude ์•ฑ ์•ˆ์—์„œ ๊ฒ€์ƒ‰ํ•ด ์„ค์น˜ํ•  ์ˆ˜๋Š” ์—†๋‹ค.** ๊ณต์‹ MCP ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“ฑ์žฌ์™€ Claude Desktop ์ธ์•ฑ ์ปค๋„ฅํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๋ณ„๊ฐœ์ด๊ณ  ์ž๋™ ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. ์œ„ ์„ค์น˜ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์“ด๋‹ค. **๋„๊ตฌ ์„ค๋ช…์ด ํ•œ๊ตญ์–ด๋‹ค.** ํ•œ๊ตญ์–ด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ชจ๋ธ์ด์–ด์•ผ ๋„๊ตฌ ์„ ํƒ์ด ์ •ํ™•ํ•˜๋‹ค. **`mcp` SDK ๋Š” 1.x ๋กœ ๊ณ ์ •๋œ๋‹ค**(`mcp>=1.2.0,<2`). 2.0 ์—์„œ `mcp.server.fastmcp` ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์ƒํ•œ์ด ์—†์œผ๋ฉด ๊ธฐ๋™์— ์‹คํŒจํ•œ๋‹ค. ## CLI ```bash kci identify # OAI ๋ฌด์ธ์ฆ โ€” ํ‚ค ์—†์ด ์ฆ‰์‹œ kci harvest --set ARTI --from 2024-01-01 --until 2024-12-31 --contains ํ•™๋ถ€๋ชจ --max 500 kci search --title ๊ฒฝ๊ณ„์„ ์ง€๋Šฅ --rows 20 # REST(์ธ์ฆํ‚ค ํ•„์š”) kci collect --config config/borderline_slow.yaml ``` ๋กœ์ปฌ ๊ฐœ๋ฐœ์€ `uv sync`. ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ํด๋”(OneDrive ๋“ฑ)๋ผ๋ฉด venv ๋ฅผ ํด๋” ๋ฐ–์— ๋‘๊ธฐ๋ฅผ ๊ถŒํ•œ๋‹ค (`UV_PROJECT_ENVIRONMENT`). ## ๋„คํŠธ์›Œํฌ - KCI ๋ฐฉํ™”๋ฒฝ์€ **User-Agent ํ•„ํ„ฐ**๋ฅผ ๊ฑด๋‹ค. `curl` ๊ธฐ๋ณธ UA ๋Š” ์ฐจ๋‹จ ์•ˆ๋‚ดํŽ˜์ด์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค. ๋ณธ ์„œ๋ฒ„๋Š” `requests` ๋กœ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค. - ๊ต์œก๋งยท์‚ฌ๋‚ด๋ง **SSL ์ธํ„ฐ์…‰์…˜** ํ™˜๊ฒฝ์—์„œ๋Š” `truststore` ๋กœ OS ์‹ ๋ขฐ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ํ†ต๊ณผํ•œ๋‹ค (TLS ๊ฒ€์ฆ์„ ๋„์ง€ ์•Š๋Š”๋‹ค). ๋น„ํ™œ์„ฑ์€ `KCI_OS_TRUST=0`. - HTTP ์ „์†ก์—๋Š” ์ธ์ฆ์ด ์—†๋‹ค. ๊ธฐ๋ณธ ๋ฐ”์ธ๋“œ๋Š” ๋ฃจํ”„๋ฐฑ(`127.0.0.1`)์ด๋‹ค. `--host 0.0.0.0` ์œผ๋กœ ์™ธ๋ถ€์— ์—ด๋ฉด ์ธ์ฆํ‚ค๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ์‹ ๋ขฐ๋œ ๋ง์—์„œ๋งŒ ์“ด๋‹ค. ## ๋ผ์ด์„ ์Šค MIT. ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ํ•œ๊ตญ์—ฐ๊ตฌ์žฌ๋‹จ์˜ ๋น„๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์ด๋ฉฐ ์ œํœด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค. KCI ๋ฐ์ดํ„ฐ ์ด์šฉ์€ KCI ์•ฝ๊ด€์„ ๋”ฐ๋ฅธ๋‹ค.