Skip to main content
Glama
rubatoyd

kci-openapi-mcp

by rubatoyd

kci-openapi-mcp

CI Release Downloads

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

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

2026-10-16 ์ž๋™ ๊ฐฑ์‹  ยท ์ „์ฒด ์ด๋ ฅ์€ docs/usage.csv. GitHub ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณ„๋Š” 14์ผ ์ฐฝ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด ์ €์žฅ์†Œ๊ฐ€ ๋งค์ผ ์ฐ์–ด ๋ˆ„์ ํ•œ๋‹ค.

ํ•œ๊ตญ์—ฐ๊ตฌ์žฌ๋‹จ(NRF) KCI(Korea Citation Index) ๋ฌธํ—Œยท์ธ์šฉ์ง€์ˆ˜ ๊ฒ€์ƒ‰ยท์ˆ˜์ง‘ MCP ์„œ๋ฒ„ + CLI. REST Open API(ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰)์™€ OAI-PMH(๋ฌด์ธ์ฆ ๋Œ€๋Ÿ‰ ์ˆ˜ํ™•)๋ฅผ ํ•จ๊ป˜ ๋‹ค๋ฃฌ๋‹ค.

๊ธฐ๋Šฅ

  • ๋…ผ๋ฌธ ๊ฒ€์ƒ‰ยท์ƒ์„ธ โ€” ์„œ์ง€ ยท ๊ตญ๋ฌธ/์˜๋ฌธ ์ดˆ๋ก ยท ํ‚ค์›Œ๋“œ ยท ์ €์ž/์†Œ์†

  • ์ฐธ๊ณ ๋ฌธํ—Œ ์ˆ˜์ง‘ โ€” ์›ํ˜• ํ…์ŠคํŠธ + ํ”ผ์ธ์šฉ ๋…ผ๋ฌธ์˜ KCI ID(arti_id) โ†’ ์ธ์šฉ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ

  • ์ €๋„ ์ธ์šฉ์ง€์ˆ˜ โ€” ์—ฐ๋„๋ณ„ IF ยท ๋“ฑ์žฌ์ด๋ ฅ

  • OAI-PMH ๋Œ€๋Ÿ‰ ์ˆ˜ํ™• โ€” ์ธ์ฆํ‚ค ์—†์ด ์„ธํŠธ + ๋‚ ์งœ๋ฒ”์œ„ ์ „์ˆ˜ ์ˆ˜์ง‘

  • ๋‚ด๋ณด๋‚ด๊ธฐ โ€” xlsx ยท csv ยท json ยท sqlite

Related MCP server: KISTI-MCP

๋‘ ์ธํ„ฐํŽ˜์ด์Šค

REST Open API

OAI-PMH

์—”๋“œํฌ์ธํŠธ

โ€ฆ/po/openapi/openApiSearch.kci

โ€ฆ/oai/request

์ธ์ฆ

KCI_API_KEY ํ•„์š”

๋ถˆํ•„์š”

์งˆ์˜

ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰(title ํ•„์ˆ˜)

์„ธํŠธ + ๋‚ ์งœ๋ฒ”์œ„ ์ˆ˜ํ™•

์ธ์šฉ์ง€์ˆ˜ยท์ฐธ๊ณ ๋ฌธํ—Œ

โœ…

โŒ

๊ทœ๊ฒฉ: docs/KCI_API_GUIDE.md ยท docs/KCI_OAI_PMH_GUIDE.md ยท ์„ค๊ณ„: docs/ARCHITECTURE.md

์ธ์ฆํ‚ค ์—†์ด ๋ฐ”๋กœ ์จ๋ณด๊ธฐ

REST ๊ฒ€์ƒ‰๋งŒ ์ธ์ฆํ‚ค๊ฐ€ ํ•„์š”ํ•˜๊ณ , OAI-PMH ์ˆ˜ํ™•์€ ํ‚ค ์—†์ด ๋™์ž‘ํ•œ๋‹ค.

uvx --from git+https://github.com/rubatoyd/KCI_openAPI kci identify
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 ์—์„œ 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 ๋ถˆํ•„์š”. ๋ฆด๋ฆฌ์Šค์—์„œ 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:

