Skip to main content
Glama
rubatoyd

scienceon-mcp

by rubatoyd

scienceON-mcp

CI Release Downloads

๐Ÿ“ˆ ์‚ฌ์šฉ๋Ÿ‰ โ€” ์ตœ๊ทผ 14์ผ ์กฐํšŒ 0ํšŒ(๊ณ ์œ  0) ยท ํด๋ก  0ํšŒ(๊ณ ์œ  0) ยท ๋ฆด๋ฆฌ์Šค ์ž์‚ฐ ๋ˆ„์  ๋‹ค์šด๋กœ๋“œ โ€”

์ผ๋ณ„ ํด๋ก ยท์กฐํšŒ ์ถ”์ด

2026-09-25 ์ž๋™ ๊ฐฑ์‹  ยท ์ „์ฒด ์ด๋ ฅ์€ 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 ์—ฐ๊ตฌ๊ธฐ๊ด€ (๊ณ„์ • ๊ตฌ๋… ๋ฒ”์œ„์— ๋”ฐ๋ฆ„)

Related MCP server: KISTI-MCP

API ํ‚ค ๋ฐœ๊ธ‰

  1. ScienceON ํšŒ์›๊ฐ€์ž…ยท๋กœ๊ทธ์ธ

  2. API Gateway โ†’ ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰ ์‹ ์ฒญ โ†’ ์Šน์ธ ํ›„ ์ธ์ฆํ‚คยทClient ID ๋ฐœ๊ธ‰

  3. ์ธ์ฆํ‚ค๊ด€๋ฆฌ์—์„œ ์‹ ์ฒญ MAC ์ฃผ์†Œ ๋“ฑ๋ก, IP๊ด€๋ฆฌ์—์„œ ํ˜ธ์ถœ PC ์˜ ๊ณต์ธ IP ๋“ฑ๋ก

  4. ์‚ฌ์šฉํ•  ์„œ๋น„์Šค ์ฝ˜ํ…์ธ (ํ‹ฐ์ผ“) ์ฒดํฌ

์ž๊ฒฉ์ฆ๋ช…์€ 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).

๋ฌธ์„œ

๋ณด์•ˆ / ๋„คํŠธ์›Œํฌ

  • ์ž๊ฒฉ์ฆ๋ช…์€ .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 โ€” KISTI ๊ฐœ๋ฐœ์ž์˜ ScienceON MCP. ScienceON ์ „ API(๋…ผ๋ฌธยทํŠนํ—ˆยท๋ณด๊ณ ์„œยท๋™ํ–ฅยท์—ฐ๊ตฌ์žยท๊ธฐ๊ด€ยท๊ธฐ์ˆ ํŠธ๋ Œ๋“œยท๋‰ด์Šค ๋“ฑ 17๊ฐœ ๋„๊ตฌ)๋ฅผ ํญ๋„“๊ฒŒ ๋…ธ์ถœํ•˜๊ณ  GUI ์„ค์น˜๊ธฐ๋„ ์ œ๊ณตํ•œ๋‹ค. ํญ๋„“์€ ํƒ์ƒ‰์ด ๋ชฉ์ ์ด๋ฉด ์ด ๋„๊ตฌ๋ฅผ ๊ถŒํ•œ๋‹ค.

  • rubatoyd/KCI_openAPI โ€” ํ•œ๊ตญ์—ฐ๊ตฌ์žฌ๋‹จ KCI ์ˆ˜์ง‘๊ธฐ(์ž๋งค ํ”„๋กœ์ ํŠธ).

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์—ฐ๊ตฌ์šฉ ์ž๋ฃŒ์ˆ˜์ง‘ยท์ฝ”ํผ์Šค ๊ตฌ์ถ•์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค โ€” ๋‹ค์ค‘์ฟผ๋ฆฌ ํ•ฉ์ง‘ํ•ฉ ยท ์™€์ผ๋“œ์นด๋“œ ยท ํ›„์ฒ˜๋ฆฌ ํ•„ํ„ฐ ยท ๋‹ค์ค‘๊ทธ๋ฃน ์ˆ˜์ง‘ ยท ๋Œ€๋Ÿ‰ ๋‚ด๋ณด๋‚ด๊ธฐ ยท config ์žฌํ˜„ ์ˆ˜์ง‘.

๋ผ์ด์„ ์Šค

MIT ยฉ Yeondong Yang. ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” KISTI ์˜ ๋น„๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์ด๋ฉฐ ์ œํœด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค. ScienceON ๋ฐ์ดํ„ฐ ์ด์šฉ์€ KISTI ์•ฝ๊ด€ยทํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ๋”ฐ๋ฅธ๋‹ค.

Available Tools

5 tools
scienceON_collect_groupsA

