na-openapi-mcp
Click on "Install 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., "@na-openapi-mcpSearch for education inequality and export results to csv"
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.
na-openapi-mcp
๐ ์ฌ์ฉ๋ โ ์ต๊ทผ 14์ผ ์กฐํ 0ํ(๊ณ ์ 0) ยท ํด๋ก 0ํ(๊ณ ์ 0) ยท ๋ฆด๋ฆฌ์ค ์์ฐ ๋์ ๋ค์ด๋ก๋ 3
2026-09-07 ์๋ ๊ฐฑ์ ยท ์ ์ฒด ์ด๋ ฅ์
docs/usage.csv. GitHub ํธ๋ํฝ ํต๊ณ๋ 14์ผ ์ฐฝ๋ง ์ ๊ณตํ๋ฏ๋ก ์ด ์ ์ฅ์๊ฐ ๋งค์ผ ์ฐ์ด ๋์ ํ๋ค.
๊ตญํ๋์๊ด(National Assembly Library of Korea) ์๋ฃ๊ฒ์ OpenAPI ๋ฅผ Claude ๋ฑ MCP ํด๋ผ์ด์ธํธ์์ ๋ฐ๋ก ์ฐ๋ ์๋ฒ + CLI. ๋์ยทํ์๋ ผ๋ฌธยท๊ตญ๋ด์ธ ๊ธฐ์ฌยท๊ตญํํ์๋กยท์์์ ๋ณด ๋ฑ 21์ข DB ๋ฅผ ๊ฒ์ยท์์งํ๊ณ xlsx/csv/json/sqlite ๋ก ๋ด๋ณด๋ ๋๋ค.
์๋งค ํ๋ก์ ํธ: nl-openapi-mcp(๊ตญ๋ฆฝ์ค์๋์๊ด ๋จํ๋ณธยทํ์๋ฌธํ) ยท kci-openapi-mcp(ํ์ ๋ ผ๋ฌธยท์ธ์ฉ์ง์) ยท scienceON-mcp(KISTI ๋ฌธํ)
์ด ๋๊ตฌ๊ฐ ํน๋ณํ ์ ๊ฒฝ ์ฐ๋ ๊ฒ
โ ๋ฏธ์ง์ ๊ฒ์ํญ๋ชฉ์ด ์ค๋ฅ ๋์ ์ ์ฒด ์นดํ๋ก๊ทธ๋ฅผ ๋๋ ค์ค๋๋ค
์ด API ์ต๋์ ํจ์ ์ ๋๋ค. ํตํฉ๊ฒ์์ ๊ฒ์ํญ๋ชฉ ์ด๋ฆ์ ๋ชจ๋ฅด๋ฉด ๊ฑฐ๋ถํ์ง ์๊ณ ๊ฒ์์ด๋ฅผ ํต์งธ๋ก ๋ฌด์ํฉ๋๋ค.
์ ์,์ค์ฑํ โ total=76 โ ์ ์
์ ์๋ช
,์ค์ฑํ โ total=13,097,591 โ ์ ์ฒด DB. ์ค๋ฅ๋ ๊ฒฝ๊ณ ๋ ์๋ค์ ์๋ช
์ ์์ธ๊ฒ์์์๋ ์ ํจํ ์ด๋ฆ์ด๋ผ ์คํ๊ฐ ์๋๋ผ ํท๊ฐ๋ ค์ ์ฐ๊ธฐ ์ฝ์ต๋๋ค.
๊ทธ๋๋ก ๋๋ฉด 1,300๋ง ๊ฑด์ '๊ฒ์ ๊ฒฐ๊ณผ'๋ก ์ค์ธํ๊ฒ ๋ฉ๋๋ค.
โ ์ด ์๋ฒ๋ ํ์ดํธ๋ฆฌ์คํธ๋ก ํธ์ถ ์ ์ ๊ฑฐ๋ถํ๊ณ ์ฌ๋ฐ๋ฅธ ์ด๋ฆ์ ์๋ ค์ค๋๋ค.
๊ฒ์ํญ๋ชฉ |
|
| 105 ยท 88 ยท 4 ยท 76 ยท 7 |
| ๊ฐ 13,097,591 (์ ์ฒด DB) |
โก ์กฐ์ฉํ ์ ๋จ ๋ฐฉ์ง
๋ฐ์ ๊ฒ์ด ์ ๋ถ์ธ์ง, ์๋ฆฐ ๊ฒ์ธ์ง๋ฅผ ํญ์ ๋ฉํ๋ก ์๋ ค์ค๋๋ค.
์ ํธ | ๋ป | ์ฒ๋ฐฉ |
|
| ์ฌ๋ฆฌ๋ฉด ํด๊ฒฐ |
|
| ๊ฒ์์์ ์ชผ๊ฐ์ผ ํจ |
| ์ ๋ ์ฝ๋ 0์ผ๋ก ์กฐ๊ธฐ ์ข ๋ฃ | ์ค๋ณต ์๋ตยท์๋ฒ ์ด์ ๊ฐ๋ฅ |
| ์์ฐ ์์ง์ผ๋ก ์กฐํ์กฐ์ฐจ ๋ชป ํ ๊ฒ์์ด |
|
| ์๋ฝ๋์ง๋ง ํญ์ 0๊ฑด์ธ ๊ฒ์ํญ๋ชฉ | ๋ค๋ฅธ ํญ๋ชฉ ์ฌ์ฉ |
| ์ฐ๋ ํํฐ๊ฐ ๋ฌด์๋จ(ํตํฉ๊ฒ์) |
|
| ์ ์ฒด ์นดํ๋ก๊ทธ ๊ท๋ชจ๊ฐ ๋ฐํ๋จ | ๊ฒ์ํญ๋ชฉ ํ์ธ |
ํ์ ํ๊ณ๋ pageno ์ต๋ 99 ร page_size ์
๋๋ค(์ค์ธก). ๊ธฐ๋ณธ๊ฐ(1000)์ด๋ฉด 99,000๊ฑด์ด๊ณ ,
page_size ๋ฅผ ๋ฎ์ถ๋ฉด ํ๊ณ๋ ํจ๊ป ๋ฎ์์ง๋๋ค โ ์ด ์๋ฒ๋ ๊ทธ๊ฒ๊น์ง ๋ฐ์ํด ๋ณด๊ณ ํฉ๋๋ค.
โข ๊ณต์ ๋ฌธ์์ ์ค์ ๊ฐ ๋ค๋ฅธ ๊ณณ์ ์ค์ธก์ผ๋ก ํ์ ํ์ต๋๋ค
๋ฌธ์(.hwp/.docx)๋ง ๋ณด๊ณ ๋ง๋ค๋ฉด ์กฐ์ฉํ ๊นจ์ง๋ ์ง์ ๋ค์ ๋๋ค.
ํญ๋ชฉ | ๊ณต์ ๋ฌธ์ | โ ์ค์ |
๋ ์ฝ๋ ํ๊ทธ |
|
|
| value โ name | name โ value |
์ ์ด๋ฒํธ ํ๋๋ช |
|
|
| 100 | 1000 |
์ธ์ฆํค | (์ธ๊ธ ์์) | Encoding ๊ฐ์ URL ์ ์ง์ ๊ฒฐํฉํด์ผ ํจ |
ํ์ด๋ผ์ดํธ ๋งํฌ์ | (์ธ๊ธ ์์) | ๋งค์นญ ํ๋์ |
์ ์ฒด ๋์กฐํ์ ๊ทผ๊ฑฐ๋ docs/NA_API_GUIDE.md ์ ์์ต๋๋ค.
Related MCP server: KISTI-MCP
์ค์น
1) Claude Code / Claude Desktop (uvx โ ๊ถ์ฅ)
{
"mcpServers": {
"na": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/rubatoyd/na-openapi-mcp", "na-mcp"],
"env": { "NA_API_KEY": "๋ฐ๊ธ๋ฐ์_์ธ์ฆํค" }
}
}
}2) Claude Desktop .mcpb ์ํด๋ฆญ
๋ฆด๋ฆฌ์ค์์ ๋ด๋ ค๋ฐ์ ์คํํฉ๋๋ค.
๊ฒฝ๋๋ณธ(na-openapi-mcp.mcpb, uvx ๊ฒฝ์ )๊ณผ Pythonยทuv ์์ด ๋๋ ์์ฒด์๊ฒฐ๋ณธ
(win-x64 ยท macos-arm64 ยท linux-x64)์ด ์์ต๋๋ค.
3) ๋ก์ปฌ ๊ฐ๋ฐ
git clone https://github.com/rubatoyd/na-openapi-mcp
cd na-openapi-mcp
uv sync --all-groups
uv run pytest -q
uv run na status4) ๋ค๋ฅธ MCP ํด๋ผ์ด์ธํธ
stdio ์ ์ก์ด ๊ธฐ๋ณธ์
๋๋ค. HTTP ๊ฐ ํ์ํ๋ฉด
na-mcp --transport streamable-http --host 127.0.0.1 --port 9126
(ํ๊ฒฝ๋ณ์ NA_MCP_TRANSPORTยทNA_MCP_HOSTยทNA_MCP_PORT ๋ ์ง์).
์ธ์ฆํค
๊ณต๊ณต๋ฐ์ดํฐํฌํธ data.go.kr ์์ ๊ตญํ ๊ตญํ๋์๊ด_์๋ฃ๊ฒ์ ์๋น์ค
(๋ฐ์ดํฐ์
15098174) ํ์ฉ์ ์ฒญ ํ ๋ฐ๊ธ๋ฐ์ต๋๋ค. ๊ฐ๋ฐ๊ณ์ ํธ๋ํฝ์ 10,000๊ฑด/์ผ ์
๋๋ค.
na_detailยทna_toc ๋ฅผ ์ฐ๋ ค๋ฉด ์์ธ์ ๋ณด์กฐํ ์๋น์ค(15098175)๋ ํจ๊ป ์ ์ฒญํ์ธ์ โ
์ธ์ฆํค๋ ๊ณ์ ๋จ์๋ผ ๊ฐ์ ํค๊ฐ ๊ทธ๋๋ก ํตํฉ๋๋ค.
NA_API_KEY=๋ฐ๊ธ๋ฐ์_ํค # Decoding(์๋ฌธ) ๊ถ์ฅ
NA_API_KEY_ENCODED= # Encoding ๊ฐ๋ง ์์ผ๋ฉด ์ด์ชฝ์
NA_OS_TRUST=1 # ๊ต์ก๋งยท์ฌ๋ด๋ง SSL ์ธํฐ์
์
๋์(๊ธฐ๋ณธ 1)๐ data.go.kr ์ ์ธ์ฆํค๋ฅผ Encoding / Decoding ๋ ๋ฒ๋ก ์ค๋๋ค. ์ด API ๋ Encoding ๊ฐ์ URL ์ ์ง์ ๊ฒฐํฉํด์ผ ํ๋๋ฐ(์ค์ธก), ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
params=๋ก ๋๊ธฐ๋ฉด%2B๊ฐ%252B๋ก ์ด์ค ์ธ์ฝ๋ฉ๋์ด ์กฐ์ฉํ ์ธ์ฆ ์คํจํฉ๋๋ค. ์ด๋ ์ชฝ์ ๋ฃ๋ ์ฝ๋๊ฐ ์์์ ๋ณํํ๋ฏ๋ก ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
MCP ๋๊ตฌ
๋๊ตฌ | ํ๋ ์ผ |
| ์ธ์ฆํค ๋ณด์ ์ฌ๋ถ + ์ค์ ์๋ณต 1ํ |
| ์๋ฃ๊ฒ์. ์ ๋จ ์ ํธ๋ฅผ ํจ๊ป ๋ฐํ |
| ๊ฒ์์ด ํฉ์งํฉ ์์ง โ xlsx/csv/json/sqlite |
| ์ ์ด๋ฒํธ 1๊ฑด ์์ธ์ ๋ณด |
| ์ ์ด๋ฒํธ 1๊ฑด ๋ชฉ์ฐจ |
| ๊ฒ์ํญ๋ชฉยทdbname ์ ํจ๊ฐ + ์ค์ธก ๊ทผ๊ฑฐ(census) |
๊ฒ์์ด ํ์
๊ฒ์ํญ๋ชฉ,ํค์๋ ์
๋๋ค. | ๋ก ์ด์ผ๋ฉด AND ๋ก ๋ฌถ์
๋๋ค.
์ ์ฒด,๊ต์ก๋ถํ๋ฑ
์ ์ฒด,๊ต์ก|์๋ฃ๋ช
,๋ถํ๋ฑ โ ANDOR(ํฉ์งํฉ)์ API ์ ๋ฌธ๋ฒ์ด ์์ด na_collect(terms=[โฆ]) ๊ฐ ๋ง๋ญ๋๋ค.
ํตํฉ๊ฒ์ ๊ฒ์ํญ๋ชฉ(7์ข
): ๊ธฐ๋ณธ๊ฒ์ ์ ์ฒด ์๋ฃ๋ช
์ ์ ๋ฐํ์ ํค์๋ ์ฒญ๊ตฌ๊ธฐํธ
dbname ์ ์ง์ ํ๋ฉด ์์ธ๊ฒ์์ผ๋ก ์ ํ๋๋ฉฐ ๊ฒ์ํญ๋ชฉ ์ดํ๊ฐ DB๋ง๋ค ๋ฌ๋ผ์ง๋๋ค
(ํ์๋
ผ๋ฌธ=๋
ผ๋ฌธ๋ช
ยท์ง๋๊ต์, ๊ตญ๋ด๊ธฐ์ฌ=๊ธฐ์ฌ๋ช
, ํ์ ์งยท์ ๋ฌธ=์๋ก์ง๋ช
/์ ๋ฌธ๋ช
ํ ๋ฉ์ด๋ฆฌ).
์ ํํ ๋ชฉ๋ก์ na_fields ๋ก ํ์ธํ์ธ์.
CLI
na status
na fields # ๊ฒ์ํญ๋ชฉยทdbname ์ ํจ๊ฐ (--json ์ผ๋ก census ์ ์ฒด)
na search "์ ์ฒด,๊ต์ก๋ถํ๋ฑ" --max-records 20
na search "์ ์๋ช
,์์ฐ๋" --dbname ํ์๋
ผ๋ฌธ
na collect --terms "์ ์ฒด,๊ต์ก๋ถํ๋ฑ" "์ ์ฒด,๊ต์ก๊ฒฉ์ฐจ" --max-records 2000
na detail MONO12026000012887
na toc MONO12026000012887
# ์ฐ๋ ๋ฒ์๋ ์์ธ๊ฒ์์ option ์ผ๋ก๋ง ๊ฑธ๋ฆฝ๋๋ค(ํตํฉ๊ฒ์์์๋ ๋ฌด์๋จ)
na search "์๋ฃ๋ช
,๊ต์ก" --dbname ์ผ๋ฐ๋์ --option "๋ฐํ๋
๋,2000|๋ฐํ๋
๋,2010"์๋ต ํ๋
๋ ์ฝ๋๋ ๊ณ ์ ์คํค๋ง๊ฐ ์๋๋๋ค. <item><name>ยท<value> ์์ด๊ณ ์ด๋ฆ ์งํฉ์ด
์๋ฃ์ข
๋ง๋ค ๋ค๋ฆ
๋๋ค โ ํ์ ํ๋๋ง ํด๋ ์๋ฃ๋ช
(๋์) / ๋
ผ๋ฌธ๋ช
(ํ์๋
ผ๋ฌธ) /
๊ธฐ์ฌ๋ช
(๊ธฐ์ฌ) / ์๋ก์ง๋ช
/์ ๋ฌธ๋ช
(ํ์ ์งยท์ ๋ฌธ) / ์ ๋๋ช
(์ ์์ ๋) / ์๊ฑด(ํ์๋ก) /
์์๋ช
(์์์ ๋ณด) / ๋ฒ์ญ๋ฒ๋ น๋ช
/ ํ๊ทธ๋ฆผ๋ช
์ผ๋ก ๊ฐ๋ฆฝ๋๋ค.
์๋ ค์ง ์ด๋ฆ์ ๊ณตํต ์ปฌ๋ผ์ผ๋ก ์ ๊ทํํ๊ณ ์๋ณธ์ raw ์ ๊ทธ๋๋ก ๋ณด์กดํฉ๋๋ค.
์ฃผ์ํ ๊ฐ๋ค(์ ๋ถ ์ค์ธก):
์๋ด๋ฌธ์ด ๊ฐ ์๋ฆฌ์ ์ต๋๋ค โ E-BOOK ์
DDC๋ 99.95% ๊ฐ์ ์ํํ๋ก๋ง ์ด๋ ๊ฐ๋ฅํจ์ ๋๋ค. ์ ๊ทํ ํ๋๋ ๋น์ฐ๊ณplaceholder_fields์ ์ด๋ฆ์ ๋จ๊น๋๋ค(์๋ฌธ์raw์).์ฐ๋๊ฐ 4์๋ฆฌ๊ฐ ์๋ ์ ์์ต๋๋ค โ
201u(MARC ๋ถํ์ ์ฐ๋), ๋น๊ฐ,0.์ด๋ก์ ๋ฌด=Y์ฌ๋ ์ด๋ก ๋ณธ๋ฌธ์ ๋ฐ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์์ ํ ํ ์คํธ๋ ๊ตญํ์์์ ๋ณด(์ ์์ด์ ๋ฐ ์ฃผ์๋ด์ฉ)ยท๊ตญํํ์๋ก(๋ด์ฉ)์๋ง ์์ต๋๋ค.๋ชฉ์ฐจ๊ฐ ์ ๊ฑด ์๋ ์๋ฃ์ข : E-BOOK ยท ํ์ ์ง,์ก์ง ยท ์ ๋ฌธ ยท ๊ตญ์ธ๊ธฐ์ฌ ยท ๋์์์๋ฃ.
๊ฒ์ฆ ์ํ
ํ๊ท ํ ์คํธ 170๊ฑด. CI ๋ ํ ์คํธ๋ฟ ์๋๋ผ ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ๋ก ๋์ธ ์ ์๋์ง๋ฅผ ๋ด ๋๋ค โ ์ ๊ท ์์กด์ฑ ํด์์์
mcp.server.fastmcp์กด์ฌ ํ์ธ, ์ค์ stdio ํธ๋์ ฐ์ดํฌ, ๋๊ตฌ 6์ข ๋ ธ์ถ, ๋ฌดํค CLI ๊ธฐ๋, ๋น๋ฐ ํ์ผ ๋ฏธ์ถ์ .API ์ฌ์ค์ ์ ๋ถ ๋ผ์ด๋ธ ์๋ณต์ผ๋ก ํ์ ํ์ต๋๋ค(๋ฌธ์ยท์๋งค ํ๋ก์ ํธ์์ ์ฎ๊ฒจ ์ ์ง ์์). ์๋ฃ์ข 13์ข ํ๋ census ํ๋ณธ ์ฝ 21,000๊ฑด. ์ฌํ:
scripts/probe_*.py.์์ธ ๊ทผ๊ฑฐ์ ๊ฒ์ฆ ๋ฑ๊ธ(โ ์ค์ธก / ๐ ๋ฌธ์๊ทผ๊ฑฐ / โ ๋ฏธ๊ฒ์ฆ)์
docs/NA_API_GUIDE.md์ ์์ต๋๋ค.
๋ผ์ด์ ์ค
MIT
Available Tools
6 toolsna_collectA
[์์ง] ๊ฒ์์ด๋ค์ ๊ฐ๊ฐ ์กฐํํด ํฉ์งํฉ์ผ๋ก ๋ชจ์ผ๊ณ ํ์ผ๋ก ์ ์ฅํ๋ค.
terms: ๊ฒ์ํญ๋ชฉ,ํค์๋ ํ์์ ๊ฒ์์ด ๋ชฉ๋ก. ๊ฐ๊ฐ ๊ฐ๋ณ ๊ฒ์ ํ ํฉ์งํฉ(OR)์ผ๋ก ๋ณํฉํ๋ค.
์ด API ์ | ๋ AND ์ด๋ฏ๋ก OR ์ ์ด๋ ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
์: ["์ ์ฒด,๊ต์ก๋ถํ๋ฑ", "์ ์ฒด,๊ต์ก๊ฒฉ์ฐจ", "์๋ฃ๋ช
,๊ต์ก ํํ์ฑ"]
search: ๋จ์ผ ๊ฒ์์ด(terms ๋์ ).
โ ๏ธ year_from/year_to/contains ๋ ๋ก์ปฌ ํ์ฒ๋ฆฌ๋ค โ ์ด๋ฏธ ๋ฐ์ ๋ ์ฝ๋์๋ง ๊ฑธ๋ฆฌ๋ฉฐ
ํ์ ํ๊ณ๋ฅผ ํ์ด์ฃผ์ง ์๋๋ค. ์๋ฒ์ธก ์ฐ๋ ํํฐ๋ ์์ธ๊ฒ์์ option ๋ฟ์ด๋ฏ๋ก
์ฐ๋๋ก ๋ฒ์๋ฅผ ์ขํ๋ ค๋ฉด dbname ๊ณผ ํจ๊ป option="๋ฐํ๋
๋,2000|๋ฐํ๋
๋,2010" ์ ์ธ ๊ฒ.
formats: xlsx/csv/json/sqlite (๊ธฐ๋ณธ 3์ข ). save=false ๋ฉด ์ ์ฅ ์์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ง. out_dir ๋ฏธ์ง์ ์ ํ์ na-output/.
๋ฐํ ๋ฉํ์ cap_hit_terms ๋ ํ์ ํ๊ณ(99,000๊ฑด)์ ๊ฑธ๋ฆฐ ๊ฒ์์ด๋ฅผ, incomplete_terms ๋
์ฌ์๋ ํ์๋ ์คํจํ ํ์ด์ง๊ฐ ์๋ ๊ฒ์์ด๋ฅผ ์ง๋ชฉํ๋ค โ ๋ ๋ค ์ ์๊ฐ ์๋๋ผ๋ ๋ป์ด๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| save | No | ||
| terms | No | ||
| dbname | No | ||
| option | No | ||
| search | No | ||
| formats | No | ||
| out_dir | No | ||
| year_to | No | ||
| contains | No | ||
| page_size | No | ||
| year_from | No | ||
| max_records | No | ||
| extra_params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds rich behavioral context: it writes files to disk (formats, save=false preview mode, out_dir default), discloses the '|' means AND operator quirk, exposes the 99,000-record retrieval limit, and explains that cap_hit_terms/incomplete_terms in return metadata signal incomplete data. This complements the openWorldHint annotation with concrete completeness caveats โ exactly the context structured fields cannot convey.
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 long but information-dense and well-sectioned: purpose first, then terms semantics, the warning block (marked with โ ๏ธ), formatting/output defaults, and return metadata. Every sentence carries operational value given the 14-parameter surface and zero schema coverage; it could be slightly tightened, but the structure earns its length.
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 complex tool with no output schema and no parameter descriptions, it covers the critical operational aspects: aggregation semantics, parameter defaults, the local-vs-server filtering pitfall, and the meaning of return metadata fields. Minor gaps remain for name, page_size, max_records, and extra_params, which are left undocumented at 0% coverage.
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 coverage, the description carries the full burden and succeeds: it defines the terms format with an example list, the search single-term alternative, formats allowed values (xlsx/csv/json/sqlite), save=false preview behavior, out_dir default (home na-output/), and the option='๋ฐํ๋ ๋,2000|๋ฐํ๋ ๋,2010' syntax for server-side filtering. Roughly 10 of 14 parameters receive meaningful semantic detail beyond their bare 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 opens with '[์์ง]' and states it queries each search term, aggregates them as a union, and saves to file. This specific verb+resource clearly differentiates it from siblings like na_search, na_detail, and na_status. The union (OR) semantics plus a concrete example make its function unambiguous.
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 gives clear context: use `terms` for multiple searches merged by union, `search` for a single term instead of terms, and it explains the OR-vs-AND operator quirk with an example. It also warns when NOT to rely on year_from/year_to (local post-processing only) and directs users to `option` with `dbname` for server-side year filtering. However, it never names sibling tools as alternatives (e.g., when to prefer na_search), so exclusions remain implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
na_detailARead-only
[์์ธ์ ๋ณด] ์ ์ด๋ฒํธ 1๊ฑด์ ์์ง์ ๋ณด๋ฅผ ์กฐํํ๋ค.
controlno: ๊ฒ์ ๊ฒฐ๊ณผ์ ์ ์ด๋ฒํธ (์: MONO12026000012887, KINX2026037525).
๐ด ๊ฒ์ ๊ฒฐ๊ณผ(na_search ์ raw)์ ํ๋ ์งํฉยท๊ฐ์ด ์์ ํ ๋์ผํ๋ค โ โ
์ค์ธก
(์ผ๋ฐ๋์ 19 ยท ํ์๋
ผ๋ฌธ 18 ยท ๊ตญ๋ด๊ธฐ์ฌ 13 ยท ๊ณ ์ 19 ยท ์น์๋ฃ 17๊ฐ ์ ๋ถ ์์ธ์ ์ฉ ํ๋ 0).
์ฆ ์ด๋ฏธ ๊ฒ์ํ ์๋ฃ๋ผ๋ฉด ์ด ๋๊ตฌ๋ฅผ ๋ถ๋ฅผ ์ด์ ๊ฐ ์๋ค. ์ฟผํฐ(10,000๊ฑด/์ผ)๋ง ์ด๋ค.
์ธ ์๋ฆฌ๋ ์ ์ด๋ฒํธ๋ง ์๋ ์๋ฃ๋ฅผ ์กฐํํ ๋๋ค. ๋ชฉ์ฐจ ๋ณธ๋ฌธ์ด ํ์ํ๋ฉด na_toc ๋ฅผ ์ธ ๊ฒ
(๊ทธ์ชฝ์ ๊ฒ์์ ์๋ ๋ด์ฉ์ ์ค์ ๋ก ์ค๋ค).
โ ๏ธ ์กด์ฌํ์ง ์๋ ์ ์ด๋ฒํธ๋ ERR04 ๋ก ์๋ตํ๋ค(์ค์ธก) โ ์ ์ฉ '์๋ฃ ์์' ์ฝ๋๊ฐ ์์ด
์ผ์ ์ค๋ฅ์ ๊ตฌ๋ถ๋์ง ์๋๋ค. ์คํจํ๋ฉด ์ ์ด๋ฒํธ๋ถํฐ ํ์ธํ ๊ฒ.
โ ๏ธ ๋ณ๋ ํ์ฉ์ ์ฒญ ๋์์ด๋ค(data.go.kr 15098175). ์๋ฃ๊ฒ์ ํค๋ง์ผ๋ก๋ ์ ๊ทผํ ์ ์๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| controlno | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it discloses measured operational traits: the returned field set is identical to na_search (redundancy), each call consumes daily quota (10,000/day), nonexistent control numbers still return ERR04 making them indistinguishable from transient errors, and access requires a separate data.go.kr application. This is exactly the class of behavioral context annotations cannot carry.
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?
Although longer than typical descriptions, every sentence earns its place: purpose is front-loaded, the critical redundancy caveat follows immediately, then error and auth warnings. Structured formatting (bold, emoji markers, bullet separations) makes the dense content scannable, and there is no filler or repetition.
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 single-parameter read-only lookup with no output schema and minimal annotations, the description is complete: purpose, parameter origin, output equivalence (which doubles as return-value documentation since fields mirror na_search), error semantics, quota impact, and access prerequisites are all covered. The empirical field-count breakdown per document type reinforces the redundancy claim without leaving gaps.
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 fully compensates: it defines controlno as the control number taken from na_search results and supplies two concrete format examples (MONO12026000012887, KINX2026037525). This gives the agent both the provenance and the shape of the only 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 opening line states a specific verb and resource: '์ ์ด๋ฒํธ 1๊ฑด์ ์์ง์ ๋ณด๋ฅผ ์กฐํํ๋ค' (retrieves bibliographic information for one control number). It further distinguishes from siblings by asserting the field set is empirically identical to na_search's raw output, while na_toc is named as the tool that returns genuinely new content.
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 is exemplary on this dimension: explicit when-to-use ('์ธ ์๋ฆฌ๋ ์ ์ด๋ฒํธ๋ง ์๋ ์๋ฃ๋ฅผ ์กฐํํ ๋'), explicit when-not-to-use ('์ด๋ฏธ ๊ฒ์ํ ์๋ฃ๋ผ๋ฉด ์ด ๋๊ตฌ๋ฅผ ๋ถ๋ฅผ ์ด์ ๊ฐ ์๋ค'), and a named alternative for a specific need (na_toc for table-of-contents text). No inference is required from the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
na_fieldsARead-only
๊ฒ์ํญ๋ชฉยทdbname ๋ฑ ์ด API ์์ ์ค์ ๋ก ํตํ๋ ๊ฐ ๋ชฉ๋ก๊ณผ ์ค์ธก ๊ทผ๊ฑฐ.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds valuable context that the values are 'actually accepted' and backed by 'measured evidence,' indicating empirical verification rather than mere documentation.
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 compact sentence that front-loads the core value proposition: a list of working values plus the empirical basis. It contains no filler and does not repeat information already present in annotations or schema.
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 parameterless, read-only metadata tool, the description adequately conveys what the tool returns and why it is reliable. The lack of a response format is acceptable given the tool's simplicity and supporting annotations.
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 the schema trivially covers all parameters and the description need not add parameter-level semantics. The baseline of 4 applies because there are no parameters to explain.
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 identifies the tool as a reference list of values actually accepted by the API, with examples like search items and dbname, making its purpose as a metadata/inspection tool clear. It lacks an explicit verb and does not contrast with sibling tools, but the resource and intent are unambiguous.
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 implies the tool should be used to discover which field values and dbnames are valid for this API, which is a natural prerequisite for search/detail calls. However, it does not explicitly state when to use this tool over alternatives or provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
na_searchARead-only
[์๋ฃ๊ฒ์] ๊ตญํ๋์๊ด์ ๋์ยทํ์๋ ผ๋ฌธยท๊ตญ๋ด์ธ ๊ธฐ์ฌ ๋ฑ ๋ชฉ๋กDB๋ฅผ ๊ฒ์ํ๋ค.
search: ๊ฒ์ํญ๋ชฉ,ํค์๋ ํ์์ด ํ์๋ค(๊ทธ๋ฅ ํค์๋๋ง ๋ฃ์ผ๋ฉด ์ค๋ฅ).
| ๋ก ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฐ๊ฒฐํ๋ฉด AND ๋ก ๋ฌถ์ธ๋ค. ์: ์ ์ฒด,๊ต์ก|์๋ฃ๋ช
,๋ถํ๋ฑ.
OR(ํฉ์งํฉ)์ด ํ์ํ๋ฉด na_collect(terms=[โฆ]) ๋ฅผ ์ธ ๊ฒ โ ์ด API ์ OR ๋ฌธ๋ฒ์ ์๋ค.
๊ฒ์ํญ๋ชฉ(ํตํฉ๊ฒ์ ์ ์ฉ 7์ข
): ๊ธฐ๋ณธ๊ฒ์ ยท ์ ์ฒด ยท ์๋ฃ๋ช
ยท ์ ์ ยท ๋ฐํ์ ยท ํค์๋ ยท ์ฒญ๊ตฌ๊ธฐํธ
๐ด ๊ทธ ๋ฐ์ ๊ฐ์ ์ฐ๋ฉด ์ค๋ฅ๊ฐ ๋์ง ์๊ณ ๊ฒ์์ด๊ฐ ํต์งธ๋ก ๋ฌด์๋์ด ์ ์ฒด ์นดํ๋ก๊ทธ
13,097,591๊ฑด์ด ๋ฐํ๋๋ค. ํนํ ์ ์๋ช
์ ์์ธ๊ฒ์(dbname ์ง์ ์)์์๋ ์ ํจํ
์ด๋ฆ์ด๋ผ ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค โ ํตํฉ๊ฒ์์์๋ ๋ฐ๋์ ์ ์ ๋ฅผ ์ธ ๊ฒ.
์ด ๋๊ตฌ๋ ํ์ดํธ๋ฆฌ์คํธ๋ก ๋ฏธ๋ฆฌ ๋ง๊ณ ์ค๋ฅ๋ฅผ ๋๋ ค์ค๋ค.
dbname: ์ง์ ํ๋ฉด ์์ธ๊ฒ์(/detail)์ผ๋ก ์ ํ๋๋ค. 21์ข
์ค ์ ํํ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค:
์ผ๋ฐ๋์ ยท E-BOOK ยท ๊ณ ์ ยท ์ธ๋ฏธ๋์๋ฃ ยท ์น์๋ฃ ยท ํ์๋
ผ๋ฌธ ยท ๊ตญ๋ด๊ธฐ์ฌ ยท ๊ตญ์ธ๊ธฐ์ฌ ยท
ํ์ ์ง,์ก์ง ยท ์ ๋ฌธ ยท ์ ์์ ๋ ยท ๋์์์๋ฃ ยท ์ค๋์ค์๋ฃ ยท ์ ์๋งค์ฒด ยท ๋ง์ดํฌ๋กํผ์๋ฃ ยท
์ง๋/๊ธฐํ์๋ฃ ยท ์ธ๊ตญ๋ฒ๋ฅ ๋ฒ์ญDB ยท ๊ตญํํ์๋ก ยท ๊ตญํ์์์ ๋ณด ยท ํ,๊ทธ๋ฆผDB ยท ์ง์๊ณต์
๐ด ์์ธ๊ฒ์์ ๊ฒ์ํญ๋ชฉ ์ดํ๊ฐ DB๋ง๋ค ๋ค๋ฅด๊ณ (ํ์๋
ผ๋ฌธ=๋
ผ๋ฌธ๋ช
, ์ผ๋ฐ๋์=์๋ฃ๋ช
,
๊ตญ๋ด๊ธฐ์ฌ=๊ธฐ์ฌ๋ช
, ๊ตญํ์์์ ๋ณด=์์๋ช
, ๊ตญํํ์๋ก=์๊ฑด โฆ) ํตํฉ๊ฒ์๊ณผ ๋ฌ๋ฆฌ
ํ๋ฆฌ๋ฉด ERR04 ๋ก ์คํจํ๋ค(์ค์ธก). ์ด ๋๊ตฌ๊ฐ ํธ์ถ ์ ์ ๊ฒ์ฆํด ๋ง์ผ๋ฏ๋ก
์ ํํ ์ดํ๋ na_fields ๋ก ํ์ธํ ๊ฒ.
option: ์์ธ๊ฒ์ ์ ์ฉ. ๋ฐํ๋
๋,2000|๋ฐํ๋
๋,2010 (ํ๋๋ฉด ๊ทธ ํด๋ถํฐ ํ์ฌ๊น์ง,
๋์ด๋ฉด between), ์๋ฌธ์ ๋ฌด,1(์ )/0(๋ฌด).
page_size: ํ ํ์ด์ง ๊ฑด์(์ต๋ 1000). ๊ธฐ๋ณธ์ ์ต๋์น. max_records: ์ต๋ ํ์ ๊ฑด์.
โ ๏ธ ํ์ ํ๊ณ 99,000๊ฑด โ pageno ๊ฐ ์ต๋ 99์ด๊ณ ํ์ด์ง๋น ์ต๋ 1000๊ฑด์ด๋ค(์ค์ธก).
total ์ด ์ด๋ฅผ ๋์ผ๋ฉด ์๋ต์ cap_hit ์ด ์ฐธ์ด ๋๊ณ , ๊ทธ๋๋ max_records ๋ฅผ ์ฌ๋ ค๋
๋ ๋ฐ์ ์ ์๋ค(๊ฒ์์์ ์ชผ๊ฐ์ผ ํ๋ค). truncated ๋ max_records ๋ฅผ ์ฌ๋ฆฌ๋ฉด ํด๊ฒฐ๋๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| dbname | No | ||
| option | No | ||
| search | Yes | ||
| page_size | No | ||
| max_records | No | ||
| extra_params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses critical behaviors: invalid search-field values silently return the entire 13,097,591-record catalog, dbname mismatches fail with ERR04, and the API caps retrieval at 99,000 records via pageno 99 and page_size 1000. It also explains cap_hit and truncated semantics.
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?
Although long, the description is densely informative and well-structured: purpose first, then search syntax, field whitelist, dbname behavior, option syntax, paging, and limits. Warnings and examples are placed exactly where confusion would occur, and no sentence is filler.
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 description covers nearly every operational constraint needed to invoke this complex tool correctly, including validation behavior, pagination limits, and response flags. It falls slightly short by not describing extra_params and not summarizing the general result shape, especially since there is no output schema.
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, this description fully compensates for search, dbname, option, page_size, and max_records, including required formats, allowed values, defaults, and failure modes. The only gap is extra_params, which appears in the schema but is never explained in the description.
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 first sentence names a specific action and resource: searching the National Assembly Library catalog DB for books, theses, and articles. It further distinguishes this tool from siblings by explicitly routing OR needs to na_collect and field-vocabulary checks to na_fields.
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 gives explicit when-to-use guidance: use na_collect when OR semantics are needed, use na_fields to confirm valid field names for detailed search, and use dbname to switch to detailed search. It also explains what happens if the documented format is not followed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
na_statusARead-only
์ฐ๊ฒฐ ์ ๊ฒ โ ์ธ์ฆํค ๋ณด์ ์ฌ๋ถ + ์๋ฃ๊ฒ์ API ์ค์ ์๋ณต 1ํ.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is known. The description adds useful behavioral context: it discloses that the tool performs an actual network round trip and verifies authentication-key possession. This goes beyond the annotations, though it stops short of explaining failure modes or side effects like potential latency.
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 front-loaded sentence that conveys the core purpose and key behavioral nuance without any filler. Every token earns its place.
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 health check this is mostly adequate: the agent knows what is checked and that a network call occurs. However, there is no output schema and the description does not indicate what the response looks like or how to interpret the result, leaving a notable gap.
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 the empty schema fully covers all parameters. The description does not need to explain parameter meanings; the baseline of 4 applies because no parameter ambiguity exists.
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 states a specific action โ 'connection check' โ with concrete scope: whether an authentication key is held and one actual round trip to the data-search API. This clearly distinguishes it from sibling data-retrieval tools like na_search or na_detail.
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 implies usage as a connectivity/health check before other API calls, but it does not explicitly state when to use it versus alternatives, nor does it mention any exclusions. The purpose is clear enough to infer the context, 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.
na_tocARead-only
[๋ชฉ์ฐจ] ์ ์ด๋ฒํธ 1๊ฑด์ ๋ชฉ์ฐจ์ ๋ณด๋ฅผ ์กฐํํ๋ค.
controlno: ๊ฒ์ ๊ฒฐ๊ณผ์ ์ ์ด๋ฒํธ.
โ ๏ธ ์๋ฌธ์ HTML ์ด ์ด์ค์ผ์ดํ๋์ด ์ค๋ฏ๋ก ์ด ๋๊ตฌ๊ฐ ํ๊ทธ๋ฅผ ํ์ด ์ค๋ฐ๊ฟ ํ
์คํธ๋ก ์ ๋ฆฌํ๋ค.
์ค์ ์ฃผ๋ ฅ ๊ตฌ๋ถ์๋ <p> ๋ค(์ค์ธก 10/10) โ ๊ณ์ธต์ ํ ์ ๋ค์ฌ์ฐ๊ธฐ๋ก ํํ๋๋ฏ๋ก
๊ทธ๋๋ก ๋ณด์กดํด ๋๋ ค์ค๋ค.
โ ๏ธ ๋ชฉ์ฐจ๊ฐ ์๋ ์๋ฃ๋ ์ ์์ด๋ค. ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ชฉ์ฐจ ํ๋๊ฐ 'Y' ์ธ ์๋ฃ๋ง ๋ถ๋ฅด๋ฉด
ํํธ์ถ๊ณผ ์ฟผํฐ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๋ค(๊ฐ๋ฐ๊ณ์ 10,000๊ฑด/์ผ).
๐ด ๋ค์ ์๋ฃ์ข
์ ๋ชฉ์ฐจ ๊ฐ ์ ๊ฑด 'N' ์ด๋ผ ์ด ๋๊ตฌ๋ฅผ ๋ถ๋ฅผ ์ด์ ๊ฐ ์์ ์๋ค(census ์ค์ธก):
E-BOOK ยท ํ์ ์ง,์ก์ง ยท ์ ๋ฌธ ยท ๊ตญ์ธ๊ธฐ์ฌ ยท ๋์์์๋ฃ.
๐ด ๋ชฉ์ฐจ์ ๋ณด์์ ์ผํฐ๋ โ ํ๋๊ทธ๊ฐ 'Y' ์ธ๋ฐ ๋ณธ๋ฌธ์ด ๊ทธ ๋ง์ ๋ฐ๋ณต์ธ ์๋ฃ๊ฐ ์๋ค
(๊ณ ์์์ ํ๋ณธ 5/5). ์ต๋ 792์๋ผ ๊ธธ์ด ๊ฒ์ฌ๋ฅผ ํต๊ณผํ๋ฏ๋ก ์ด ๋๊ตฌ๊ฐ ๊ฑธ๋ฌ ๋น ๋ฌธ์์ด๋ก
๋๋ ค์ฃผ๊ณ , ์๋ฌธ์ envelope.toc_sentinel ์ ๋จ๊ธด๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| controlno | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: it explains that the raw HTML is escaped, that the tool unescapes and converts it to newline text, that the main delimiter is '<p>', and that hierarchy is preserved via line indentation. It also documents the no-TOC case as normal. The readOnlyHint/openWorldHint annotations are consistent and this context enriches them significantly.
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: purpose first, then parameter meaning, then usage warnings presented as clear bullet-like lines. Every sentence earns its place, but the ambiguous phrase '๋ค์ ์๋ฃ์ข ์' promises a list of excluded material types that is not actually enumerated, slightly weakening the structure.
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 simple one-parameter read tool with no output schema, the description covers the input source, output transformation, empty-result behavior, and quota-aware usage guidance. The main gap is the unspecified list of material types that all have TOC='N', which leaves part of the exclusion advice incomplete.
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 by explaining that 'controlno' is the control number from search results ('๊ฒ์ ๊ฒฐ๊ณผ์ ์ ์ด๋ฒํธ'). This adds meaningful sourcing context beyond the bare schema. It does not include example formats, but with a single string parameter this is adequate.
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 states a specific verb and resource: it retrieves table-of-contents information for one control number ('์ ์ด๋ฒํธ 1๊ฑด์ ๋ชฉ์ฐจ์ ๋ณด๋ฅผ ์กฐํํ๋ค'). The [๋ชฉ์ฐจ] prefix and the scope make the purpose unambiguous, though it does not explicitly differentiate itself from sibling tools like na_detail or na_fields.
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 gives clear selection criteria: call this tool only when the search result's '๋ชฉ์ฐจ' field is 'Y', and warns that records without TOC are normal. It also notes that certain material types have all 'N' values and should not be called. It does not name alternative tools, so it stops short of full when-to-use-versus-alternatives guidance.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.1- First observed
na_collect - First observed
na_detail - First observed
na_fields - First observed
na_search - First observed
na_status - First observed
na_toc
TDQS
Each tool targets a distinct operation: health check, search, single-record detail, union collection/export, table of contents, and field validation. Even where na_search and na_collect both query, the descriptions clearly separate raw querying from OR aggregation and saving results.
All tools share the na_ prefix and use clear lowercase names, which makes the set feel coherent. However, the pattern mixes verbs (search, collect) with nouns/abbreviations (status, detail, toc, fields), so it is not perfectly uniform.
Six tools is a well-scoped size for this read-only library search API. Each tool earns its place by covering a distinct capability without unnecessary duplication.
The surface covers the main workflows: checking access, searching, retrieving item-level detail, harvesting OR-combined results, getting TOC data, and discovering valid field/dbname values. There are no obvious dead ends for the stated domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
APICK Korean data, OCR, search, conversion, image generation and asynchronous TTS
Access Koreaโs G2B procurement and Nara Market data for bid notices, awards, contracts, statisticsโฆ
Find official Korean public datasets, agency-site menus, disclosure listings, and source URLs.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access real-time legislative data from the Korean National Assembly including members, bills, votes, and schedules through 276 Open APIs. Supports dual transport modes (stdio/HTTP), configurable Lite/Full tool profiles, and in-memory caching for efficient querying.1789MIT
- AlicenseNot gradedqualityBmaintenanceIntegrates with KISTI's ScienceON, NTIS, and DataON APIs to search and retrieve scientific papers, patents, reports, national R\&D projects, and research data.15Creative Commons Attribution Non Commercial 4.0 International
- AlicenseAqualityAmaintenanceEnables searching and collecting academic literature metadata from KISTI ScienceOn via Claude or CLI, supporting various document types and export formats.5MIT
- AlicenseAqualityAmaintenanceSearch and harvest Korean academic literature and book bibliography metadata from the National Library of Korea Seoji OpenAPI via MCP or CLI.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rubatoyd/na-openapi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server