Back to the catalog

io.github.rubatoyd/kci-openapi-mcp

KCI (Korea Citation Index) literature & citation search via REST Open API + OAI-PMH

Open source Open in the app JSON README (API)

About

KCI (Korea Citation Index) literature & citation search via REST Open API + OAI-PMH

Details

Kind
MCP servers
Topic
No topic detected
Publisher
rubatoyd
Origin
official
Category
ferramentas
Transport
local
Version
0.3.6
Stars
2
Last push
2026-09-05T07:39:01Z
Repository state
ativo
Language
Python
License
MIT
Added
2026-08-29 04:01:19
Updated
2026-08-29 04:01:19
Origin id
io.github.rubatoyd/kci-openapi-mcp

README

# kci-openapi-mcp

<!-- mcp-name: io.github.rubatoyd/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)

<!-- usage:start -->
> ๐Ÿ“ˆ **์‚ฌ์šฉ๋Ÿ‰** โ€” ์ตœ๊ทผ 14์ผ ์กฐํšŒ **20**ํšŒ(๊ณ ์œ  10) ยท ํด๋ก  **215**ํšŒ(๊ณ ์œ  97) ยท ๋ฆด๋ฆฌ์Šค ์ž์‚ฐ ๋ˆ„์  ๋‹ค์šด๋กœ๋“œ **270**
>
> ![์ผ๋ณ„ ํด๋ก ยท์กฐํšŒ ์ถ”์ด](docs/usage.svg)
>
> <sub>2026-09-05 ์ž๋™ ๊ฐฑ์‹  ยท ์ „์ฒด ์ด๋ ฅ์€ [`docs/usage.csv`](docs/usage.csv). GitHub ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณ„๋Š” 14์ผ ์ฐฝ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด ์ €์žฅ์†Œ๊ฐ€ ๋งค์ผ ์ฐ์–ด ๋ˆ„์ ํ•œ๋‹ค.</sub>
<!-- usage:end -->

ํ•œ๊ตญ์—ฐ๊ตฌ์žฌ๋‹จ(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 ์•ฝ๊ด€์„ ๋”ฐ๋ฅธ๋‹ค.

More