io.github.rubatoyd/scienceon-mcp
KISTI ScienceON OpenAPI literature search & metadata collection (MCP server + CLI)
Open source Open in the app JSON README (API)
About
KISTI ScienceON OpenAPI literature search & metadata collection (MCP server + CLI)
Details
- Kind
- MCP servers
- Topic
- Developer tools
- Publisher
- rubatoyd
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.5.1
- Last push
- 2026-09-05T07:43: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/scienceon-mcp
README
# scienceON-mcp
<!-- mcp-name: io.github.rubatoyd/scienceon-mcp -->
[](https://github.com/rubatoyd/scienceON-mcp/actions/workflows/ci.yml)
[](https://github.com/rubatoyd/scienceON-mcp/releases/latest)
[](https://github.com/rubatoyd/scienceON-mcp/releases)
<!-- usage:start -->
> ๐ **์ฌ์ฉ๋** โ ์ต๊ทผ 14์ผ ์กฐํ **6**ํ(๊ณ ์ 3) ยท ํด๋ก **144**ํ(๊ณ ์ 79) ยท ๋ฆด๋ฆฌ์ค ์์ฐ ๋์ ๋ค์ด๋ก๋ **111**
>
> 
>
> <sub>2026-09-05 ์๋ ๊ฐฑ์ ยท ์ ์ฒด ์ด๋ ฅ์ [`docs/usage.csv`](docs/usage.csv). GitHub ํธ๋ํฝ ํต๊ณ๋ 14์ผ ์ฐฝ๋ง ์ ๊ณตํ๋ฏ๋ก ์ด ์ ์ฅ์๊ฐ ๋งค์ผ ์ฐ์ด ๋์ ํ๋ค.</sub>
<!-- usage:end -->
KISTI **ScienceON OpenAPI** ๋ฌธํ ๊ฒ์ยท๋ฉํ๋ฐ์ดํฐ ์์ง๊ธฐ โ **MCP ์๋ฒ + CLI**.
์๊ธฐ ScienceON API ํค๋ง ๋ฐ๊ธ๋ฐ์ผ๋ฉด Claude(๋๋ CLI)์์ ๊ตญ๋ด์ธ ๋
ผ๋ฌธยท๋ณด๊ณ ์ ์์ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ
๊ฒ์ยท์์งํ ์ ์๋ค.
> An MCP server + CLI for KISTI ScienceON OpenAPI. Bring your own API key and let
> Claude search & collect academic literature metadata in any project.
## ๊ธฐ๋ฅ
- **๊ฒ์** โ ๋
ผ๋ฌธ(ARTI)ยท๋ณด๊ณ ์(REPORT) ๋ฑ ์์ง ๋ฉํ๋ฐ์ดํฐ. ๋ค์ค์ฟผ๋ฆฌ ํฉ์งํฉ ยท ์์ผ๋์นด๋(`*`) ยท
์ฐ๋๋ฒ์ ยท `contains`/`lang` ํ์ฒ๋ฆฌ ํํฐ
- **์์ธ** โ ์ ์ด๋ฒํธ(CN)๋ก ์ด๋กยท์์ง ์ ์ฒด
- **๋ค์ค๊ทธ๋ฃน ์์ง** โ ๊ทธ๋ฃน๋ง๋ค ๋ค๋ฅธ ๊ฒ์ ์ ๋ต์ ๊ฑธ์ด ํ ์ฝํผ์ค๋ก ํฉ์นจ
- **๋ด๋ณด๋ด๊ธฐ** โ xlsx ยท csv ยท json ยท sqlite
- **๋ ๊ฐ์ง ์ฌ์ฉ๋ฒ** โ Claude ์์ ๋๊ตฌ ํธ์ถ(MCP) ยท ํฐ๋ฏธ๋ ๋ฐฐ์น(CLI), ๊ฐ์ ์ฝ์ด ๊ณต์
์ง์ ํฐ์ผ: `ARTI` ๋
ผ๋ฌธ ยท `REPORT` ๋ณด๊ณ ์ ยท `ATT` ๋ํฅ ยท `RESEARCHER` ์ฐ๊ตฌ์ ยท `ORGAN` ์ฐ๊ตฌ๊ธฐ๊ด
(๊ณ์ ๊ตฌ๋
๋ฒ์์ ๋ฐ๋ฆ)
## API ํค ๋ฐ๊ธ
1. [ScienceON](https://scienceon.kisti.re.kr) ํ์๊ฐ์
ยท๋ก๊ทธ์ธ
2. **API Gateway โ ์ธ์ฆํค ๋ฐ๊ธ ์ ์ฒญ** โ ์น์ธ ํ `์ธ์ฆํค`ยท`Client ID` ๋ฐ๊ธ
3. **์ธ์ฆํค๊ด๋ฆฌ**์์ ์ ์ฒญ **MAC ์ฃผ์** ๋ฑ๋ก, **IP๊ด๋ฆฌ**์์ ํธ์ถ PC ์ ๊ณต์ธ IP ๋ฑ๋ก
4. ์ฌ์ฉํ **์๋น์ค ์ฝํ
์ธ (ํฐ์ผ)** ์ฒดํฌ
์๊ฒฉ์ฆ๋ช
์ MCP ์ค์ ์ `env` ๋ธ๋ก ๋๋ `.env`(`.env.example` ๋ณต์ฌ)๋ก ์ ๋ฌํ๋ค. ์ฝ๋ยท์ปค๋ฐยท๋ก๊ทธ์๋
๋ฃ์ง ์๋๋ค.
## ์ค์น
### Claude Desktop
**`.mcpb` ์ํด๋ฆญ** โ [๋ฆด๋ฆฌ์ค](https://github.com/rubatoyd/scienceON-mcp/releases/latest)์์ ๋ฐ์
๋๋ธํด๋ฆญ/๋๋๊ทธ โ ์ค์น ์ฐฝ์์ ์ธ์ฆํคยทClient IDยทMAC ์
๋ ฅ.
| ์์ฐ | ํน์ง |
|---|---|
| `scienceon-mcp-win-x64.mcpb` / `โฆ-macos-arm64.mcpb` / `โฆ-linux-x64.mcpb` | ์์ฒด์๊ฒฐ โ Pythonยทuv ๋ถํ์ |
| `scienceon-mcp.mcpb` | ๊ฒฝ๋. ์คํ์ `uv` ํ์ |
**์๋ config** โ `claude_desktop_config.json`:
```json
{
"mcpServers": {
"scienceon": {
"command": "uvx",
"args": ["--from", "git+https://github.com/rubatoyd/scienceON-mcp", "scienceon-mcp"],
"env": {
"SCIENCEON_AUTH_KEY": "๋ฐ๊ธ_32์๋ฆฌ_์ธ์ฆํค",
"SCIENCEON_CLIENT_ID": "๋ฐ๊ธ_client_id",
"SCIENCEON_MAC_ADDRESS": "AA-BB-CC-DD-EE-FF"
}
}
}
}
```
### Claude Code
```bash
claude mcp add scienceon -- uvx --from "git+https://github.com/rubatoyd/scienceON-mcp" scienceon-mcp
```
์ฒซ ์คํ ์ ๋น๋(์ ์ด), ์ดํ ์บ์. ์ต์ ๋ฐ์์ `uvx --refresh โฆ`.
### ๋ค๋ฅธ MCP ํด๋ผ์ด์ธํธ
ํ์ค stdio MCP ์๋ฒ์ด๋ฏ๋ก MCP ๋ฅผ ์ง์ํ๋ ์์ด์ ํธ๋ฉด ๊ทธ๋๋ก ๋ถ๋๋ค โ Cursor ยท Windsurf ยท Cline ยท
Zed ยท VS Code Copilot(agent mode) ยท OpenAI Agents SDK ยท ์์ฒด ํด๋ผ์ด์ธํธ ๋ฑ. ์ `command`/`args`/`env`
3์์๋ฅผ ๊ฐ ํด๋ผ์ด์ธํธ ์ค์ ์ ์ฎ๊ธฐ๋ฉด ๋๋ค.
### ์ ์ก ๋ฐฉ์
```bash
scienceon-mcp # stdio (๊ธฐ๋ณธ)
scienceon-mcp --transport streamable-http # http://127.0.0.1:8000/mcp
scienceon-mcp --transport sse --port 9000 # http://127.0.0.1:9000/sse
```
ํ๊ฒฝ๋ณ์: `SCIENCEON_MCP_TRANSPORT` ยท `SCIENCEON_MCP_HOST` ยท `SCIENCEON_MCP_PORT`.
## MCP ๋๊ตฌ
| ๋๊ตฌ | ํ๋ ์ผ |
|---|---|
| `scienceON_status` | ์ฐ๊ฒฐ/ํ ํฐ ์ ๊ฒ (+๊ณต์ธ IP โ E4006 ์ง๋จ์ฉ) |
| `scienceON_search` | ๋ฌธํ ๊ฒ์ โ ๋ค์ค์ฟผ๋ฆฌ ยท ์์ผ๋์นด๋ ยท ์ฐ๋๋ฒ์ ยท `contains` ยท `lang` |
| `scienceON_detail` | ์ ์ด๋ฒํธ(CN)๋ก ์ด๋กยท์์ง ์ ์ฒด |
| `scienceON_export` | ๋๋ ์์ง โ xlsx/csv/json/sqlite ์ ์ฅ |
| `scienceON_collect_groups` | ๋ค์ค ๊ฒ์๊ทธ๋ฃน์ ํ ์ฝํผ์ค๋ก ํฉ์ณ ์์ง |
### ๋ค์ค๊ทธ๋ฃน ์์ง
๋จ์ผ ๊ฒ์์ด๋ก๋ ๋ง๋ค ์ ์๋ ์ฝํผ์ค๊ฐ ์๋ค. ๋ณ๋ณ๋ ฅ ์๋ ๋จ์ด๋ ์ ์ฒด(BI)๋ก ๊ทธ๋๋ก ๊ฒ์ํ๊ณ ,
์์ธ์ด ์ ๋๋ ํ ํฐ์ ์ ๋ชฉ(TI) ์์ผ๋์นด๋ + `contains` ํ์ฒ๋ฆฌ๋ก ์ ๋ฐํํ๋ ์์ผ๋ก ๊ทธ๋ฃน๋ง๋ค ๋ค๋ฅธ
์ ๋ต์ ๊ฑธ์ด ํฉ์งํฉ์ ๋ง๋ ๋ค.
```jsonc
[
{ "field": "BI", "terms": ["๊ฒฝ๊ณ์ ์ง๋ฅ", "๊ฒฝ๊ณ์ ์ง๋ฅ"] },
{ "field": "TI", "terms": ["๋๋ฆฐ*"], "contains": ["๋๋ฆฐํ์ต์", "๋๋ฆฐ ํ์ต์"] }
]
```
๊ทธ๋ฃน ํค: `field`(BI/TI/AB/AU/KW) ยท `terms` ยท `contains` ยท `lang` ยท `max`.
`save: false` ๋ก ๋ถ๋ฅด๋ฉด ์ ์ฅ ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋ค(์๋ต์๋ ์ 100๊ฑด๋ง).
## ์์๋ ์ ํ
**์์ง๋์ด `max_records` ์ ์ ํํ ์ผ์นํ๋ฉด ๊ฑฐ์ ํญ์ ์ ๋จ๋ ๊ฒ์ด๋ค.** ์์ง ๋๊ตฌ๋ `total` ๊ณผ
ํ๋๊ทธ๋ฅผ ํจ๊ป ๋ฐํํ๋ฏ๋ก ์ ๋จ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค. ์ ๋จ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ ์ฝํผ์ค๋ก ์ค์ธํ๋ฉด
ํ์ ๋ถ์์ด ํต์งธ๋ก ๋ฌดํจ๊ฐ ๋๋ค.
**ScienceON ์ด ๋ณด๊ณ ํ๋ `total` ์ ์ค์ ๋ก ๋ฐ์ ์ ์๋ ๊ฑด์๋ณด๋ค ํด ์ ์๋ค.** ๊ทธ๋์ ๋ ์ํฉ์
๋ค๋ฅธ ํ๋๊ทธ๋ก ๊ตฌ๋ถํ๋ค.
| ํ๋๊ทธ | ๋ป | ๋์ฒ |
|---|---|---|
| `truncated` | `max_records` ์ํ์ ๊ฑธ๋ ธ๋ค | ์ํ์ ์ฌ๋ ค ์ฌ์์งํ๋ฉด ๋์ด๋๋ค |
| `total_mismatch` | ๋๊น์ง ํ์ด์งํ๋๋ฐ `total` ์ ๋ชป ๋ฏธ์ณค๋ค | ์ํ์ ์ฌ๋ ค๋ ๋์ง ์๋๋ค. ํ์๋์ ํ์ ์์น๋ก ์ด๋ค |
`meta.union_upper_bound` ๋ ์คํํ ๊ฒ์์ถ๋ค์ `total` ํฉ, ์ฆ ํฉ์งํฉ์ ์ํ์ด๋ค(์ค๋ณต ๋ฏธ๋ณด์ ).
**๋ค์ค ํ์ด์ง ์ง์๋ ํธ์ถ๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ฏธ์ธํ๊ฒ ๋ฌ๋ผ์ง๋ค.** ๋จ์ผ ํ์ด์ง ์ง์๋ ์์ ์ ์ด๋ค.
`total` ์ ๋ชป ๋ฏธ์น๊ณ ์ํ๋ ์๋๋ฉด ํ ๋ฒ ๋ ํ์ด ํฉ์งํฉ์ ์ทจํ๋ค(`meta.sweeps` ๊ฐ 1๋ณด๋ค ํฌ๋ฉด
๋ณด์ ๋ ๊ฒ).
๋ณด์ ์ด ๊ฑธ๋ฆฐ ์ถ์ ์ ์ฒด๋ฅผ ์ฌํ์ด์งํ๋ฏ๋ก ๊ทธ๋งํผ ์์ฒญ์ด ๋์ด๋๋ค. ๋๊ท๋ชจ ์์ง์์ ๋ถ๋ด๋๋ฉด
`scienceON_search` ยท `scienceON_export` ยท `scienceON_collect_groups` ์ `retry_incomplete=0`
์ผ๋ก ๋๋ค โ ๋์ ๊ฒฐ์์ด ๋จ๊ณ `total_mismatch` ๋ก๋ง ํ์๋๋ค.
**์ถ๋ ฅ ํ์ผ๋ช
์ ์ ๊ทํ๋๋ค.** `name` ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ฒ์์ด๊ฐ ๊ทธ๋๋ก ํ์ผ๋ช
์ด ๋๋ฏ๋ก,
๊ฒฝ๋ก ๊ตฌ๋ถ์ยท`..`ยท์๋ ๊ธ์ง๋ฌธ์๋ ์ ๊ฑฐ๋๊ณ ๊ฒฐ๊ณผ๋ ํญ์ `out_dir` ์์๋ง ์ ์ฅ๋๋ค.
ํ๊ธ ํ์ผ๋ช
์ ๊ทธ๋๋ก ๋ณด์กด๋๋ค.
**์๋ฒ์ธก ํ์ดํ OR(`|`)๋ ์ฐ์ง ์๋๋ค.** ๊ณต๋ฐฑ์ด ๋ ์ฉ์ด์์ ํ ํฐ์ด ๋ถ๋ฆฌ๋ผ ๊ณผ๋๋งค์นญ๋๋ฏ๋ก,
์ฉ์ด๋ณ ๊ฐ๋ณ ๊ฒ์ ํ CN ํฉ์งํฉ์ ์ทจํ๋ค.
**Claude ์ฑ ์์์ ๊ฒ์ํด ์ค์นํ ์๋ ์๋ค.** ๊ณต์ MCP ๋ ์ง์คํธ๋ฆฌ ๋ฑ์ฌ์ Claude Desktop ์ธ์ฑ
์ปค๋ฅํฐ ๋๋ ํฐ๋ฆฌ๋ ๋ณ๊ฐ์ด๊ณ ์๋ ๋๊ธฐํ๋์ง ์๋๋ค.
**๋๊ตฌ ์ค๋ช
์ด ํ๊ตญ์ด๋ค.** ํ๊ตญ์ด๋ฅผ ๋ค๋ฃจ๋ ๋ชจ๋ธ์ด์ด์ผ ๋๊ตฌ ์ ํ์ด ์ ํํ๋ค.
**`mcp` SDK ๋ 1.x ๋ก ๊ณ ์ ๋๋ค**(`mcp>=1.2.0,<2`). 2.0 ์์ `mcp.server.fastmcp` ๊ฐ ์ ๊ฑฐ๋์ด
์ํ์ด ์์ผ๋ฉด ๊ธฐ๋์ ์คํจํ๋ค.
## CLI
```bash
uv run scienceon status
uv run scienceon search --target ARTI --query "์ธ๊ณต์ง๋ฅ" --year 2015~2024 --rows 100
uv run scienceon collect --config config/search.example.yaml
```
๋ก์ปฌ ๊ฐ๋ฐ์ clone ํ `uv sync`. ํด๋ผ์ฐ๋ ๋๊ธฐํ ํด๋(OneDrive ๋ฑ)๋ผ๋ฉด venv ๋ฅผ ํด๋ ๋ฐ์ ๋๊ธฐ๋ฅผ
๊ถํ๋ค(`UV_PROJECT_ENVIRONMENT`).
## ๋ฌธ์
- [docs/SCIENCEON_API_GUIDE.md](docs/SCIENCEON_API_GUIDE.md) โ API ํธ์ถ ๊ท๊ฒฉ
- [docs/COLLECTION_WORKFLOW.md](docs/COLLECTION_WORKFLOW.md) โ ๋ฐ๋ณต ์์ง SOP
- [docs/PROMPTS.md](docs/PROMPTS.md) โ Claude ๊ตฌ๋์ฉ ํ๋กฌํํธ ํ
ํ๋ฆฟ
- [docs/ROADMAP.md](docs/ROADMAP.md) โ ๊ธฐ๋ฅ ๊ตฌํ ๊ณํ
## ๋ณด์ / ๋คํธ์ํฌ
- ์๊ฒฉ์ฆ๋ช
์ `.env` ๋๋ MCP `env` ๋ธ๋ก์ผ๋ก๋ง ์ ๋ฌํ๋ค. `.env` ์ ํ ํฐ ์บ์๋ gitignore ๋์์ด๋ค.
- ๊ต์ก๋งยท์ฌ๋ด๋ง **SSL ์ธํฐ์
์
** ํ๊ฒฝ์์๋ `truststore` ๋ก OS ์ ๋ขฐ์ ์ฅ์๋ฅผ ์ฌ์ฉํด ํต๊ณผํ๋ค
(TLS ๊ฒ์ฆ์ ๋์ง ์๋๋ค). ์ ์ ์์กด์ฑ์ด๋ผ `.mcpb` ์ค์น๋ณธ์๋ ์ ์ฉ๋๋ค. ๋นํ์ฑ์ `SCIENCEON_OS_TRUST=0`.
- ์๊ฒฉ์ฆ๋ช
์ค๋ฅยทํ์์์ ๋ฑ ์ด๋ค ์์ธ๋ ๋๊ตฌ ๋ฐ์ผ๋ก ์์ง ์๋๋ค(ํญ์ `{"error": โฆ}` ํํ๋ก ๋ฐํ).
- HTTP ์ ์ก์๋ ์ธ์ฆ์ด ์๋ค. ๊ธฐ๋ณธ ๋ฐ์ธ๋๋ ๋ฃจํ๋ฐฑ(`127.0.0.1`)์ด๋ค. `--host 0.0.0.0` ์ผ๋ก ์ธ๋ถ์
์ด๋ฉด ์๊ฒฉ์ฆ๋ช
์ ๊ฐ์ง ์๋ฒ๊ฐ ๊ทธ๋๋ก ๋
ธ์ถ๋๋ฏ๋ก ์ ๋ขฐ๋ ๋ง์์๋ง ์ด๋ค.
- ํธ์ถ์ throttle(๊ธฐ๋ณธ 0.5s)ยท์ง์ ๋ฐฑ์คํ๋ฅผ ๊ฑด๋ค. 429 ๊ฐ ๋๋ฉด throttle ์ ์ฌ๋ฆฐ๋ค.
## ๊ด๋ จ ํ๋ก์ ํธ
- [ansua79/scienceon-mcp](https://github.com/ansua79/scienceon-mcp) โ KISTI ๊ฐ๋ฐ์์ ScienceON MCP.
ScienceON ์ API(๋
ผ๋ฌธยทํนํยท๋ณด๊ณ ์ยท๋ํฅยท์ฐ๊ตฌ์ยท๊ธฐ๊ดยท๊ธฐ์ ํธ๋ ๋ยท๋ด์ค ๋ฑ 17๊ฐ ๋๊ตฌ)๋ฅผ ํญ๋๊ฒ
๋
ธ์ถํ๊ณ GUI ์ค์น๊ธฐ๋ ์ ๊ณตํ๋ค. **ํญ๋์ ํ์**์ด ๋ชฉ์ ์ด๋ฉด ์ด ๋๊ตฌ๋ฅผ ๊ถํ๋ค.
- [rubatoyd/KCI_openAPI](https://github.com/rubatoyd/KCI_openAPI) โ ํ๊ตญ์ฐ๊ตฌ์ฌ๋จ KCI ์์ง๊ธฐ(์๋งค ํ๋ก์ ํธ).
๋ณธ ํ๋ก์ ํธ๋ **์ฐ๊ตฌ์ฉ ์๋ฃ์์งยท์ฝํผ์ค ๊ตฌ์ถ**์ ํนํ๋์ด ์๋ค โ ๋ค์ค์ฟผ๋ฆฌ ํฉ์งํฉ ยท ์์ผ๋์นด๋ ยท
ํ์ฒ๋ฆฌ ํํฐ ยท ๋ค์ค๊ทธ๋ฃน ์์ง ยท ๋๋ ๋ด๋ณด๋ด๊ธฐ ยท config ์ฌํ ์์ง.
## ๋ผ์ด์ ์ค
MIT ยฉ Yeondong Yang. ๋ณธ ํ๋ก์ ํธ๋ KISTI ์ ๋น๊ณต์ ํด๋ผ์ด์ธํธ์ด๋ฉฐ ์ ํด ๊ด๊ณ๊ฐ ์๋ค.
ScienceON ๋ฐ์ดํฐ ์ด์ฉ์ KISTI ์ฝ๊ดยทํธ๋ํฝ ์ ์ฑ
์ ๋ฐ๋ฅธ๋ค.