์—ฌ๋Ÿฌ ๊ฒ€์ƒ‰ ๊ทธ๋ฃน์„ ํ•œ ์ฝ”ํผ์Šค๋กœ ํ•ฉ์ณ ์ˆ˜์ง‘(CN ์ค‘๋ณต์ œ๊ฑฐ). config ํŒŒ์ผ ์—†์ด ๋Œ€ํ™”ํ˜•์œผ๋กœ.

๊ทธ๋ฃน๋งˆ๋‹ค ๋‹ค๋ฅธ ํ•„๋“œยทํ›„์ฒ˜๋ฆฌ ํ•„ํ„ฐ๋ฅผ ๊ฑธ ์ˆ˜ ์žˆ์–ด, ๋‹จ์ผ ๊ฒ€์ƒ‰์–ด๋กœ๋Š” ๋ชป ๋งŒ๋“œ๋Š” ์ฝ”ํผ์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ฐ group = {"field": "BI", "terms": [...], "contains": [...], "lang": [...], "max": N} field : BI(์ „์ฒด)ยทTI(์ œ๋ชฉ)ยทAB(์ดˆ๋ก)ยทAU(์ €์ž)ยทKW(ํ‚ค์›Œ๋“œ) terms : ๊ทธ ํ•„๋“œ๋กœ ๊ฐœ๋ณ„ ๊ฒ€์ƒ‰ํ•  ์šฉ์–ด๋“ค(์™€์ผ๋“œ์นด๋“œ * ๊ฐ€๋Šฅ) contains: ์›๋ณธ ์ „์ฒดํ•„๋“œ substring ํ›„์ฒ˜๋ฆฌ ํ•„ํ„ฐ(๋…ธ์ด์ฆˆ ์ œ๊ฑฐ, ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ) lang : ํ—ˆ์šฉ ์–ธ์–ด(์˜ˆ: ["ํ•œ๊ตญ์–ด"]) โ€” ๊ตญ๋ฌธ ๋…ผ๋ฌธ ํ•œ์ • ๋“ฑ max : ๊ทธ ๊ทธ๋ฃน๋งŒ์˜ ์ƒํ•œ(๋ฏธ์ง€์ • ์‹œ max_records)

์˜ˆ) ๋ณ€๋ณ„๋ ฅ ์žˆ๋Š” ๋‹จ์–ด๋Š” BI ๋กœ ๊ทธ๋Œ€๋กœ, ์ƒ‰์ธ ์•ˆ ๋˜๋Š” ํ† ํฐ์€ TI ์™€์ผ๋“œ์นด๋“œ + contains ๋กœ ์ •๋ฐ€ํ™”: [{"field":"BI","terms":["๊ฒฝ๊ณ„์„ ์ง€๋Šฅ","๊ฒฝ๊ณ„์„  ์ง€๋Šฅ"]}, {"field":"TI","terms":["๋А๋ฆฐ*"],"contains":["๋А๋ฆฐํ•™์Šต์ž","๋А๋ฆฐ ํ•™์Šต์ž"]}]

save=true(๊ธฐ๋ณธ) ๋ฉด ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. save=false ๋ฉด ๋ ˆ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๋˜ ์‘๋‹ต ํญ์ฃผ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์•ž 100๊ฑด๋งŒ ์‹ฃ๋Š”๋‹ค(meta ๋Š” ์ „๋Ÿ‰ ๊ธฐ์ค€).