{ "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

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์š”์†Œ๋ฅผ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์„ค์ •์— ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

from mcp import StdioServerParameters

params = StdioServerParameters(
    command="uvx",
    args=["--from", "git+https://github.com/rubatoyd/KCI_openAPI", "kci-mcp"],
    env={"KCI_API_KEY": "..."},   # ๋น„์šฐ๋ฉด OAI ๋ฌด์ธ์ฆ ๋„๊ตฌ๋งŒ
)

์ „์†ก ๋ฐฉ์‹

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

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 ์•ฝ๊ด€์„ ๋”ฐ๋ฅธ๋‹ค.

Available Tools

7 tools
kci_collectA

[ํ˜ผ์šฉ] ์š”์ฒญ ์„ฑ๊ฒฉยทํ‚ค ์œ ๋ฌด๋กœ RESTโ†”OAI ์ž๋™ ์„ ํƒ ํ›„ ์ˆ˜์ง‘ โ†’ ํŒŒ์ผ ์ €์žฅ.

  • terms/title ์žˆ๊ณ  ์ธ์ฆํ‚ค ๋ณด์œ  โ†’ REST ๋ณ€ํ˜•์–ด ํ•ฉ์ง‘ํ•ฉ ๊ฒ€์ƒ‰(year_from/toยทcontains ์ ์šฉ)

retry_incomplete: ๋‹ค์ค‘ ํŽ˜์ด์ง€ ์งˆ์˜๋Š” ํ˜ธ์ถœ๋งˆ๋‹ค ๊ฒฐ๊ณผ๊ฐ€ ํ”๋“ค๋ ค 1~2๊ฑด์ด ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ 1 ์ด๋ฉด total ์— ๋ชป ๋ฏธ์ณค์„ ๋•Œ ๊ฒ€์ƒ‰์ถ•๋งˆ๋‹ค ํ•œ ๋ฒˆ ๋” ํ›‘์–ด ํ•ฉ์ง‘ํ•ฉ์„ ์ทจํ•œ๋‹ค(meta.sweeps_total ๋กœ ํ™•์ธ). โš ๏ธ ๋ณด์ •์ด ๊ฑธ๋ฆฐ ์ถ•์€ ์ „์ฒด๋ฅผ ์žฌํŽ˜์ด์ง•ํ•˜๋ฏ€๋กœ ์š”์ฒญ ์ˆ˜๊ฐ€ ๊ทธ ์ถ•๋งŒํผ ๋Š˜์–ด๋‚œ๋‹ค. ๋Œ€๊ทœ๋ชจ ์ˆ˜์ง‘์—์„œ ๋น„์šฉ์ด ๋ถ€๋‹ด๋˜๋ฉด 0 ์œผ๋กœ ๋ˆ๋‹ค โ€” ๋Œ€์‹  ๊ฒฐ์†์ด ๋‚จ๊ณ  meta.total_mismatch ๋กœ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.

  • terms/title ์žˆ๊ณ  ํ‚ค ์—†์Œ โ†’ OAI ์ˆ˜ํ™•(date_from/until) + terms/contains ๋กœ์ปฌ ํ•„ํ„ฐ

  • terms/title ์—†์Œ โ†’ OAI ์„ธํŠธ/๋‚ ์งœ๋ฒ”์œ„ ์ „์ˆ˜ ์ˆ˜ํ™• out_dir ๋ฏธ์ง€์ • ์‹œ ํ™ˆ์˜ kci-output/. OAI ๋‚ ์งœ๋Š” YYYY-MM-DD, REST ์—ฐ๋„๋Š” ์ •์ˆ˜.

โš ๏ธ REST ๊ฒฝ๋กœ๋Š” ๊ฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ œ๋ชฉ์ถ•ยทํ‚ค์›Œ๋“œ์ถ• ๋‘ ๋ฒˆ ์กฐํšŒํ•ด ํ•ฉ์ง‘ํ•ฉํ•œ๋‹ค โ†’ ๊ฒฐ๊ณผ๋Š” '์ œ๋ชฉ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ'๊ฐ€ ์•„๋‹ˆ๋ผ ์ œ๋ชฉโˆชํ‚ค์›Œ๋“œ๋‹ค. ๋ฐ˜ํ™˜๊ฐ’ meta.axes ์— ์ถ•๋ณ„ total ์ด ๋‹ด๊ธด๋‹ค. โš ๏ธ truncated=true ๋ฉด max_records ์ƒํ•œ์— ์ž˜๋ฆฐ ๊ฒƒ์ด๋‹ค โ€” ๊ทธ๋Œ€๋กœ ๋ถ„์„์— ์“ฐ๋ฉด ์•ˆ ๋œ๋‹ค. meta.union_upper_bound ์œ„๋กœ max_records ๋ฅผ ์˜ฌ๋ ค ์žฌ์ˆ˜์ง‘ํ•  ๊ฒƒ.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
termsNo
titleNo
formatsNo
out_dirNo
year_toNo
containsNo
set_specNoARTI
date_fromNo
year_fromNo
date_untilNo
max_recordsNo
retry_incompleteNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false (write), openWorldHint=true (unbounded/stateful), destructiveHint=false. The description complements these by disclosing that the tool saves files to disk (out_dir), automatically routes between REST/OAI, performs dual-axis union searches on REST path, and may produce multiple sweeps with retry_incomplete. It also warns about truncated results (truncated=true) and how to interpret meta fields. The only minor gap is that it doesn't explicitly state file write permissions or overwrite behavior.

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

Conciseness3/5

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

The description is quite long, with dense text covering multiple scenarios. While it packs valuable information, it lacks clear section breaks or bullet points for readability. Key warnings are fronted with โš ๏ธ, which helps, but the overall structure is a single block of Korean text that could be better organized for an AI agent to parse quickly.

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 high complexity (13 params, no output schema, multimodal routing), the description does a commendable job of covering core behaviors: REST vs OAI selection, dual-axis queries, retry logic, file output, date formats, and truncated data warnings. It is functionally complete for an experienced user, though it could benefit from an explicit listing of output file format or return value shape (since no output schema exists).

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?

Schema description coverage is 0%, so the description must carry full weight. The description explains many parameters implicitly: terms, title, retry_incomplete, out_dir, date_from/until, year_from/to, contains, max_records, set_spec. It clarifies that dates are YYYY-MM-DD and years are integers. However, it does not explain formats, name, or provides a formal parameter-by-parameter mapping. But given the complexity (13 params), the description does a good job making sense of the core parameters through contextual examples.

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 precisely states that the tool collects (saves) articles from KCI by automatically choosing between REST (with key) or OAI (without key) based on the presence of authentication key and the nature of the request. It distinguishes itself from sibling tools like kci_search (which likely only searches), kci_detail (single article details), and kci_harvest (which may be a different collection method) by describing its dual-mode routing logic and file-saving behavior.

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 gives clear when-to-use guidelines by outlining the decision logic: use REST if terms/title are present and auth key exists, use OAI otherwise. It also warns about the behavior of retry_incomplete and when to set it to 0 to save cost. However, it does not explicitly compare against each sibling tool (e.g., when to use kci_harvest instead), and it lacks an explicit 'do not use if' clause.

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

kci_detailA
Read-only

[REST] Control Number(ARTโ€ฆ)๋กœ ๋…ผ๋ฌธ ์ƒ์„ธ ์กฐํšŒ. ์ธ์ฆํ‚ค ํ•„์š”.

์ €์ž ํ‚ค์›Œ๋“œยทISSNยท๋“ฑ์žฌ์—ฌ๋ถ€ยทFWCIยท์ €์ž ์†Œ์†ยท์ฐธ๊ณ ๋ฌธํ—Œ์˜ ์œ ์ผํ•œ ์ถœ์ฒ˜๋‹ค (articleSearch ์‘๋‹ต์—๋Š” ์ด ํ•„๋“œ๋“ค์ด ์—†๋‹ค). ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ํ‚ค์›Œ๋“œ ๊ฒฐ์ธก์€ ์ด ๋„๊ตฌ๋กœ ๋ณด๊ฐ•ํ•œ๋‹ค.

ParametersJSON Schema
NameRequiredDescriptionDefault
arti_idYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to cover safety. It adds useful context: the tool is RESTful, requires an authentication key, and provides fields absent from other endpoints. However, it does not detail rate limits, response size, or error handling. The description adds value beyond annotations without contradicting them.

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 brief: two sentences plus a bolded summary. It front-loads the REST nature and authentication requirement, then explains unique value and use case. Every sentence adds value, though the first sentence could be more explicit about the input parameter.

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 a simple input schema (1 required string param) and no output schema, the description covers purpose, unique fields, and relation to other endpoints. It does not explain the output format or other potential usage nuances, but the tool appears simple and the description is largely complete for its complexity.

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

Parameters3/5

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

There is only one required parameter (arti_id) with 0% schema description coverage. The description does not directly explain the parameter, but the tool name and context ('Control Number(ARTโ€ฆ)') imply the parameter is a Control Number. Since the schema is minimal and the description adds some implicit meaning, a baseline of 3 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 clearly states the tool retrieves detailed paper information by Control Number (ARTโ€ฆ). It distinguishes itself from siblings by explicitly listing unique fields (author keywords, ISSN, indexing status, FWCI, author affiliations, references) not available in other tools like articleSearch. This is a specific verb+resource combination with explicit differentiation.

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 when to use this tool: for fields missing from articleSearch (e.g., keywords). It also mentions the prerequisite of an authentication key. However, it does not explicitly state when not to use it or name specific sibling alternatives, only contrasting with articleSearch which is not listed among siblings.

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

kci_harvestA
Read-only

[OAI-PMHยท๋ฌด์ธ์ฆ] ์„ธํŠธ+๋‚ ์งœ๋ฒ”์œ„ ๋Œ€๋Ÿ‰ ์ˆ˜ํ™•. ์ธ์ฆํ‚ค ๋ถˆํ•„์š”.

set_spec: ARTI(๋…ผ๋ฌธ)/ARTI_CONF(ํ•™์ˆ ๋Œ€ํšŒ)/JOUR(ํ•™์ˆ ์ง€) date_from/date_until: YYYY-MM-DD. metadata_prefix: oai_kci(์ƒ์„ธ)/oai_dc(๊ฐ„๋žต). contains: ์ œ๋ชฉ/์ดˆ๋ก/ํ‚ค์›Œ๋“œ ๋“ฑ์— ์ด ๋ฌธ์ž์—ด(๋“ค) ํฌํ•จ๋ถ„๋งŒ(ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๋Œ€์šฉ ๋กœ์ปฌ ํ•„ํ„ฐ).

ParametersJSON Schema
NameRequiredDescriptionDefault
containsNo
set_specNoARTI
date_fromNo
date_untilNo
max_recordsNo
metadata_prefixNooai_kci

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate read-only and open-world behavior, and the description adds valuable context: it's an OAI-PMH harvest requiring no authentication, and the 'contains' filter is a local post-filter rather than a server-side query. This discloses behavior not evident from annotations alone.

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 compact block with a leading summary and a short parameter legend. Every sentence delivers useful information without redundancy.

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?

It covers all critical parameters and usage conditions, but does not describe the return format or pagination behavior, which is relevant for a bulk harvest tool. However, with no output schema, the description could have mentioned output details; still, the provided info is strong.

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

Parameters5/5

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

Despite 0% schema description coverage, the description manually explains the meaning and allowed values for set_spec (ARTI/ARTI_CONF/JOUR), date formats (YYYY-MM-DD), metadata_prefix (oai_kci/oai_dc), and contains (local filter on title/abstract/keywords). It also specifies the no-auth condition, leaving only max_records implicit, which is self-explanatory.

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 explicitly states '์„ธํŠธ+๋‚ ์งœ๋ฒ”์œ„ ๋Œ€๋Ÿ‰ ์ˆ˜ํ™•' (batch harvest by set+date range) and identifies the OAI-PMH protocol and no-auth requirement. This clearly differentiates it from siblings like kci_search/kci_detail which are not bulk harvesting operations.

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?

It implies usage for bulk harvesting via '๋Œ€๋Ÿ‰ ์ˆ˜ํ™•' and notes no auth key is needed, but does not explicitly compare against sibling tools or state when not to use it. There is no mention of alternatives like kci_search for targeted queries.

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

kci_journal_citationA
Read-only

[REST] ์ €๋„ ์ธ์šฉ์ง€์ˆ˜ โ€” year(+years 2~5)๋กœ ๋ชฉ๋ก / journal_id ๋กœ ์ƒ์„ธ(๋“ฑ์žฌ์ด๋ ฅยท์—ฐ๋„๋ณ„ IF). ์ธ์ฆํ‚ค ํ•„์š”.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
yearNo
yearsNo
journal_idNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds the API key requirement and clarifies the two operational modes (year/year range for list, journal_id for detail), which is valuable context beyond annotations. However, it does not describe pagination or response formatting.

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 dense sentence that front-loads the tool's purpose and key parameters with no filler or redundant information.

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 description covers the API key, list/detail modes, and detail content (registration history and yearly IF), but with no output schema it does not describe the list response structure or the rows parameter behavior, making it incomplete for thorough understanding.

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

Parameters3/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 that year and years (2-5) drive list queries and journal_id drives detail, but it does not explain the rows parameter or how it interacts with the others, leaving a notable gap.

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 identifies the tool as a journal citation index REST API with two distinct modes: listing by year (with years range) and retrieving details by journal_id. It is specific and distinguishable from sibling tools like kci_search and kci_detail.

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?

The description implies usage for citation index lookups and outlines the parameter-driven modes, but it does not explicitly state when to choose this tool over alternatives or provide exclusions. It mentions the API key requirement as a prerequisite, which is helpful.

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

kci_referencesA
Read-only

[REST] ์ œ๋ชฉ ๊ฒ€์ƒ‰์–ด์— ๋งค์นญ๋œ ๋…ผ๋ฌธ๋“ค์˜ ์ฐธ๊ณ ๋ฌธํ—Œ ์›ํ˜• ์ˆ˜์ง‘. ์ธ์ฆํ‚ค ํ•„์š”.

๋ฐ˜ํ™˜ ๋ ˆ์ฝ”๋“œ์˜ article_id ๋Š” ์ธ์šฉํ•˜๋Š” ์ชฝ(์ฐธ๊ณ ๋ฌธํ—Œ์„ ๋‹จ ๋…ผ๋ฌธ)์ด๋‹ค. institution: ๋ฐœํ–‰๊ธฐ๊ด€๋ช… ํ•„ํ„ฐ. sort_by: title|author|pubiYr, sort_dir: asc|desc.

โš ๏ธ referenceSearch ์—๋Š” page ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์–ด 1ํšŒ 100๊ฑด์ด API ์ƒํ•œ์ด๋‹ค. total>100 ์ด๋ฉด ๋‚˜๋จธ์ง€๋Š” ์ด์–ด ๋ฐ›์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ truncated ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•  ๊ฒƒ. ์ƒํ•œ์„ ๋„˜๊ฒผ๋‹ค๋ฉด sort_dir ๋ฅผ ๋’ค์ง‘์–ด ๋ฐ˜๋Œ€์ชฝ 100๊ฑด์„ ์ถ”๊ฐ€๋กœ ๋ฐ›์•„ ํ•ฉ์ง‘ํ•ฉ์„ ์ทจํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ์šฐํšŒ์ฑ…์ด๋‹ค.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
titleYes
authorNo
sort_byNo
pub_yearNo
sort_dirNo
institutionNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint and openWorldHint, aligning with the description's data retrieval purpose. The description adds key behavioral details not in annotations: API has a 100-record limit per request, no pagination support, and the workaround of flipping sort_dir. It also clarifies that article_id in results is the citing article. No contradictions with annotations.

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 relatively concise but includes a mix of Korean and English, potentially adding cognitive load. Key information is front-loaded (purpose, auth requirement). The workaround explanation is detailed but necessary; one sentence could be slightly trimmed.

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

Completeness5/5

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

Given the moderate complexity (7 parameters, 1 required, no output schema, 0% schema coverage), the description covers core functionality, edge cases (100-record limit), and provides workarounds. It explains the return field meaning (article_id is citing article) and filter options, sufficient for an agent to use correctly without output schema.

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?

Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining institution filters, sort_by and sort_dir options, and the significance of the page parameter absence. However, it does not fully explain all parameters (e.g., author, pub_year, rows) leaving some burden on the agent to infer from 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 fetches raw reference records matching a title search term, specifying the resource (reference raw data), action (collect), and scope (title-matched articles). It distinguishes from siblings like kci_search (which likely searches articles directly) by focusing on references of matched articles.

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 provides explicit context on when to use this tool, including authentication requirements and filter usage. It also details workarounds for API limits when total records exceed 100. However, it does not mention when NOT to use this tool or explicitly compare against sibling tools for reference-related tasks.

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

kci_statusA
Read-only

์—ฐ๊ฒฐ ์ ๊ฒ€ โ€” OAI(๋ฌด์ธ์ฆ) Identify + REST ์ธ์ฆํ‚ค ๋ณด์œ  ์—ฌ๋ถ€.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate read-only and open-world behavior. The description adds specific behavioral details by stating it checks OAI Identify without authentication and whether a REST API key exists. It does not contradict 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 succinct line in Korean, immediately conveying the tool's purpose without any extraneous words or repetition.

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?

With no parameters and no output schema, the description covers the core purpose and scope adequately. It could optionally mention the return format, but for a simple status check, the description is reasonably complete.

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 the baseline score is 4. The description does not need to explain parameter behavior since there are none.

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 performs a connection check, specifying both OAI Identify (no authentication) and REST API key possession status. This distinguishes it from sibling tools like kci_search and kci_detail.

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 provides clear context that this is a connectivity/status check, implying it should be used to verify API access before other operations. However, it does not explicitly name alternatives or state when not to use it.

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.3.6
    • Changedkci_collect1 field changed
      • addedInput schema / properties / retry_incomplete
        Added value: +{
        +  "default": 1,
        +  "title": "Retry Incomplete",
        +  "type": "integer"
        +}
    • Changedkci_references3 fields changed
      • addedInput schema / properties / institution
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Institution"
        +}
      • addedInput schema / properties / sort_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Sort By"
        +}
      • addedInput schema / properties / sort_dir
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Sort Dir"
        +}
    • Changedkci_search3 fields changed
      • addedInput schema / properties / institution
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Institution"
        +}
      • addedInput schema / properties / sort_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Sort By"
        +}
      • addedInput schema / properties / sort_dir
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Sort Dir"
        +}
  2. 7 tool updatesv0.1.0
    • First observedkci_collect
    • First observedkci_detail
    • First observedkci_harvest
    • First observedkci_journal_citation
    • First observedkci_references
    • First observedkci_search
    • First observedkci_status

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have clearly distinct purposes: status, detail, search, references, citation, harvest, and collect. However, kci_search and kci_collect could be confused since kci_collect also performs searches, and the distinction between REST and OAI modes is described but not immediately obvious from names alone.

Naming Consistency4/5

Tool names follow a consistent kci_ prefix with a noun-like suffix (status, detail, search, references, journal_citation, harvest, collect). This pattern is clear and predictable, though kci_journal_citation is slightly longer than others. No mixing of camelCase or snake_case issues.

Tool Count5/5

Seven tools is well-scoped for the domain of Korean citation index access. Each tool serves a distinct function (connection check, detail lookup, search, references, journal metrics, bulk harvest, combined collection). No tool feels redundant or unnecessary.

Completeness4/5

The tool set covers key operations: search, detail retrieval, references, journal citation metrics, bulk harvesting, and a combined collector. Minor gaps exist: there is no direct tool for author lookup, no tool for updating/correcting entries, and no delete functionality, but these are appropriate for a read-only API service.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers