Skip to main content
Glama
nl-openapi-mcp

nl-openapi-mcp

by rubatoyd

nl-openapi-mcp

CI Release Downloads

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

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

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

๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€ ์†Œ์žฅ์ž๋ฃŒ ๊ฒ€์ƒ‰ OpenAPI ๋ฅผ Claude ๋“ฑ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ”๋กœ ์“ฐ๋Š” ์„œ๋ฒ„ + CLI. ๋‹จํ–‰๋ณธยท์˜จ๋ผ์ธ์ž๋ฃŒ์˜ ์„œ์ง€, KDC ๋ถ„๋ฅ˜, ์ฒญ๊ตฌ๊ธฐํ˜ธ, ์›๋ฌธ ์ œ๊ณต ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ƒ‰ยท์ˆ˜์ง‘ํ•˜๊ณ  xlsx/csv/json/sqlite ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

์ž๋งค ํ”„๋กœ์ ํŠธ: kci-openapi-mcp(ํ•™์ˆ ๋…ผ๋ฌธยท์ธ์šฉ์ง€์ˆ˜) ยท scienceON-mcp(KISTI ๋ฌธํ—Œ)


์ด ๋„๊ตฌ๊ฐ€ ํŠน๋ณ„ํžˆ ์‹ ๊ฒฝ ์“ฐ๋Š” ๊ฒƒ โ€” ์กฐ์šฉํ•œ ์ ˆ๋‹จ ๋ฐฉ์ง€

๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€ ๊ฒ€์ƒ‰ API ๋Š” ํ•œ ๊ฒ€์ƒ‰์‹๋‹น 500๊ฑด๊นŒ์ง€๋งŒ ๋Œ๋ ค์ค๋‹ˆ๋‹ค(๊ณต์‹ ์˜ค๋ฅ˜์ฝ”๋“œ 012 DATA LIMIT 500). ๊ทธ๋Ÿฐ๋ฐ total ์€ ๊ทธ๋ณด๋‹ค ํฐ ๊ฐ’์„ ํƒœ์—ฐํžˆ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๊ต์œก๋ณต์ง€: total=1,856  โ†’  ์‹ค์ œ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฑด 500๊ฑด

์ด ์‚ฌ์‹ค์„ ๋ชจ๋ฅด๋ฉด ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ์ „์ˆ˜๋กœ ์˜ค์ธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ์‘๋‹ต์— totalยทtruncatedยทcap_hit ์„ ํ•จ๊ป˜ ์‹ฃ๊ณ , ์ƒํ•œ์— ๊ฑธ๋ฆฌ๋ฉด ์ฒ˜๋ฐฉ๊นŒ์ง€ ๋ฌธ์žฅ์œผ๋กœ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์‹ ํ˜ธ

๋œป

์ฒ˜๋ฐฉ

truncated

์ด๋ฒˆ ํ˜ธ์ถœ์ด total ๋ณด๋‹ค ์ ๊ฒŒ ๋ฐ›์Œ

๋Œ€๊ฐœ max_records ๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ํ•ด๊ฒฐ

cap_hit

total > 500 โ€” API ๊ฐ€ ๋” ์•ˆ ์คŒ

max_records ๋กœ๋Š” ๋ถˆ๊ฐ€ (์•„๋ž˜ ์ฐธ์กฐ)

meta.cap_hit_terms

์ƒํ•œ์— ๊ฑธ๋ฆฐ ๊ฒ€์ƒ‰์–ด ๋ชฉ๋ก

๊ทธ ๊ฒ€์ƒ‰์–ด๋งŒ ์„ธ๋ถ„ํ™”

์ƒํ•œ์„ ๋„˜๊ฒจ ๋ชจ์œผ๋Š” ๋ฐฉ๋ฒ• โ€” ํ•จ๊ป˜ ์“ฐ๋ฉด ์ „์ˆ˜ ์ˆ˜์ง‘์ด ๋ฉ๋‹ˆ๋‹ค

๊ต์œก๋ณต์ง€/๋„์„œ(1,856๊ฑด) ๋ผ์ด๋ธŒ ์‹ค์ธก:

์„ค์ •

ํšŒ์ˆ˜

๋น„์œจ

์š”์ฒญ

์šฐํšŒ ์—†์Œ

500

27%

1

sort_depth=3

1,746

94%

7

auto_partition=True + sort_depth=1

1,854