โš ๏ธ meta.truncated=true ๋ฉด ์ƒํ•œ์— ๊ฑธ๋ ค ์ž˜๋ฆฐ ๊ฒƒ์ด๋‹ค โ€” meta.union_upper_bound(๊ทธ๋ฃน๋ณ„ total ํ•ฉ) ์œ„๋กœ max_records ๋ฅผ ์˜ฌ๋ ค ์žฌ์ˆ˜์ง‘ํ•ด์•ผ ์ฝ”ํผ์Šค๊ฐ€ ์™„๊ฒฐ๋œ๋‹ค.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
saveNo
groupsYes
targetNoARTI
formatsNo
out_dirNo
year_toNo
year_fromNo
max_recordsNo
retry_incompleteNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by explaining key behavioral details: save=true writes a file and returns a path, while save=false returns records directly but only the first 100 ('์•ž 100๊ฑด๋งŒ ์‹ฃ๋Š”๋‹ค'). It also warns about meta.truncated and explains how to resolve truncation by raising max_records above meta.union_upper_bound. This provides actionable insight into side effects and output limits not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized and front-loaded with the core purpose. It uses bullet-like explanations for the group structure, a concrete example, and a clearly marked warning. Every sentence adds value; no filler. Despite being longer than average, it remains scannable and information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, nested groups) and the absence of an output schema, the description does a solid job of explaining the main flow, output modes, and truncation semantics. It falls slightly short on fully documenting every parameter, but the core behavior is well covered and the example clarifies the most complex part.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It thoroughly explains the 'groups' parameter with its nested fields (field, terms, contains, lang, max) and provides a JSON example. It also clarifies 'save' behavior. However, other parameters like target, formats, out_dir, year_from, year_to, and retry_incomplete are left unexplained, though some are self-explanatory from their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: merging multiple search groups into a single corpus with deduplication ('์—ฌ๋Ÿฌ **๊ฒ€์ƒ‰ ๊ทธ๋ฃน**์„ ํ•œ ์ฝ”ํผ์Šค๋กœ ํ•ฉ์ณ ์ˆ˜์ง‘(CN ์ค‘๋ณต์ œ๊ฑฐ)'). It uses a specific verb (collect/merge) and resource (search groups into corpus), and this clearly distinguishes it from siblings like scienceON_search, scienceON_export, and scienceON_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the intended use case: building corpora that cannot be created with a single query ('๋‹จ์ผ ๊ฒ€์ƒ‰์–ด๋กœ๋Š” ๋ชป ๋งŒ๋“œ๋Š” ์ฝ”ํผ์Šค๋ฅผ ๋งŒ๋“ ๋‹ค'). It provides a concrete example with different fields and filters. It does not explicitly mention alternative tools or when not to use it, but the use case is clear from the contrast with single-query search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scienceON_detailB
Read-only

์ œ์–ด๋ฒˆํ˜ธ(CN)๋กœ ์ƒ์„ธ ์„œ์ง€ยท์ดˆ๋ก ์กฐํšŒ.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoARTI
control_noYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, signaling a safe read operation. The description adds no additional behavioral context such as return format, scoping constraints, or side effects; with the annotation coverage, this meets the minimum but does not go further.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise Korean sentence with no redundant wording. It is appropriately sized for the tool's simplicity, though it lacks structure and would benefit from a brief usage note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the description covers the core purpose and primary parameter. However, it omits any explanation of the target parameter, return behavior, and does not position the tool against its siblings, leaving noticeable gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides meaning for control_no as the lookup key, but says nothing about the target parameter (default 'ARTI'), leaving a significant gap in parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed bibliographic/abstract information by control number (CN). It uses a specific verb and resource, and the CN-based lookup distinguishes it from the sibling search tool, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: this is the tool to use when you have a control number and need detailed record data. However, there is no explicit guidance on when to use this versus scienceON_search or other siblings, nor any stated prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scienceON_exportA

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋Œ€๋Ÿ‰ ์ˆ˜์ง‘ํ•ด ํŒŒ์ผ๋กœ ์ €์žฅ(xlsx/csv/json/sqlite). ์ €์žฅ ๊ฒฝ๋กœ ๋ฐ˜ํ™˜.

queries=[...] ์—ฌ๋Ÿฌ ์šฉ์–ด ๊ฐœ๋ณ„๊ฒ€์ƒ‰ ํ›„ CN ํ•ฉ์ง‘ํ•ฉ. contains=[...] ํ›„์ฒ˜๋ฆฌ ํ•„ํ„ฐ, lang=["ํ•œ๊ตญ์–ด"] ๊ตญ๋‚ดํ•œ์ •. out_dir ๋ฏธ์ง€์ • ์‹œ ์‚ฌ์šฉ์ž ํ™ˆ์˜ scienceon-output/ ์— ์ €์žฅ(MCP๋Š” ์ž„์˜ cwd์—์„œ ๊ธฐ๋™).

