scienceon-mcp
This server lets you search, retrieve, and export academic literature metadata from Korea's ScienceON via MCP or CLI, with support for multi-query unions, wildcards, filters, and multi-group collection.
Search literature: Query by target (papers, reports, trends, researchers, organizations), field (full text, title, abstract, author, keyword), year range, and filters like
containsand language; supports wildcards and multiple queries that are merged by control number.Fetch detailed records: Get full bibliographic metadata and abstracts using a control number (CN).
Bulk export: Run large-scale searches and save results to xlsx, csv, json, or sqlite files, with configurable output directory and file naming.
Multi-group collection: Combine different search strategies (e.g., field-specific terms, post-filters, limits) into one deduplicated corpus, optionally saving to file or previewing first 100 records.
Check server status: Verify connection, token validity, and public IP (useful for diagnosing API errors like E4006).
Handle truncation intelligently: The server flags when results hit your max limit or when totals don't match fetched counts, so you don't mistake incomplete corpora for complete ones.
Run as MCP or CLI: Use it as a Claude/agent tool or via terminal commands (
scienceon status,search,collect), with stdio or HTTP transports.Customize behavior: Adjust page size, retry incomplete sweeps, year range, language filters, and per-group record caps.
Secure and network-aware: Credentials passed via env, TLS verification via OS truststore, throttling and backoff built in, and loopback-only binding by default.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@scienceon-mcpsearch for papers on quantum computing published in 2024"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
scienceON-mcp
๐ ์ฌ์ฉ๋ โ ์ต๊ทผ 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 ํค ๋ฐ๊ธ
ScienceON ํ์๊ฐ์ ยท๋ก๊ทธ์ธ
API Gateway โ ์ธ์ฆํค ๋ฐ๊ธ ์ ์ฒญ โ ์น์ธ ํ
์ธ์ฆํคยทClient ID๋ฐ๊ธ์ธ์ฆํค๊ด๋ฆฌ์์ ์ ์ฒญ MAC ์ฃผ์ ๋ฑ๋ก, IP๊ด๋ฆฌ์์ ํธ์ถ PC ์ ๊ณต์ธ IP ๋ฑ๋ก
์ฌ์ฉํ ์๋น์ค ์ฝํ ์ธ (ํฐ์ผ) ์ฒดํฌ
์๊ฒฉ์ฆ๋ช
์ MCP ์ค์ ์ env ๋ธ๋ก ๋๋ .env(.env.example ๋ณต์ฌ)๋ก ์ ๋ฌํ๋ค. ์ฝ๋ยท์ปค๋ฐยท๋ก๊ทธ์๋
๋ฃ์ง ์๋๋ค.
์ค์น
Claude Desktop
.mcpb ์ํด๋ฆญ โ ๋ฆด๋ฆฌ์ค์์ ๋ฐ์
๋๋ธํด๋ฆญ/๋๋๊ทธ โ ์ค์น ์ฐฝ์์ ์ธ์ฆํคยทClient IDยทMAC ์
๋ ฅ.
์์ฐ | ํน์ง |
| ์์ฒด์๊ฒฐ โ Pythonยท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 ๋๊ตฌ
๋๊ตฌ | ํ๋ ์ผ |
| ์ฐ๊ฒฐ/ํ ํฐ ์ ๊ฒ (+๊ณต์ธ IP โ E4006 ์ง๋จ์ฉ) |
| ๋ฌธํ ๊ฒ์ โ ๋ค์ค์ฟผ๋ฆฌ ยท ์์ผ๋์นด๋ ยท ์ฐ๋๋ฒ์ ยท |
| ์ ์ด๋ฒํธ(CN)๋ก ์ด๋กยท์์ง ์ ์ฒด |
| ๋๋ ์์ง โ xlsx/csv/json/sqlite ์ ์ฅ |
| ๋ค์ค ๊ฒ์๊ทธ๋ฃน์ ํ ์ฝํผ์ค๋ก ํฉ์ณ ์์ง |
๋ค์ค๊ทธ๋ฃน ์์ง
๋จ์ผ ๊ฒ์์ด๋ก๋ ๋ง๋ค ์ ์๋ ์ฝํผ์ค๊ฐ ์๋ค. ๋ณ๋ณ๋ ฅ ์๋ ๋จ์ด๋ ์ ์ฒด(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 ์ ์ค์ ๋ก ๋ฐ์ ์ ์๋ ๊ฑด์๋ณด๋ค ํด ์ ์๋ค. ๊ทธ๋์ ๋ ์ํฉ์
๋ค๋ฅธ ํ๋๊ทธ๋ก ๊ตฌ๋ถํ๋ค.
ํ๋๊ทธ | ๋ป | ๋์ฒ |
|
| ์ํ์ ์ฌ๋ ค ์ฌ์์งํ๋ฉด ๋์ด๋๋ค |
| ๋๊น์ง ํ์ด์งํ๋๋ฐ | ์ํ์ ์ฌ๋ ค๋ ๋์ง ์๋๋ค. ํ์๋์ ํ์ ์์น๋ก ์ด๋ค |
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 ์ฝ๊ดยทํธ๋ํฝ ์ ์ฑ ์ ๋ฐ๋ฅธ๋ค.
Available Tools
5 toolsscienceON_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 ๋ฅผ ์ฌ๋ ค ์ฌ์์งํด์ผ ์ฝํผ์ค๊ฐ ์๊ฒฐ๋๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| save | No | ||
| groups | Yes | ||
| target | No | ARTI | |
| formats | No | ||
| out_dir | No | ||
| year_to | No | ||
| year_from | No | ||
| max_records | No | ||
| retry_incomplete | No |
TDQS
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.
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.
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.
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.
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.
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_detailBRead-only
์ ์ด๋ฒํธ(CN)๋ก ์์ธ ์์งยท์ด๋ก ์กฐํ.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ARTI | |
| control_no | Yes |
TDQS
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.
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.
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.
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.
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.
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 ์ ์ ํํ ์ผ์นํ๋ฉด ๊ฑฐ์ ํญ์ ์ ๋จ์ด๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| name | No | ||
| field | No | BI | |
| query | No | ||
| target | No | ARTI | |
| formats | No | ||
| out_dir | No | ||
| queries | No | ||
| year_to | No | ||
| contains | No | ||
| year_from | No | ||
| max_records | No | ||
| retry_incomplete | No |
TDQS
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.
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.
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.
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.
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.
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_searchARead-only
ScienceON ๋ฌธํ ๊ฒ์.
query: ๋จ์ผ ๊ฒ์์ด / queries: ์ฌ๋ฌ ๊ฒ์์ด(๊ฐ๋ณ๊ฒ์ ํ CN ํฉ์งํฉ) โ ๋ ์ค ํ๋
target: ARTI(๋
ผ๋ฌธ)ยทREPORT(๋ณด๊ณ ์)ยทATT(๋ํฅ)ยทRESEARCHERยทORGAN
field: BI(์ ์ฒด)ยทTI(์ ๋ชฉ)ยทAB(์ด๋ก)ยทAU(์ ์)ยทKW(ํค์๋). ์์ผ๋์นด๋ * ์ฌ์ฉ ๊ฐ๋ฅ(์: ๋๋ฆฐ*).
year_from~year_to: ๋ฐํ์ฐ๋(๋ฒ์๋ PY ํธ๋). rows: ๋ฐํ ๊ฑด์(์ต๋ 100).
contains: ์๋ณธ ์ ์ฒดํ๋์ ์ด ๋ฌธ์์ด(๋ค) ํฌํจ ๊ฒฐ๊ณผ๋ง(๋์๋ฌธ์ ๋ฌด์ ํ์ฒ๋ฆฌ ํํฐ).
lang: ํ์ฉ ์ธ์ด(์: ["ํ๊ตญ์ด"]) โ ๊ตญ๋ด(๊ตญ๋ฌธ) ํ์ ๋ฑ.
๋ฐํ๊ฐ์ total ์ ScienceON ์ด ๋ณด๊ณ ํ ์ ์ฒด ๊ฑด์(์ถ๋ณ ํฉ, ํฉ์งํฉ ์ํ)์ด๊ณ , truncated=true ๋ฉด rows ์ํ์ ์๋ฆฐ ๊ฒ์ด๋ค. ์ด๋ warning ์ด ํจ๊ป ๋ถ๋๋ค. โ ๏ธ ์ ๋จ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ ์ฝํผ์ค๋ก ์ค์ธํ๋ฉด ํ์ ๋ถ์์ด ๋ฌดํจ๊ฐ ๋๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| rows | No | ||
| field | No | BI | |
| query | No | ||
| target | No | ARTI | |
| queries | No | ||
| year_to | No | ||
| contains | No | ||
| year_from | No | ||
| retry_incomplete | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite having readOnlyHint and openWorldHint annotations, the description adds extensive behavioral context: it explains the 'CN ํฉ์งํฉ' (CN union) logic for multiple queries, the post-processing filter (contains, case-insensitive), wildcard support, and importantly the semantics of total as an upper bound and truncated=true with a warning. It even warns against misinterpreting truncated results as a complete corpus, which goes well beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear line breaks and semantically grouped parameters. Each sentence adds value, including the critical truncation warning. Despite being dense, it remains concise and easy to parse, covering complex behavior without redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 parameters, no output schema, and complex union/filter behaviors, the description is remarkably complete. It covers parameter semantics, return value semantics (total, truncated, warning), and operational caveats. The only missing piece is retry_incomplete, but overall the description provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining nearly every parameter: query, queries, target, field, year range, rows, contains, and lang. It provides allowed values and behaviors. However, the parameter 'retry_incomplete' is absent from the description, creating a minor gap for that one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'ScienceON ๋ฌธํ ๊ฒ์' (ScienceON literature search), clearly identifying the action (search) and resource (literature). It further specifies target types (ARTI, REPORT, ATT, RESEARCHER, ORGAN) and field options, which distinguishes it from sibling tools like status, detail, export, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides detailed parameter usage (query vs queries, target, field, rows, etc.) and explains the union search behavior, but it never explicitly states when to use this tool versus alternatives like scienceON_status or scienceON_export. The usage context is clear for the search operation itself, but no alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scienceON_statusARead-only
ScienceON ์ฐ๊ฒฐ/ํ ํฐ ์ํ ์ ๊ฒ. ์คํจ ์ ์์ธ ํํธ์ ํ์ฌ ๊ณต์ธ IP ๋ฅผ ๋ฐํ.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.5.1- Added
scienceON_collect_groups - Changed
scienceON_export1 field changed- added
Input schema / properties / retry_incompleteAdded value: +{ + "default": 1, + "title": "Retry Incomplete", + "type": "integer" +}
- Changed
scienceON_search1 field changed- added
Input schema / properties / retry_incompleteAdded value: +{ + "default": 1, + "title": "Retry Incomplete", + "type": "integer" +}
8 tool updates
v0.2.0- Removed
scienceon_detail - Added
scienceON_detail - Removed
scienceon_export - Added
scienceON_export - Removed
scienceon_search - Added
scienceON_search - Removed
scienceon_status - Added
scienceON_status
4 tool updates
v0.1.0- First observed
scienceon_detail - First observed
scienceon_export - First observed
scienceon_search - First observed
scienceon_status
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to search and analyze Korean academic papers using the Korea Citation Index (KCI) Open API. Supports paper search, detailed metadata retrieval, reference analysis, author and keyword searches, and citation index queries.1-
- AlicenseNot gradedqualityCmaintenanceIntegrates with KISTI's ScienceON, NTIS, and DataON APIs to search and retrieve scientific papers, patents, reports, national R\&D projects, and research data.16Creative Commons Attribution Non Commercial 4.0 International
- AlicenseNot gradedqualityDmaintenanceEnables structured information extraction from academic PDFs using LLMs, integrating with Claude Desktop for natural language querying and batch processing.2MIT
- AlicenseNot gradedqualityAmaintenanceEnables academic literature collection and full-text downloading from multiple sources (CNKI, Elsevier, OpenAlex, etc.) via natural language commands.3MIT