100%

24

sort_depth ๊ฐ€ ๋น„์šฉ ๋Œ€๋น„ ํšจ๊ณผ๊ฐ€ ์••๋„์ ์ž…๋‹ˆ๋‹ค โ€” ๊ฐ™์€ ๊ฒ€์ƒ‰์‹์„ ์ •๋ ฌ ์ˆœ์„œ๋งŒ ๋ฐ”๊ฟ” ๋‹ค์‹œ ํ›‘๋Š”๋ฐ, asc ์™€ desc ์˜ ๊ต์ง‘ํ•ฉ์ด 0๊ฑด์ด๋ผ ์ •๋ ฌ์ถ• ํ•˜๋‚˜๊ฐ€ ์ƒํ•œ์„ ์‚ฌ์‹ค์ƒ 2๋ฐฐ๋กœ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ๋ถ„ํ• (auto_partition)๊ณผ ์ง๊ตํ•˜๋ฏ€๋กœ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ‘  auto_partition=True โ€” ์„œ๋ฒ„์ธก ์ถ•์œผ๋กœ ์žฌ๊ท€ ๋ถ„ํ• 

์‘๋‹ต ํ•„๋“œ๋ช…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹ค์ œ ๋™์ž‘ํ•˜๋Š” ์ถ• 3๊ฐœ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค: category โ†’ manageName(๋‘˜ ๋‹ค ์™„์ „๋ถ„ํ• ) โ†’ licYn. ์ƒํ•œ์— ๊ฑธ๋ฆฐ ์กฐ๊ฐ๋งŒ ๋‹ค์Œ ์ถ•์œผ๋กœ ๋” ์ชผ๊ฐœ๊ณ , ๋ถ€๋ชจ ์กฐ๊ฐ๋„ ํ•ฉ์ง‘ํ•ฉ์— ๋„ฃ์–ด ๋ถˆ์™„์ „ํ•œ ์ถ•์„ ์จ๋„ ์†ํ•ด๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ต์œก๋ณต์ง€(์ „์ฒด 7,028๊ฑด) ์‹ค์ธก:

๊นŠ์ด

์ถ•

ํšŒ์ˆ˜

๋น„์œจ

์š”์ฒญ

โ€”

๋ถ„ํ•  ์—†์Œ

500

7%

1

1

category

2,134

30%

13

2

+manageName (๊ธฐ๋ณธ)

3,265

46%

25

3

+licYn

4,722

67%

60

partition_depth(1~3)๋กœ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. โš ๏ธ ์ „์ˆ˜๋Š” ์•„๋‹ˆ๋ฉฐ โ€” ๊นŠ์ด 3์—์„œ๋„ 33%๊ฐ€ ๋‚จ์Šต๋‹ˆ๋‹ค โ€” ๋ชป ๋ฐ›์€ ๊ฑด์ˆ˜๋Š” meta.axes[].partition.unreachable ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

โ‘ก exact=True โ€” ํฐ๋”ฐ์˜ดํ‘œ ๊ตฌ๋ฌธ๊ฒ€์ƒ‰ (โš ๏ธ ๋„“๊ฒŒ ๋ชจ์„ ๋•Œ๋Š” ์“ฐ์ง€ ๋งˆ์„ธ์š”)

total ์ž์ฒด๊ฐ€ ์ค„์–ด๋“ค์–ด(๊ต์œก๋ถˆํ‰๋“ฑ 63 โ†’ 28) ์ƒํ•œ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์žฌํ˜„์œจ ์†์‹ค์ด ํฝ๋‹ˆ๋‹ค โ€” ์‹ค์ธก ํ‰๊ท  47%, ์ตœ์•… 84%(๊ต์œกํ˜•ํ‰์„ฑ 31 โ†’ 5๊ฑด). ๊ตฌ๋ฌธ๊ฒ€์ƒ‰์€ ํ† ํฐ ์ธ์ ‘์„ ์š”๊ตฌํ•˜๋Š”๋ฐ ํ•œ๊ตญ์–ด ๋ณตํ•ฉ์–ด๋Š” ํ‘œ์ œ์—์„œ ์กฐ์‚ฌยท์ˆ˜์‹์–ด๋กœ ๊ฐˆ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (๊ต์œก์˜ ํ˜•ํ‰์„ฑ, ์ดˆ์ค‘๋“ฑ๊ต์œก์˜ ํ˜•ํ‰์„ฑ๊ณผ). ๋ฒ„๋ ค์ง„ ๊ฒƒ์˜ 76%๊ฐ€ ๊ด€๋ จ ๋ฌธํ—Œ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