โš ๏ธ max_records(๊ธฐ๋ณธ 500)๋Š” ์กฐ์šฉํžˆ ์ž๋ฅด์ง€ ์•Š๋Š”๋‹ค โ€” ์ƒํ•œ์— ๊ฑธ๋ฆฌ๋ฉด meta.truncated=true ์™€ warning ์ด ๋ถ™๋Š”๋‹ค. meta.union_upper_bound ๋Š” ์‹คํ–‰ํ•œ ๊ฒ€์ƒ‰์ถ•๋“ค์˜ total ํ•ฉ(ํ•ฉ์ง‘ํ•ฉ ์ƒํ•œ)์ด๋ฏ€๋กœ, ์ ˆ๋‹จ๋๋‹ค๋ฉด max_records ๋ฅผ ๊ทธ ์œ„๋กœ ์˜ฌ๋ ค ์žฌ์ˆ˜์ง‘ํ•ด์•ผ ์ฝ”ํผ์Šค๊ฐ€ ์™„๊ฒฐ๋œ๋‹ค. ์ˆ˜์ง‘๋Ÿ‰์ด max_records ์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋ฉด ๊ฑฐ์˜ ํ•ญ์ƒ ์ ˆ๋‹จ์ด๋‹ค.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNo
nameNo
fieldNoBI
queryNo
targetNoARTI
formatsNo
out_dirNo
queriesNo
year_toNo
containsNo
year_fromNo
max_recordsNo
retry_incompleteNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, openWorldHint=true), the description discloses crucial traits: max_records does not silently truncate but sets meta.truncated=true with a warning, meta.union_upper_bound is described, and out_dir defaults to user home scienceon-output/ due to arbitrary cwd. This is high-value behavioral context not visible in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and uses line breaks and a warning block to organize details. The warning about max_records is detailed but earns its place because it prevents user misunderstanding. It is slightly dense but remains scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters and no output schema, the description covers important behavioral warnings (truncation, return meta fields, out_dir default) but omits explanations for many parameters and does not fully specify the return structure beyond the path and meta fields. It is helpful but incomplete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains queries, contains, lang, out_dir, and max_records, but leaves many parameters unexplained: name, field, target, formats (though formats are inferred from file extensions), year_from, year_to, retry_incomplete, and query (singular). This is a significant gap for a 13-parameter tool with no schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: '๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋Œ€๋Ÿ‰ ์ˆ˜์ง‘ํ•ด ํŒŒ์ผ๋กœ ์ €์žฅ(xlsx/csv/json/sqlite). ์ €์žฅ ๊ฒฝ๋กœ ๋ฐ˜ํ™˜.' This specifies the verb (collect, save), resource (search results), and output (file formats and path), which distinguishes it from siblings like search, status, detail, and collect_groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage context: queries for multiple terms with union, contains as post-filter, lang for domestic-only, and out_dir behavior. While alternatives are not explicitly named, the description makes it evident this is for bulk export versus the sibling search tool. It lacks explicit 'when not to use' but provides sufficient context to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scienceON_statusA
Read-only

ScienceON ์—ฐ๊ฒฐ/ํ† ํฐ ์ƒํƒœ ์ ๊ฒ€. ์‹คํŒจ ์‹œ ์›์ธ ํžŒํŠธ์™€ ํ˜„์žฌ ๊ณต์ธ IP ๋ฅผ ๋ฐ˜ํ™˜.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint and openWorldHint annotations by explaining that on failure it returns cause hints and the current public IP. This adds valuable behavioral context without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that immediately states the tool's purpose and failure behavior. No redundant or extraneous information is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only status check, the description covers the essential purpose and failure behavior. However, it does not specify what success returns (e.g., success status or token validity), which is a minor gap for a health-check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are trivially satisfied. The empty schema and lack of parameters mean the description does not need to explain parameter meaning; baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear action ('check ScienceON connection/token status') and resource, distinguishing it from sibling tools like scienceON_search or scienceON_detail. It also mentions the failure response, adding purpose specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (checking status before or during interactions with ScienceON), but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions. The name and description make the primary use case evident, but no direct guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.5.1
    • AddedscienceON_collect_groups
    • ChangedscienceON_export1 field changed
      • addedInput schema / properties / retry_incomplete
        Added value: +{
        +  "default": 1,
        +  "title": "Retry Incomplete",
        +  "type": "integer"
        +}
    • ChangedscienceON_search1 field changed
      • addedInput schema / properties / retry_incomplete
        Added value: +{
        +  "default": 1,
        +  "title": "Retry Incomplete",
        +  "type": "integer"
        +}
  2. 8 tool updatesv0.2.0
    • Removedscienceon_detail
    • AddedscienceON_detail
    • Removedscienceon_export
    • AddedscienceON_export
    • Removedscienceon_search
    • AddedscienceON_search
    • Removedscienceon_status
    • AddedscienceON_status
  3. 4 tool updatesv0.1.0
    • First observedscienceon_detail
    • First observedscienceon_export
    • First observedscienceon_search
    • First observedscienceon_status

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool serves a distinct purpose: status check, single-record detail, regular search, bulk export, and grouped corpus collection. The descriptions are sufficiently detailed to prevent confusion, even where search and export overlap.

Naming Consistency4/5

All tools share the consistent 'scienceON_' prefix with snake_case names. The second part mixes nouns (status, detail) and verbs (search, export, collect_groups), but the pattern is predictable and readable.

Tool Count5/5

Five tools form a well-scoped set for a research literature search and retrieval server. Each tool addresses a distinct aspect of the workflow without unnecessary bloat.

Completeness4/5

The surface covers core operations: searching, retrieving details, bulk export, and grouped collection. Minor gaps exist (e.g., no direct DOI-based lookup), but agents can typically achieve full retrieval with the provided tools.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers