scienceON-mcp
๐ ์ฌ์ฉ๋ โ ์ต๊ทผ 14์ผ ์กฐํ 3ํ(๊ณ ์ 2) ยท ํด๋ก 7ํ(๊ณ ์ 5) ยท ๋ฆด๋ฆฌ์ค ์์ฐ ๋์ ๋ค์ด๋ก๋ 33
2026-08-12 ์๋ ๊ฐฑ์ ยท ์ ์ฒด ์ด๋ ฅ์
docs/usage.csv. GitHub ํธ๋ํฝ ํต๊ณ๋ 14์ผ ์ฐฝ๋ง ์ ๊ณตํ๋ฏ๋ก ์ด ์ ์ฅ์๊ฐ ๋งค์ผ ์ฐ์ด ๋์ ํ๋ค.
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 ํค ๋ฐ๊ธ
- ScienceON ํ์๊ฐ์ ยท๋ก๊ทธ์ธ
- API Gateway โ ์ธ์ฆํค ๋ฐ๊ธ ์ ์ฒญ โ ์น์ธ ํ
์ธ์ฆํคยทClient ID๋ฐ๊ธ - ์ธ์ฆํค๊ด๋ฆฌ์์ ์ ์ฒญ MAC ์ฃผ์ ๋ฑ๋ก, IP๊ด๋ฆฌ์์ ํธ์ถ PC ์ ๊ณต์ธ IP ๋ฑ๋ก
- ์ฌ์ฉํ ์๋น์ค ์ฝํ ์ธ (ํฐ์ผ) ์ฒดํฌ
์๊ฒฉ์ฆ๋ช
์ MCP ์ค์ ์ env ๋ธ๋ก ๋๋ .env(.env.example ๋ณต์ฌ)๋ก ์ ๋ฌํ๋ค. ์ฝ๋ยท์ปค๋ฐยท๋ก๊ทธ์๋
๋ฃ์ง ์๋๋ค.
์ค์น
Claude Desktop
.mcpb ์ํด๋ฆญ โ ๋ฆด๋ฆฌ์ค์์ ๋ฐ์
๋๋ธํด๋ฆญ/๋๋๊ทธ โ ์ค์น ์ฐฝ์์ ์ธ์ฆํคยท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:
{
"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
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์์๋ฅผ ๊ฐ ํด๋ผ์ด์ธํธ ์ค์ ์ ์ฎ๊ธฐ๋ฉด ๋๋ค.
์ ์ก ๋ฐฉ์
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 ํ์ฒ๋ฆฌ๋ก ์ ๋ฐํํ๋ ์์ผ๋ก ๊ทธ๋ฃน๋ง๋ค ๋ค๋ฅธ
์ ๋ต์ ๊ฑธ์ด ํฉ์งํฉ์ ๋ง๋ ๋ค.
[
{ "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
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 โ API ํธ์ถ ๊ท๊ฒฉ
- docs/COLLECTION_WORKFLOW.md โ ๋ฐ๋ณต ์์ง SOP
- docs/PROMPTS.md โ Claude ๊ตฌ๋์ฉ ํ๋กฌํํธ ํ ํ๋ฆฟ
- docs/ROADMAP.md โ ๊ธฐ๋ฅ ๊ตฌํ ๊ณํ
๋ณด์ / ๋คํธ์ํฌ
- ์๊ฒฉ์ฆ๋ช
์
.env๋๋ MCPenv๋ธ๋ก์ผ๋ก๋ง ์ ๋ฌํ๋ค..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 โ KISTI ๊ฐ๋ฐ์์ ScienceON MCP. ScienceON ์ API(๋ ผ๋ฌธยทํนํยท๋ณด๊ณ ์ยท๋ํฅยท์ฐ๊ตฌ์ยท๊ธฐ๊ดยท๊ธฐ์ ํธ๋ ๋ยท๋ด์ค ๋ฑ 17๊ฐ ๋๊ตฌ)๋ฅผ ํญ๋๊ฒ ๋ ธ์ถํ๊ณ GUI ์ค์น๊ธฐ๋ ์ ๊ณตํ๋ค. ํญ๋์ ํ์์ด ๋ชฉ์ ์ด๋ฉด ์ด ๋๊ตฌ๋ฅผ ๊ถํ๋ค.
- rubatoyd/KCI_openAPI โ ํ๊ตญ์ฐ๊ตฌ์ฌ๋จ KCI ์์ง๊ธฐ(์๋งค ํ๋ก์ ํธ).
๋ณธ ํ๋ก์ ํธ๋ ์ฐ๊ตฌ์ฉ ์๋ฃ์์งยท์ฝํผ์ค ๊ตฌ์ถ์ ํนํ๋์ด ์๋ค โ ๋ค์ค์ฟผ๋ฆฌ ํฉ์งํฉ ยท ์์ผ๋์นด๋ ยท ํ์ฒ๋ฆฌ ํํฐ ยท ๋ค์ค๊ทธ๋ฃน ์์ง ยท ๋๋ ๋ด๋ณด๋ด๊ธฐ ยท config ์ฌํ ์์ง.
๋ผ์ด์ ์ค
MIT ยฉ Yeondong Yang. ๋ณธ ํ๋ก์ ํธ๋ KISTI ์ ๋น๊ณต์ ํด๋ผ์ด์ธํธ์ด๋ฉฐ ์ ํด ๊ด๊ณ๊ฐ ์๋ค. ScienceON ๋ฐ์ดํฐ ์ด์ฉ์ KISTI ์ฝ๊ดยทํธ๋ํฝ ์ ์ฑ ์ ๋ฐ๋ฅธ๋ค.