โ†’ ์ฝ”ํผ์Šค ์ˆ˜์ง‘์€ ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ + contains ํ›„์ฒ˜๋ฆฌ, exact ๋Š” ์ „์ฒด ํ‘œ์ œ๋ฅผ ์•„๋Š” ํŠน์ • ์ž๋ฃŒ ์กฐํšŒ์šฉ.

โš ๏ธ year_from/contains ๋Š” ์ด๋ฏธ ๋ฐ›์€ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ›„์ฒ˜๋ฆฌ๋ผ ์ƒํ•œ์„ ํ’€์–ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์ธก ์—ฐ๋„ ๋ฒ”์œ„ ํ•„ํ„ฐ๋Š” ํ™•์ธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(11๊ฐœ ํ›„๋ณด ๋ฌด์‹œ).

๐Ÿ”ด ์ •์ •(2026-08-12) โ€” ์ด์ „ ํŒ์—์„œ "์ •๋ ฌ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ์ ์—ˆ์œผ๋‚˜ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. sort=ipub_year&order=asc|desc ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค โ†’ sort_depth ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค(์œ„ ํ‘œ). detailSearch=true+f1/v1/and1 ๋กœ ํ•„๋“œ ๊ฐ„ AND/OR/NOT ๋„ ๋ฉ๋‹ˆ๋‹ค(AND+NOT=๋ถ€๋ชจ ๊ฒ€์‚ฐ ํ†ต๊ณผ) โ€” ์ด์ชฝ์€ ์•„์ง ๋ฏธ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ โ†’ docs/NL_API_GUIDE.md ยง1-4-bยทยง1-6ยทยง3-3


Related MCP server: kci-openapi-mcp

์„ค์น˜

1) Claude Code / Claude Desktop (uvx โ€” ๊ถŒ์žฅ)

{
  "mcpServers": {
    "nl": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/rubatoyd/nl-openapi-mcp", "nl-mcp"],
      "env": { "NL_API_KEY": "๋ฐœ๊ธ‰๋ฐ›์€_์ธ์ฆํ‚ค" }
    }
  }
}

2) Claude Desktop .mcpb ์›ํด๋ฆญ

Releases ์—์„œ ๋‚ด๋ ค๋ฐ›์•„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Pythonยทuv ๊ฐ€ ์—†๋Š” ํ™˜๊ฒฝ์ด๋ฉด OS๋ณ„ ์ž์ฒด์™„๊ฒฐ ๋ฒˆ๋“ค(-win-x64 / -macos-arm64 / -linux-x64)์„ ์“ฐ์„ธ์š”.

3) ๋กœ์ปฌ ๊ฐœ๋ฐœ

git clone https://github.com/rubatoyd/nl-openapi-mcp
cd nl-openapi-mcp
uv sync
uv run pytest -q

ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ํด๋”(OneDrive ๋“ฑ)์—์„œ ์ž‘์—…ํ•œ๋‹ค๋ฉด venv ๋ฅผ ํด๋” ๋ฐ–์— ๋‘์„ธ์š”: UV_PROJECT_ENVIRONMENT=~/.venvs/nl-openapi-mcp

4) ๋‹ค๋ฅธ MCP ํด๋ผ์ด์–ธํŠธ

ํ‘œ์ค€ stdio MCP ์„œ๋ฒ„์ด๋ฏ€๋กœ MCP ๋ฅผ ์ง€์›ํ•˜๋Š” ์—์ด์ „ํŠธ๋ฉด ๊ทธ๋Œ€๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค โ€” Cursor ยท Windsurf ยท Cline ยท Zed ยท VS Code Copilot(agent mode) ยท OpenAI Agents SDK ยท ์ž์ฒด ํด๋ผ์ด์–ธํŠธ ๋“ฑ. ์œ„ command/args/env 3์š”์†Œ๋ฅผ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์„ค์ •์— ์˜ฎ๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ „์†ก ๋ฐฉ์‹ โ€” stdio(๊ธฐ๋ณธ) ยท SSE ยท Streamable HTTP

๋กœ์ปฌ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค๋ฟ ์•„๋‹ˆ๋ผ HTTP ๋กœ๋„ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ํ˜ธ์ŠคํŒ…์ด๋‚˜ stdio ๋ฅผ ๋ชป ์“ฐ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

nl-mcp                                # stdio (๊ธฐ๋ณธ)
nl-mcp --transport streamable-http    # http://127.0.0.1:8000/mcp
nl-mcp --transport sse --port 9000    # http://127.0.0.1:9000/sse

ํ™˜๊ฒฝ๋ณ€์ˆ˜: NL_MCP_TRANSPORT ยท NL_MCP_HOST ยท NL_MCP_PORT.

โš ๏ธ HTTP ์ „์†ก์—๋Š” ์ธ์ฆ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฐ”์ธ๋“œ๋Š” ๋ฃจํ”„๋ฐฑ(127.0.0.1)์ด๋ผ ๊ฐ™์€ PC ์—์„œ๋งŒ ์ ‘๊ทผ๋ฉ๋‹ˆ๋‹ค. --host 0.0.0.0 ์œผ๋กœ ์™ธ๋ถ€์— ์—ด๋ฉด ์ธ์ฆํ‚ค๋ฅผ ํ’ˆ์€ ์„œ๋ฒ„๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณต๊ฐœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค โ€” ์‹ ๋ขฐ๋œ ๋ง์—์„œ๋งŒ ์“ฐ์„ธ์š”. ์„œ๋ฒ„๋„ ๊ธฐ๋™ ์‹œ ๊ฒฝ๊ณ ๋ฅผ ์ฐ์Šต๋‹ˆ๋‹ค.

Claude ์•ฑ ์•ˆ์—์„œ ๊ฒ€์ƒ‰ํ•ด ์„ค์น˜ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ณต์‹ MCP ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“ฑ์žฌ์™€ Claude Desktop ์ธ์•ฑ ์ปค๋„ฅํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๋ณ„๊ฐœ์ด๊ณ  ์ž๋™ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„ ์„ค์น˜ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์“ฐ์„ธ์š”.


์ธ์ฆํ‚ค

www.nl.go.kr ์˜คํ”ˆAPI ์‹ ์ฒญ์œผ๋กœ ๋ฐœ๊ธ‰๋ฐ›์•„ NL_API_KEY ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ ๋ฐœ๊ธ‰ยทAES ์•”ํ˜ธํ™”ยท๊ณต์ธIP ๋“ฑ๋ก์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค(ํ‰๋ฌธ key ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ).

cp .env.example .env   # NL_API_KEY ๋ฅผ ์ฑ„์›Œ ๋„ฃ์œผ์„ธ์š” (.env ๋Š” gitignore ๋ฉ๋‹ˆ๋‹ค)

ํ™˜๊ฒฝ๋ณ€์ˆ˜

๊ธฐ๋ณธ๊ฐ’

์„ค๋ช…

NL_API_KEY

(ํ•„์ˆ˜)

๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€ ์˜คํ”ˆAPI ์ธ์ฆํ‚ค

NL_OS_TRUST

1

๊ต์œก๋งยท์‚ฌ๋‚ด๋ง SSL ์ธํ„ฐ์…‰์…˜ ๋Œ€์‘(OS ์‹ ๋ขฐ์ €์žฅ์†Œ ์‚ฌ์šฉ). 0 ์ด๋ฉด ๋น„ํ™œ์„ฑ

ํ•™๊ตยท๊ต์œก์ฒญยท์‚ฌ๋‚ด๋ง์€ ์ž์ฒด์„œ๋ช… ๋ฃจํŠธ CA๋กœ TLS๋ฅผ ๊ฐ€๋กœ์ฑ•๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๊ฒ€์ฆ์„ ๋„์ง€ ์•Š๊ณ  truststore ๋กœ OS ์‹ ๋ขฐ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.


MCP ๋„๊ตฌ

๋„๊ตฌ

์„ค๋ช…

nl_status

์ธ์ฆํ‚ค ์œ ํšจ์„ฑ + API ์‹ค์ œ ์™•๋ณต 1ํšŒ ์ ๊ฒ€

nl_search

์†Œ์žฅ์ž๋ฃŒ ๊ฒ€์ƒ‰ (totalยทtruncatedยทcap_hit ๋™๋ฐ˜)

nl_collect

๊ฒ€์ƒ‰์–ด ํ•ฉ์ง‘ํ•ฉ ์ˆ˜์ง‘ โ†’ ํŒŒ์ผ ์ €์žฅ. save=false ๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋งŒ

์˜ˆ์‹œ

"๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€์—์„œ '๊ต์œก๋ถˆํ‰๋“ฑ', '๊ต์œก๊ฒฉ์ฐจ', 'ํ•™๋ ฅ๊ฒฉ์ฐจ' ๊ด€๋ จ ๋‹จํ–‰๋ณธ์„ ๋ชจ์•„์„œ xlsx๋กœ ์ €์žฅํ•ด์ค˜"

nl_collect ๊ฐ€ ์„ธ ๊ฒ€์ƒ‰์–ด๋ฅผ ๊ฐ๊ฐ ์กฐํšŒํ•ด id ๊ธฐ์ค€์œผ๋กœ ํ•ฉ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๊ณ , ์ƒํ•œ์— ๊ฑธ๋ฆฐ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์žˆ์œผ๋ฉด meta.cap_hit_terms ๋กœ ์ง€๋ชฉํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ ํŒŒ์ผ๋ช…์€ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค. name ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒ€์ƒ‰์–ด๊ฐ€ ๊ทธ๋Œ€๋กœ ํŒŒ์ผ๋ช…์ด ๋˜๋ฏ€๋กœ, ๊ฒฝ๋กœ ๊ตฌ๋ถ„์žยท..ยท์œˆ๋„ ๊ธˆ์ง€๋ฌธ์ž๋Š” ์ œ๊ฑฐ๋˜๊ณ  ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ out_dir ์•ˆ์—๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ•œ๊ธ€ ํŒŒ์ผ๋ช…์€ ๊ทธ๋Œ€๋กœ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.


CLI

nl status
nl search ๊ต์œก๋ถˆํ‰๋“ฑ --category ๋„์„œ --rows 20
nl collect --terms ๊ต์œก๋ถˆํ‰๋“ฑ ๊ต์œก๊ฒฉ์ฐจ ํ•™๋ ฅ๊ฒฉ์ฐจ --category ๋„์„œ --format xlsx json

# 500 ์ƒํ•œ์„ ๋„˜๊ฒจ ๋ชจ์œผ๊ธฐ โ€” ์ •๋ ฌ ๋’ค์ง‘๊ธฐ๊ฐ€ ๊ฐ€์žฅ ๊ฐ’์‹ธ๋‹ค (7์š”์ฒญ์— 94%)
nl collect --kwd ๊ต์œก๋ณต์ง€ --category ๋„์„œ --sort-depth 3 --format xlsx

# ๋ถ„ํ• ๊ณผ ํ•จ๊ป˜ ์“ฐ๋ฉด ์ „์ˆ˜ ์ˆ˜์ง‘ (์‹ค์ธก 100%)
nl collect --kwd ๊ต์œก๋ณต์ง€ --category ๋„์„œ --auto-partition --sort-depth 1 --format xlsx

์‘๋‹ต ํ•„๋“œ

์ •๊ทœํ™” 25๊ฐœ ์ปฌ๋Ÿผ + ์›๋ณธ 24๊ฐœ ํ•„๋“œ(raw) ๋ณด์กด. ์ „์ฒด ํ‘œ์™€ ๊ฒฐ์ธก๋ฅ ์€ docs/NL_API_GUIDE.md ยง2 ์ฐธ์กฐ.

์ฃผ์˜ํ•  ํ•„๋“œ 2๊ฐ€์ง€ โ€” ์ด๋ฆ„์ด โ€ฆYn ์ด์ง€๋งŒ ๋ถˆ๋ฆฌ์–ธ์ด ์•„๋‹™๋‹ˆ๋‹ค:

  • docYn โ†’ doc_type: NL_VIEWER ยท LD_VIEWER ยท FILE ยท LINK ยท N

  • licYn โ†’ lic_code: L ยท F ยท S ยท D ยท N ยท Y

์›๋ฌธ ๋ณด์œ  ํŒ์ •์€ Holding.has_fulltext() ๋ฅผ ์“ฐ์„ธ์š”("N"ยท๋นˆ๊ฐ’๋งŒ ๊ฑฐ์ง“).


๊ฒ€์ฆ ์ƒํƒœ

  • โœ… ์‘๋‹ต ์Šคํ‚ค๋งˆ 24๊ฐœ ํ•„๋“œ โ€” ์‹ค์‘๋‹ต 1,124๊ฑด ์ „์ˆ˜ ์ง‘๊ณ„๋กœ ํ™•์ •

  • โœ… 500๊ฑด ์ƒํ•œ โ€” ๊ณต์‹ ์˜ค๋ฅ˜์ฝ”๋“œ + ์‹ค์ œ ์ˆ˜์ง‘ ๋กœ๊ทธ + ์˜คํ”„์…‹ ๊ธฐ์ค€๊นŒ์ง€ ์‹ค์ธก

  • โœ… ํ˜ธ์ถœ ๊ทœ๊ฒฉ ๋ผ์ด๋ธŒ ์ „์ˆ˜ ๊ฒ€์ฆ โ€” srchTarget ์ง€์›/ํด๋ฐฑ, category 12์ข…, sort ์ƒ‰์ธ ํ•„๋“œ๋ช…, ipub_year ์—ฐ๋„ ํ•„ํ„ฐ, f-์Šฌ๋กฏ ๋ถˆ๋ฆฌ์–ธ, ์˜ค๋ฅ˜ ๋ด‰ํˆฌ, 0๊ฑด ์‘๋‹ต ํ˜•ํƒœ. scripts/probe_api.py ๋กœ ์žฌํ˜„ ๊ฐ€๋Šฅ

  • โœ… ์˜คํ”„๋ผ์ธ ํšŒ๊ท€ 186๊ฑด ยท MCP stdio ํ•ธ๋“œ์…ฐ์ดํฌ ยท CI ์ฝœ๋“œ ์Šคํƒ€ํŠธ ์Šค๋ชจํฌ ยท ์ž์ฒด์™„๊ฒฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํด๋ฆฐ ํ™˜๊ฒฝ ๊ฒ€์ฆ

  • โš ๏ธ ์„œ๋ฒ„์ธก ์—ฐ๋„ ๋ฒ”์œ„(from~to) ํ•„ํ„ฐ๋งŒ ๋ฏธํ™•์ธ โ€” ๋‹จ์ผ ์—ฐ๋„(ipub_year)๋Š” ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค


๋ผ์ด์„ ์Šค

MIT

Available Tools

3 tools
nl_collectA

[์ˆ˜์ง‘] ๊ฒ€์ƒ‰์–ด๋“ค์„ ๊ฐ๊ฐ ์กฐํšŒํ•ด ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ ๋ชจ์œผ๊ณ  ํŒŒ์ผ๋กœ ์ €์žฅํ•œ๋‹ค.

terms: ๋ณ€ํ˜•์–ด ๋ชฉ๋ก(๊ฐ๊ฐ ๊ฐœ๋ณ„ ๊ฒ€์ƒ‰ ํ›„ ํ•ฉ์ง‘ํ•ฉ). ๊ฒ€์ƒ‰์–ด๋ฅผ ์ชผ๊ฐค์ˆ˜๋ก 500๊ฑด ์ƒํ•œ์„ ๋œ ๋ฐ›์œผ๋ฏ€๋กœ ๋„“์€ ๋ง ํ•˜๋‚˜๋ณด๋‹ค ์ข์€ ๋ง ์—ฌ๋Ÿฟ์ด ํšŒ์ˆ˜๋Ÿ‰์ด ๋งŽ๋‹ค. kwd: ๋‹จ์ผ ๊ฒ€์ƒ‰์–ด(terms ๋Œ€์‹ ). exact: ๐Ÿ”ด ์ฝ”ํผ์Šค ์ˆ˜์ง‘์—๋Š” ์“ฐ์ง€ ๋ง ๊ฒƒ. ๊ตฌ๋ฌธ๊ฒ€์ƒ‰์€ ํ† ํฐ ์ธ์ ‘์„ ์š”๊ตฌํ•ด ํ•œ๊ตญ์–ด ๋ณตํ•ฉ์–ด๊ฐ€ ์กฐ์‚ฌยท์ˆ˜์‹์–ด๋กœ ๊ฐˆ๋ผ์ง„ ํ‘œ์ œ(๊ต์œก์˜ ํ˜•ํ‰์„ฑ)๋ฅผ ์ „๋ถ€ ๋†“์นœ๋‹ค. ์‹ค์ธก ์žฌํ˜„์œจ ์†์‹ค ํ‰๊ท  47%, ์ตœ์•… 84%(๊ต์œกํ˜•ํ‰์„ฑ 31โ†’5๊ฑด)์ด๊ณ  ๋ฒ„๋ ค์ง„ ๊ฒƒ์˜ 76%๊ฐ€ ๊ด€๋ จ ๋ฌธํ—Œ์ด์—ˆ๋‹ค. ๋ณ€ํ˜•์–ด๋ฅผ ๋Š˜๋ ค๋„ ํšŒ๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค(12/31). ์ž๋ฃŒ๋ฅผ ๋„“๊ฒŒ ๋ชจ์œผ๋ ค๋ฉด False ๋กœ ๋‘๊ณ  ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ๋Š” contains ํ›„์ฒ˜๋ฆฌ๋กœ ํ•˜๋ผ. exact ๋Š” ์ „์ฒด ํ‘œ์ œ๋ฅผ ์•„๋Š” ํŠน์ • ์ž๋ฃŒ ์กฐํšŒ์šฉ์ด๋‹ค. category: ๋„์„œยทํ•™์œ„๋…ผ๋ฌธยท์žก์ง€/ํ•™์ˆ ์ง€ยท๊ธฐ์‚ฌ ๋“ฑ. โš ๏ธ "์ „์ฒด" ๋Š” ์˜ค๋ฅ˜(013) โ€” ์ƒ๋žตํ•  ๊ฒƒ. auto_partition: 500 ์ƒํ•œ ์šฐํšŒ. ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ƒํ•œ์— ๊ฑธ๋ฆฌ๊ณ  category ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ์„œ๋ฒ„์ธก ์ถ•์œผ๋กœ ์žฌ๊ท€ ๋ถ„ํ• ํ•ด ์žฌ์ˆ˜์ง‘ํ•œ๋‹ค. ์ถ•์€ ์‹ค์ธก์œผ๋กœ ์ฐพ์€ 3๊ฐœ๋‹ค โ€” category โ†’ manageName(๋‘˜ ๋‹ค ์™„์ „๋ถ„ํ• ) โ†’ licYn(๊ฐ’์ด ๋นˆ ๋ ˆ์ฝ”๋“œ๋Š” ๋ชป ์žก์Œ). ์ƒํ•œ์— ๊ฑธ๋ฆฐ ์กฐ๊ฐ๋งŒ ๋‹ค์Œ ์ถ•์œผ๋กœ ๋” ์ชผ๊ฐœ๊ณ , ๋ถ€๋ชจ ์กฐ๊ฐ๋„ ํ•ฉ์ง‘ํ•ฉ์— ๋„ฃ์–ด ๋ถˆ์™„์ „ํ•œ ์ถ•์„ ์จ๋„ ์†ํ•ด๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. partition_depth: ๋ถ„ํ•  ๊นŠ์ด(1~3, ๊ธฐ๋ณธ 2). ์‹ค์ธก ํšŒ๋ณต๋Ÿ‰(๊ต์œก๋ณต์ง€ ์ „์ฒด 7,028๊ฑด): ๋ถ„ํ•  ์—†์Œ 500(7%) โ†’ ๊นŠ์ด1 2,134(30%) โ†’ ๊นŠ์ด2 3,265(46%) โ†’ ๊นŠ์ด3 4,722(67%). โš ๏ธ ํ˜ธ์ถœ ์ˆ˜๊ฐ€ ํ•จ๊ป˜ ๋Š”๋‹ค(13 โ†’ 25 โ†’ 60ํšŒ). ๊นŠ์ด 3์€ ์ฝ”ํผ์Šค ์ „์ˆ˜์„ฑ์ด ์ค‘์š”ํ•  ๋•Œ๋งŒ. โš ๏ธ ์ „์ˆ˜๋Š” ์—ฌ์ „ํžˆ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. meta.axes[].partition.unreachable ๊ณผ still_capped ๊ฐ€ ๋ชป ๋ฐ›์€ ๊ฑด์ˆ˜์™€ ๋‚จ์€ ์กฐ๊ฐ์„ ๋ณด๊ณ ํ•œ๋‹ค. contains: ๊ฒฐ๊ณผ ํ…์ŠคํŠธ ๋ถ€๋ถ„์ผ์น˜ ํ›„์ฒ˜๋ฆฌ. year_from/year_to: ๋ฐœํ–‰์—ฐ๋„ ํ•„ํ„ฐ. formats: xlsx/csv/json/sqlite (๊ธฐ๋ณธ 3์ข…). save=false ๋ฉด ์ €์žฅ ์—†์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋งŒ. out_dir ๋ฏธ์ง€์ • ์‹œ ํ™ˆ์˜ nl-output/. extra_params: ์ž„์˜ API ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ.

โš ๏ธ year_from/year_to/contains ๋Š” ๋กœ์ปฌ ํ›„์ฒ˜๋ฆฌ๋‹ค โ€” ์ด๋ฏธ ๋ฐ›์€ ๋ ˆ์ฝ”๋“œ์—๋งŒ ๊ฑธ๋ฆฐ๋‹ค. 500๊ฑด ์ƒํ•œ์„ ํ’€์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์„œ๋ฒ„์ธก ์—ฐ๋„ ํ•„ํ„ฐ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค(์‹ค์ธก: startPubYearยทpubYearStart ๋“ฑ 11๊ฐœ ํ›„๋ณด ์ „๋ถ€ ๋ฌด์‹œ๋จ). ์—ฐ๋„๋กœ ์ƒํ•œ์„ ์šฐํšŒํ•  ์ˆ˜๋Š” ์—†๋‹ค.

โš ๏ธ meta.cap_hit_terms ์— ๊ฒ€์ƒ‰์–ด๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๊ฒ€์ƒ‰์–ด๋Š” 500๊ฑด์—์„œ ์ž˜๋ฆฐ ๊ฒƒ์ด๋‹ค. max_records ๋ฅผ ์˜ฌ๋ ค๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค โ€” ๊ฒ€์ƒ‰์–ด๋ฅผ ์ขํžˆ๊ฑฐ๋‚˜ category ๋กœ ์ชผ๊ฐค ๊ฒƒ. meta.year_missing_dropped ๋Š” ๋ฐœํ–‰์—ฐ๋„๊ฐ€ ๋น„์–ด ์—ฐ๋„ ํ•„ํ„ฐ์—์„œ ํƒˆ๋ฝํ•œ ๊ฑด์ˆ˜๋‹ค (์‹ค์ธก 5.2%์˜ ๋ ˆ์ฝ”๋“œ๋Š” pubYearInfo ๊ฐ€ ๋น„์–ด ์žˆ๋‹ค).

Inputs: kwd, name, save, exact, +12 more.

nl_statusA
Read-only

์—ฐ๊ฒฐ ์ ๊ฒ€ โ€” ์ธ์ฆํ‚ค ๋ณด์œ  ์—ฌ๋ถ€ + ์†Œ์žฅ์ž๋ฃŒ ๊ฒ€์ƒ‰ API ์‹ค์ œ ์™•๋ณต 1ํšŒ.

Inputs: no named parameters.

Tool Schema Changelog

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

Loading tool schema changelogโ€ฆ

    TDQS

    A4.7/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a distinct purpose: nl_status verifies connectivity, nl_search performs a single query, and nl_collect aggregates multiple searches with saving and partitioning. Though nl_search and nl_collect both search, their roles are clearly separated (single vs. batch), so an agent cannot confuse them.

    Naming Consistency5/5

    All tool names share the consistent 'nl_' prefix and lowercase_snake_case format. While 'status' is a noun and 'search'/'collect' are verbs, the naming is predictable and each name directly reflects its function, making the pattern easy to infer.

    Tool Count5/5

    Three tools is a well-scoped count for a library search MCP, providing essential operations without redundancy. Each tool carries substantial functionality, especially nl_collect which bundles complex features like recursive partitioning and filtering, so every tool earns its place.

    Completeness5/5

    The set covers the full lifecycle of searching and collecting library records: health check, individual search, and batch collection with export options. It also addresses API limitations (e.g., 500-record cap) through built-in partitioning and provides explicit workarounds, leaving no obvious gaps for the stated domain.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables searching and collecting academic literature metadata from KISTI ScienceOn via Claude or CLI, supporting various document types and export formats.
      5
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables searching and harvesting Korean Citation Index literature, citation indices, and references via REST API and OAI-PMH.
      7
      4
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables searching the Kakao Daum Book Search API by title, author, publisher, or ISBN, retrieving detailed bibliographic and pricing metadata, and exporting results to xlsx, csv, json, or sqlite through MCP or CLI.
      4
      1
      MIT