io.github.rubatoyd/kosis-openapi-mcp
This server lets you search, inspect, retrieve, and export KOSIS Korean national statistics and major indicators via MCP tools.
Check API key/connectivity status and read a usage guide with limits and pitfalls.
Search statistical tables by name or content and browse statistical list trees by service view.
Retrieve table metadata such as items, periods, sources, and comments, plus statistical explanations.
Fetch statistical data values with automatic period splitting when the 40,000-cell limit is exceeded and automatic classification-axis handling for multi-axis tables.
Collect/export data to xlsx, csv, json, or sqlite files.
Search major indicators and retrieve indicator time-series values with the serverโs missing date filter applied client-side.
Project a statistical table into citation/bibliographic fields for reference management.
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., "@io.github.rubatoyd/kosis-openapi-mcpRetrieve the consumer price index by month from 2020 to 2025 and export to xlsx"
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.
kosis-openapi-mcp
๐ ์ฌ์ฉ๋ โ ์ต๊ทผ 14์ผ ์กฐํ 0ํ(๊ณ ์ 0) ยท ํด๋ก 0ํ(๊ณ ์ 0) ยท ๋ฆด๋ฆฌ์ค ์์ฐ ๋์ ๋ค์ด๋ก๋ 93
2026-10-26 ์๋ ๊ฐฑ์ ยท ์ ์ฒด ์ด๋ ฅ์
docs/usage.csv. GitHub ํธ๋ํฝ ํต๊ณ๋ 14์ผ ์ฐฝ๋ง ์ ๊ณตํ๋ฏ๋ก ์ด ์ ์ฅ์๊ฐ ๋งค์ผ ์ฐ์ด ๋์ ํ๋ค.
KOSIS(๊ตญ๊ฐํต๊ณํฌํธ) ๊ณต์ ์๋น์ค OpenAPI ๋ฅผ ๊ฒ์ยท์์งํ๋ MCP ์๋ฒ + CLI.
ํต๊ณํ๋ฅผ ์ฐพ๊ณ , ํญ๋ชฉยท๋ถ๋ฅยท์ฃผ๊ธฐ๋ฅผ ํ์ธํ๊ณ , ์์น๋ฅผ ๋ฐ์ xlsxยทcsvยทjsonยทsqlite ๋ก ๋ด๋ณด๋ธ๋ค. 4๋ง ์ ์ ํ์ ๊ฑธ๋ฆฌ๋ฉด ๊ธฐ๊ฐ์ ์์์ ์ชผ๊ฐ ์ ์๋ฅผ ํ์ํ๋ค.
์๋งค ์ ์ฅ์: law-openapi-mcp(๋ฒ์ ์ฒ) ยท na-openapi-mcp(๊ตญํ๋์๊ด) ยท nl-openapi-mcp(๊ตญ๋ฆฝ์ค์๋์๊ด) ยท kci-openapi-mcp ยท scienceON-mcp
๋ฌด์์ ๋๋ ค์ฃผ๋
ํต๊ณ ๊ทธ ์์ฒด๋ค. ํ์ ๋ฉํ(์์ฑ๊ธฐ๊ดยท์กฐ์ฌ๋ช ยท์๋ก๊ธฐ๊ฐยท์ฃผ๊ธฐ)์ ์์น(์์ ร ๋ถ๋ฅ ร ํญ๋ชฉ โ ๊ฐ)๋ฅผ ๋๋ฉ์ธ ๊ทธ๋๋ก ์ค๋ค.
์์งยท์ธ์ฉ ํ์์ ๋ถ๊ฐ ๊ธฐ๋ฅ(kosis_citation)์ผ๋ก ๋ฐ๋ก ๋์๋ค. ์์ง๊ด๋ฆฌ ๋๊ตฌ๋ก
๋๊ธธ ๋๋ง ์ฐ๋ฉด ๋๊ณ , ๊ทธ ๋๊ตฌ๊ฐ ์๋ ์ ํ ๋ชฉ๋ก์ด ํต๊ณ ์๋ต์ ๋ชจ์์ ๋ฐ๊พธ์ง๋ ์๋๋ค.
Related MCP server: Korea Stats MCP
์ค๋น๋ฌผ
์ธ์ฆํค ํ๋. kosis.kr ํ์๊ฐ์ ํ ๊ณต์ ์๋น์ค ํ์ฉ์ ์ฒญ(์๋ ์น์ธ).
cp .env.example .env # KOSIS_API_KEY=... ๋ฅผ ์ฑ์ด๋ค๐ด ๋ฐ๊ธ๋ ๊ฐ์ ๊ทธ๋๋ก ๋ฃ์ผ์ธ์. base64 ์ฒ๋ผ ๋ณด์ฌ๋(๋์ด
=) ๋์ฝ๋ํ๋ฉดerr 11(์ ํจํ์ง ์์ ์ธ์ฆํค)์ด ๋ฉ๋๋ค.
์ค์นยท์คํ
uv sync
uv run kosis status
uv run kosis search ์ฌ๊ต์ก๋น
uv run kosis meta --org 101 --tbl DT_1PE201 --kind ITM # ํญ๋ชฉ ID ํ์ธ
uv run kosis data --org 101 --tbl DT_1PE201 --prd Y --start 2020 --end 2025
uv run kosis collect --org 101 --tbl DT_1B040A3 --prd M --start 202101 --end 202512
# ๋ถ๋ฅ์ถ์ด ์ฌ๋ฟ์ธ ํ๋ ๊ทธ๋๋ก โ ์ถ ๊ฐ์๋ ์์์ ๋ง์ถ๋ค(์ฐ์
ร ๊ท๋ชจ)
uv run kosis data --org 118 --tbl DT_118N_MON051 --prd H --start 202401 --end 202401
# ์ฃผ์์งํ(ํต๊ณํ์ ๋ค๋ฅธ ๊ณ์ด) โ ํ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๊ฐ๊น์ง ๋ฐ๋ก
uv run kosis indicator ์ถ์ฐ์จ
uv run kosis indicator-data --id 13 --start 2020 --end 2025MCP ๋ฑ๋ก:
{
"mcpServers": {
"kosis": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/rubatoyd/kosis-openapi-mcp", "kosis-mcp"],
"env": { "KOSIS_API_KEY": "๋ฐ๊ธ๋ฐ์_๊ฐ_๊ทธ๋๋ก" }
}
}
}PyPI ์ ์ฌ๋ฆฐ ํจํค์ง๊ฐ ์์ง ์์ด ์ ์ฅ์์์ ๋ฐ๋ก ๋ฐ์ ์ด๋ค(์๋งค ์ ์ฅ์์ ๊ฐ์ ๋ฐฉ์).
main์ HEAD ๋ฅผ ์ฐ๋ฏ๋ก ๋ค์ ๊ธฐ๋์ ์ต์ ์ด ๋ฐ์๋๋ค.
MCP ๋๊ตฌ
๋๊ตฌ | ํ๋ ์ผ |
| ์ธ์ฆํค ๋ณด์ ์ฌ๋ถ + ์ค์ ์๋ณต 1ํ |
| ์๋น์ค๋ทฐยท์ฃผ๊ธฐยท๋ฉํ ์ข ๋ฅยท์ค๋ฅ์ฝ๋ยทํ๊ณยทํจ์ |
| ํต๊ณํ ์ฐพ๊ธฐ(ํตํฉ๊ฒ์) |
| ํต๊ณ๋ชฉ๋ก ํธ๋ฆฌ ํ ๋จ๊ณ(์ฃผ์ ๋ณยท๊ธฐ๊ด๋ณ โฆ) |
| ํ์ ํญ๋ชฉ(ITM)ยท๋ถ๋ฅ(NCD)ยท์ฃผ๊ธฐ(PRD)ยท์ถ์ฒ ๋ฑ |
| ํต๊ณ์ค๋ช (์กฐ์ฌ๊ฐ์) |
| ์์น โ 4๋ง ์ ์ด๊ณผ ์ ๊ธฐ๊ฐ ์๋ ๋ถํ |
| ํ๋ฅผ ์์ง ์นธ์ผ๋ก ํฌ์(๋ถ๊ฐ ๊ธฐ๋ฅ) |
| ์์น๋ฅผ xlsx/csv/json/sqlite ๋ก ์ ์ฅ |
| ์ฃผ์์งํ ์ฐพ๊ธฐ(ํต๊ณํ์ ๋ค๋ฅธ ๊ณ์ด) โ ํ์ด์ง ์ ์ ํ์ |
| ์ฃผ์์งํ์ ์์ ๋ณ ์์น โ ์๋ฒ๊ฐ ์ ๊ฑฐ๋ฅด๋ ์์ ์ ๋์ ๊ฑฐ๋ฅธ๋ค |
์์ ๋ ๊ฒ (์ ๋ถ ์ค์ธก)
172์ชฝ์ง๋ฆฌ ๊ณต์ ๊ฐ๋ฐ๊ฐ์ด๋๊ฐ ์๋๋ฐ๋ ๊ฐ์ฅ ์ค์ํ ์ ์ด ๊ทธ ์์ ์๊ฑฐ๋ ํ๋ฆฌ๋ค:
๐ด
jsonVD=Y๊ฐ ์์ผ๋ฉด JSON ์ด ์๋๋ค โ ํค์ ๋ฐ์ดํ๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด ์จ๋ค. ์ด ํ๋ผ๋ฏธํฐ๋ ๊ฐ์ด๋์ ์ ๋ ฅ ๋ณ์ ํ์ ์๊ณ JSP ์์ ์์๋ง ์๋ค.๐ด ํต๊ณ์๋ฃ๋ฅผ
orgId/tblId๋ก ๋ถ๋ฅด๋ ค๋ฉด/openapi/Param/statisticsParameterData.do๋ฅผ ์จ์ผ ํ๋ค. ๊ฐ์ด๋๊ฐ ํ๋ฅผ ์ค์ด ๋statisticsData.do๋ก ๋ณด๋ด๋ฉด ํญ์ err 20.๐ด ์ธ์ฆํค๋ฅผ ๋์ฝ๋ํ์ง ๋ง ๊ฒ.
๊ทธ ๋ฐ์:
๐ด ๋ถ๋ฅ์ถ(
objL) ๊ฐ์๊ฐ ํ์ ์ถ ์์ ์ ํํ ๋ง์์ผ ํ๋ค โ ๋ชจ์๋ผ๋ฉดerr 20 (objL), ๋์น๋ฉดerr 21. ๊ทธ๋ฐ๋ฐ ์ถ ๊ฐ์๋ฅผ ์๋ ค ์ฃผ๋ ๋ฉํ ์๋น์ค๊ฐ ์๋ค(NCD๋ ๋ถ๋ฅ๊ฐ ์๋๋ผ ์ ๊ท์๋ก ์์ ์ด๊ณOBJยทCLS๋err 30).kosis_data๊ฐ ์ถ์ ํ๋์ฉ ๋๋ ค ๋ง์ถ๋ฏ๋ก ๋ค์ถ ํ(์: ์ฐ์ ร ๊ท๋ชจ)๋ ๊ทธ๋ฅ ๋ถ๋ฅด๋ฉด ๋๋ค โ ํ์ ๋ ์ถ์meta.obj_levels์ ์ค๋ฆฐ๋ค.๋ชจ๋ ์คํจ๊ฐ HTTP 200 ์ด๋ค. ์ฑ๊ณต์ ๋ฐฐ์ด, ์คํจ๋
{err, errMsg}๊ฐ์ฒด.Content-Type์ ๋ ๋คtext/html์ด๋ผ ๋ฏฟ์ ์ ์๋ค.err 30(๊ฒฐ๊ณผ ์์)์ ์ค๋ฅ๊ฐ ์๋๋ค โ 0๊ฑด๊ณผ ์คํจ๋ฅผ ๊ตฌ๋ถํด์ ๋ณด๊ณ ํ๋ค.์์ฒญ๋น 4๋ง ์ (err 31) ยท ๋ถ๋น 200๊ฑด(err 40).
ํ์ด์ง์ด ์๋ค โ ํตํฉ๊ฒ์ยท๋ชฉ๋กยทํต๊ณ์๋ฃ๋ ์๋ฒ๊ฐ ์ค ๋งํผ์ด ์ ๋ถ๋ค(์กฐ์ฉํ ์๋ฅด์ง ์๊ณ ์๋ฆฐ๋ค). ๋จ ํต๊ณ์ฃผ์์งํ ๊ณ์ด๋ง ์์ธ๋ก
pageNoยทnumOfRows๋ฅผ ๋ฐ๊ณ ์ ์ฃผ๋ฉด 10๊ฑด์์ ์๋ฆฐ๋ค โkosis_indicator_*๊ฐ ๋๊น์ง ๋๊ฒจ ์ ์๋ฅผ ํ์ํ๋ค(docs ยง7).๐ด ์ฃผ์์งํ ๊ณ์ด์ ์์ ๋ฒ์๋ฅผ ๊ฑฐ๋ฅด์ง ์๋๋ค(๋ชจ๋ ์ค์์น์ผ ๋ฟ ๊ฐ์ ๋ฌด์๋๋ค).
kosis_indicator_data๊ฐ ์ ๊ตฌ๊ฐ์ ๋ฐ์ ์ง์ ๊ฑฐ๋ฅด๊ณmeta.server_filtered=false๋ก ์๋ฆฐ๋ค.parentListId๋ ํ์๋ผ๊ณ ์ ํ ์์ง๋ง ์๋ตํ๋ฉด ์ต์์๊ฐ ์จ๋ค.
์์ธํ ๊ทผ๊ฑฐ์ ์ฌํ ๋ฐฉ๋ฒ์ docs/KOSIS_API_GUIDE.md.
๋ผ์ด์ ์ค
MIT
Available Tools
11 toolskosis_citationARead-only
ํต๊ณํ ํ๋๋ฅผ ์์ง(์ธ์ฉ) ์นธ์ผ๋ก ํฌ์ํ๋ค โ ์ ํ ๊ธฐ๋ฅ.
โ ๏ธ ์ด ๋๊ตฌ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด๋ค. ํต๊ณ๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ฉด kosis_search(ํ ๋ฉํ)์
kosis_data(์์น)๊ฐ ๋ณธ๋ น์ด๊ณ , ์ด ๋๊ตฌ๋ ์์ง๊ด๋ฆฌ ๋๊ตฌ๋ก ๋๊ธธ ๋๋ง ์ด๋ค.
KOSIS ๋ ์กฐ์ฌ(STAT_NM)์ ํ(TBL_NM) ๋ ์ธต์ ๋ค ์ฃผ๋ฏ๋ก ์ด๋ ์ธต์ผ๋ก ์ธ์ฉํ ์ง๋
๋ถ๋ฅด๋ ์ชฝ์ด ๊ณ ๋ฅธ๋ค โ container_title ์ด ์กฐ์ฌ์ธต, title ์ด ํ์ธต์ด๋ค.
Args: accessed: ์กฐํ์ผ์(YYYY-MM-DD). ๋ฐ์ดํฐ์ ์ธ์ฉ์๋ ์กฐํ์ผ์๊ฐ ํ์ํ๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | ||
| tbl_id | Yes | ||
| accessed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No usable annotation flags are verifiable in this context, so the description carries the transparency burden. It adds genuine behavioral context: the KOSIS two-layer (STAT_NM/TBL_NM) structure, the caller-driven layer choice, and the accessed-date requirement for dataset citations. However, it never states what the tool returns (citation string? formatting?), whether the operation is pure/read-only, or any failure behavior โ gaps for a tool with no output schema.
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?
Purpose is front-loaded, and the โ ๏ธ block economically steers the agent away from overuse by naming alternatives. The layer-semantics paragraph is the longest section but is justified because it determines citation structure. The trailing Args line is minimal; each sentence 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 3-parameter, no-nested, no-output-schema tool, the description covers purpose, usage conditions, and layer semantics well. But because no output schema exists, the description should explain the return value, and it does not; two of three parameters also remain under-documented. Adequate for a simple auxiliary tool, with clear 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?
Schema description coverage is 0%, so the description must document parameters; it explicitly covers only 'accessed' (YYYY-MM-DD and why it is needed). The two-layer discussion indirectly hints at what 'id' refers to (a table or survey), but the 'style' parameter is never mentioned and no enum/default guidance exists โ a meaningful gap for a citation-formatting tool.
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: 'ํต๊ณํ ํ๋๋ฅผ ์์ง(์ธ์ฉ) ์นธ์ผ๋ก ํฌ์ํ๋ค' โ projecting one statistical table into a citation field, explicitly marked as an auxiliary feature. It also names sibling tools (kosis_search for metadata, kosis_data for numbers) as the mainline, which differentiates this tool without requiring an agent to open other schemas.
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?
Gives explicit when-to-use (only when handing off to a bibliographic management tool) and when-not-to (when the goal is using statistics, kosis_search and kosis_data are the main tools). It further instructs the caller to choose the citation layer โ container_title for the survey layer, title for the table layer โ leaving no ambiguity about selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_collectC
ํต๊ณํ ์์น๋ฅผ ๋ฐ์ xlsx/csv/json/sqlite ๋ก ์ ์ฅํ๋ค.
โ ๏ธ ๋ถ๋ฅ ์ถ์ด ํ๋ง๋ค ๋ค๋ฅด๋ฏ๋ก ์ด ๊ตฌ์ฑ์ด ๊ฐ๋ณ์ด๋ค โ ๋ถ๋ฅ ์ด๋ฆ์ด ๊ทธ๋๋ก ์ด์ด ๋๋ค.
์ถ ๊ฐ์๋ ํ๋ง๋ค ๋ค๋ฅด์ง๋ง obj_l2~obj_l8 ์ ๋น์ ๋๋ฉด ์๋์ผ๋ก ๋ง์ถ๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| name | No | kosis | |
| items | No | ALL | |
| start | No | ||
| obj_l1 | No | ALL | |
| obj_l2 | No | ||
| obj_l3 | No | ||
| obj_l4 | No | ||
| obj_l5 | No | ||
| obj_l6 | No | ||
| obj_l7 | No | ||
| obj_l8 | No | ||
| org_id | Yes | ||
| prd_se | Yes | ||
| recent | No | ||
| tbl_id | Yes | ||
| formats | No | ||
| out_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, openWorldHint=true, and destructiveHint=false. The description adds useful behavior: saving to files, variable column structure, and auto-adjustment of axes. However, it does not disclose other behaviors such as file overwriting, authentication requirements, or rate limits. It adds some value beyond annotations but is not comprehensive.
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 concise with two sentences. The first sentence states the main purpose, and the second warns about variable columns. It is efficient and front-loaded, though the second sentence is a bit long and could be split for clarity.
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 (18 parameters, no output schema, no enums), the description is far from complete. It does not explain required parameters like org_id, tbl_id, or prd_se, nor optional ones like start/end/recent. The warning about variable columns is helpful, but the overall context is insufficient for an agent to call the tool correctly without further investigation.
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 obj_l2~obj_l8 auto-adjustment and the formats parameter implicitly (xlsx/csv/json/sqlite). However, it leaves the other 14 parameters (org_id, tbl_id, prd_se, start, end, recent, name, items, obj_l1) undocumented. This is a significant gap for a tool with 18 parameters.
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?
States a clear verb+resource: receives statistics table values and saves them as xlsx/csv/json/sqlite. It also mentions the variable column structure, but does not differentiate from sibling tools like kosis_data or kosis_indicator_data, which may also fetch data. The purpose is specific but not distinguished from 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?
No guidance on when to use this tool vs alternatives. It provides a technical note about variable columns and auto-adjustment, but does not state when this tool is preferred over siblings like kosis_data. The agent is left to infer usage from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_dataARead-only
ํต๊ณํ์ ์์น๋ฅผ ๋ฐ๋๋ค.
๐ด ๋ถ๋ฅ์ถ์ด ์ฌ๋ฟ์ธ ํ(์: ์ฐ์
ร ๊ท๋ชจ)๋ ๊ทธ๋ฅ ๋ถ๋ฅด๋ฉด ๋๋ค. KOSIS ๋ ์์ฒญ์
๋ถ๋ฅ์ถ ๊ฐ์๊ฐ ํ์ ์ถ ๊ฐ์์ ์ ํํ ๋ง๊ธฐ๋ฅผ ์๊ตฌํ๋๋ฐ(๋ชจ์๋ผ๋ฉด err 20 (objL),
๋์น๋ฉด err 21) ์ถ ๊ฐ์๋ฅผ ์๋ ค ์ฃผ๋ ๋ฉํ๊ฐ ์๋ค. ๊ทธ๋์ ์ด ๋๊ตฌ๊ฐ ์ถ์ ํ๋์ฉ
๋๋ ค ๊ฐ๋ฉฐ ๋ง์ถ๋ค โ ๊ฒฐ๊ณผ์ meta.obj_levels ์ ํ์ ๋ ์ถ์ด ์ค๋ฆฐ๋ค.
Args:
org_id: ๊ธฐ๊ด ID(์: '101').
tbl_id: ํต๊ณํ ID(์: 'DT_1B040A3').
prd_se: ์๋ก์ฃผ๊ธฐ โ Y(๋
)ยทH(๋ฐ๊ธฐ)ยทQ(๋ถ๊ธฐ)ยทM(์)ยทD(์ผ). kosis_meta(kind='PRD') ๋ก ํ์ธ.
start, end: ์์ ๋ฒ์(์: '202101''202512'). ๐ด ์ด ๋ฐฉ์์ด๋ฉด 4๋ง ์
์ ๋์ด๋
์๋์ผ๋ก ๊ธฐ๊ฐ์ ์ชผ๊ฐ ์ ์๋ฅผ ๋ฐ๋๋ค.
recent: ์ต๊ทผ N๊ฐ ์์ . start/end ๋์ ์ด๋ค(์ด ๋ฐฉ์์ ์๋ ๋ถํ ์ด ์ ๋๋ค).
obj_l1: ๋ถ๋ฅ1 โ 'ALL' ์ ์ฒด, '11' ํน์ , '11*' ํ์ ์ ์ฒด, '11+21' ์ฌ๋ฟ.
obj_l2 ~ obj_l8: ๋ถ๋ฅ28. ๋น์ ๋๋ฉด ํ์ํ ๋งํผ 'ALL' ๋ก ์๋์ผ๋ก ์ฑ์ด๋ค.
4๋ง ์
(err 31)์ ๊ฑธ๋ฆด ๋ ํน์ ์ฝ๋๋ก ์ขํ๋ ์๋ฆฌ์ด๊ธฐ๋ ํ๋ค.
items: ํญ๋ชฉ โ 'ALL' ๋๋ ํญ๋ชฉ ID(kosis_meta(kind='ITM')).
max_rows: ๋๋ ค์ค ์ต๋ ํ ์(ํ์ผ๋ก ๋ฐ์ผ๋ ค๋ฉด kosis_collect).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| items | No | ALL | |
| start | No | ||
| obj_l1 | No | ALL | |
| obj_l2 | No | ||
| obj_l3 | No | ||
| obj_l4 | No | ||
| obj_l5 | No | ||
| obj_l6 | No | ||
| obj_l7 | No | ||
| obj_l8 | No | ||
| org_id | Yes | ||
| prd_se | Yes | ||
| recent | No | ||
| tbl_id | Yes | ||
| max_rows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behaviors beyond annotations: it explains automatic axis-count matching (with error codes 20/21), automatic period splitting for >40,000 cells, auto-filling of obj_l2-8 with 'ALL', and the presence of meta.obj_levels in the result. It also notes the 40,000-cell limit (err 31). These are valuable behavioral traits not covered by the readOnlyHint/openWorldHint 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: a one-line summary, a highlighted note about classification axes, then a bulleted Args list. Key behaviors are front-loaded with red emojis to draw attention. Every sentence adds valueโno fluff or repetition. It is detailed but efficiently organized.
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 complexity (16 params, no output schema, no enums), the description is remarkably complete. It covers error conditions, parameter relationships, alternatives, and behavioral nuances. It mentions the result's meta.obj_levels, which gives insight into the return structure. An agent can reliably call this tool correctly without additional documentation.
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 by documenting all 16 parameters. It explains each parameter's purpose, format (e.g., '101' for org_id, 'DT_1B040A3' for tbl_id), valid values (Y/H/Q/M/D for prd_se), and special behaviors (wildcards like '11*', multiple codes '11+21', and auto-fill logic). This is exceptional given the schema provides no help.
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 a clear, specific verb and resource: 'Gets the numbers of a statistical table.' This unambiguously states the tool's purpose and inherently distinguishes it from siblings like kosis_meta (metadata) and kosis_search. It is not a tautology and adds concrete scope.
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 explicit alternatives: it directs users to kosis_collect for file retrieval and to kosis_meta for validating prd_se and items. It also explains when to use start/end vs recent and the auto-fill behavior for obj_l2-8. However, it does not explicitly contrast with kosis_indicator_data, a sibling that might overlap, so it stops short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_explainBRead-only
ํต๊ณ์ค๋ช (์กฐ์ฌ๊ฐ์) โ ๋ชฉ์ ยท๊ทผ๊ฑฐยท์ฃผ๊ธฐยท๋ฒ์ ๋ฑ.
ํต๊ณํ์๋ ์ด๋ก์ด ์์ผ๋ฏ๋ก, ๊ด๋ จ๋ ์ฑ์ ์ด๋ ์์ฝ์ด ํ์ํ ๋ ์ด ์ค๋ช ์ด ์ฌ๋ฃ๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | ||
| tbl_id | Yes |
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 covered. The description adds content-level behavior by listing what the explanation contains, but it does not discuss return format or limitations. This is acceptable given the annotation coverage.
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?
Two short sentences with no fluff; the resource type comes first and the usage rationale second. It is concise and front-loaded, though the second sentence is somewhat indirect.
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 two-parameter read-only tool, the description covers return content and one use case. However, there is no output schema and no explanation of parameter semantics, so an agent cannot fully infer invocation details from this description alone.
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% and the description does not explain org_id or tbl_id formats, provenance, or how to obtain them. The parameter names are somewhat self-explanatory, but the description fails to compensate for the lack of schema documentation.
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 that the tool provides statistical explanation/survey overview with purpose, basis, period, and scope. This is specific enough to identify the tool's resource and distinguish it from generic data or status siblings, though it does not explicitly contrast with kosis_meta.
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 a clear usage context: statistical tables lack abstracts, so this explanation is material when relevance scoring or summarization is needed. It does not mention exclusions or alternatives, but the intended use case is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_guideARead-only
์ด API ๋ฅผ ์ธ ๋ ์์์ผ ํ ๊ฒ โ ์๋น์ค๋ทฐยท์ฃผ๊ธฐยท๋ฉํ ์ข ๋ฅยทํ๊ณยทํจ์ .
| 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. The description adds useful behavioral context by listing limitations and pitfalls, signaling that this is a meta/orientation resource rather than a data-returning operation.
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 phrase with a compact list of covered topics. There is no wasted wording or redundancy with the schema or annotations.
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 no-parameter, read-only guide tool, the description is reasonably complete: it states what knowledge areas it covers and flags limitations and pitfalls. It does not describe the response format, but no output schema exists and the tool's purpose as a guide makes that less critical.
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 input schema is empty with 0 parameters and 100% schema coverage, so there are no parameter semantics for the description to clarify. A baseline of 4 is appropriate because no parameter documentation is needed.
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 this tool provides the knowledge needed to use the KOSIS API, specifically covering service view, cycle, meta types, limitations, and pitfalls. This is clear as a guide/resource, but it does not explicitly differentiate itself from siblings like kosis_explain.
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 phrase 'what to know when using this API' implies the agent should consult this guide alongside or before the other kosis_* tools, but no explicit when-to-use or when-not-to-use guidance is given. Alternatives are not named or excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_indicator_dataARead-only
์ฃผ์์งํ์ ์์ ๋ณ ์์น๋ฅผ ๋ฐ๋๋ค.
๐ด KOSIS ๊ฐ ์ด ๊ณ์ด์์๋ ์์ ๋ฒ์๋ฅผ ๊ฑฐ๋ฅด์ง ์๋๋ค. startPrdDe/endPrdDe ๋
๊ฐ์ด ๋ฌด์๋๊ณ ๋ชจ๋ ์ค์์น๋ก๋ง ์๋ํด์, ๋ฌด์์ ์ฃผ๋ ์ ๊ตฌ๊ฐ์ด ์จ๋ค(์ค์ธก).
๊ทธ๋์ ์ด ๋๊ตฌ๊ฐ ์ ๊ตฌ๊ฐ์ ๋ฐ์ ์ง์ ๊ฑฐ๋ฅด๊ณ , ๊ทธ ์ฌ์ค์ meta.server_filtered
(=false)์ meta.filter_note ๋ก ์๋ฆฐ๋ค โ ์๋ฒ๊ฐ ๊ฑธ๋ฌ ์คฌ๋ค๊ณ ๋ฏฟ์ผ๋ฉด ์์ฒญํ์ง
์์ ๊ตฌ๊ฐ์ ๋ฐ๊ณ ๋ ๋ชจ๋ฅธ๋ค.
Args:
jipyo_id: ์งํID(kosis_indicator_search ๋ก ์ฐพ๋๋ค).
start, end: ์์ ๋ฒ์(์: '2015'~'2025'). ๋น์ฐ๋ฉด ์ ๊ตฌ๊ฐ.
recent: ์ต์ N๊ฐ ์์ ๋ง(start/end ๋ฅผ ์ ์คฌ์ ๋).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| recent | No | ||
| jipyo_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description prominently discloses that the server does not filter by time range, that the tool filters locally, and that the outcome is reported via meta.server_filtered=false and meta.filter_note. This is valuable behavioral information beyond the readOnlyHint annotation and contradicts nothing.
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 purpose is stated first, followed by a justified warning and a clean Args list. The warning is slightly long but contains essential caveats needed for correct usage, so it 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?
The description provides all necessary input semantics, the critical filtering caveat, and mentions relevant metadata keys. Since there is no output schema, the absence of output format details is acceptable; the tool can be used correctly with the given information.
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 provides zero parameter descriptions, but the description explains all four parameters: jipyo_id, start, end, and recent, including the special meaning of start/end as mode switches rather than true server-side filters. This fully compensates for the schema's lack of documentation.
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 time-series values for major indicators by jipyo_id, and references kosis_indicator_search for finding the ID. It is specific enough to distinguish the resource, though it does not explicitly differentiate it from sibling data tools like kosis_data.
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 practical usage instructions: start/end range examples, behavior when empty, and recent usage with constraints. It also warns about server-side filtering behavior. However, it does not explicitly state when to use this tool versus the other sibling data tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_indicator_searchARead-only
์ฃผ์์งํ๋ฅผ ์ด๋ฆ์ผ๋ก ์ฐพ๋๋ค โ ํต๊ณํ์๋ ๋ค๋ฅธ ๊ณ์ด์ด๋ค.
KOSIS ๋ ํต๊ณํ(TBL_ID) ๋ง๊ณ ์งํ(statJipyoId) ๊ณ์ด์ ๋ฐ๋ก ๋๋ค(ํฉ๊ณ์ถ์ฐ์จ,
์ถ๊ณ์ธ๊ตฌ โฆ). ํ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋ฐ๋ก ๊ฐ์ ๋ณผ ์ ์๋ ๋์ , ์งํ๋ก ํ๋ ์ด์
๋ ๊ฒ๋ง
์๋ค. ํ ๋จ์๋ก ํ๊ณ ๋ค ๊ฑฐ๋ผ๋ฉด kosis_search ๋ฅผ ์ด๋ค.
๐ด ์ด ๊ณ์ด์๋ง ํ์ด์ง์ด ์๊ณ ์ ์ฃผ๋ฉด ์๋ฒ๊ฐ 10๊ฑด์์ ์๋ฅธ๋ค โ ์ด ๋๊ตฌ๊ฐ ๋๊น์ง
๋๊ฒจ ์ ์๋ฅผ ํ์ํ๋ค(meta.pages ์ ๋ช ์ชฝ์ ์ฝ์๋์ง ์ค๋ฆฐ๋ค).
Args: name: ์งํ๋ช (์: '์ถ์ฐ์จ', '์ธ๊ตฌ'). jipyo_id: ์งํID ๋ก ์ง์ ์ฐพ์ ๋(๋ ์ค ํ๋๋ ํ์). max_records: ๋๋ ค์ค ์ต๋ ๊ฑด์.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| jipyo_id | No | ||
| max_records | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already signal safety, and the description adds meaningful behavior: it auto-paginates through all pages and reports pages read in meta.pages. No side effects are claimed, so there is no contradiction with 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 compact and well structured, with a purpose statement, a usage distinction, a pagination warning, and an Args list. It is slightly repetitive in emphasizing the indicator-vs-table distinction, but all sentences carry useful information.
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 key usage context and pagination, but with no output schema it does not describe the returned item fields or structure beyond meta.pages. An agent would still need to infer what an indicator result object contains and how to use the returned IDs with related tools.
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?
Although the schema has no descriptions, the Args section explains all three parameters: name with examples, jipyo_id as a direct-ID alternative, and max_records as the maximum number of returned items. It also clarifies that either name or jipyo_id should be supplied, which is important operational guidance.
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: finding major KOSIS indicators by name, and explicitly distinguishes this from the statistical-table series. It also names the sibling tool kosis_search for table-oriented searches, so an agent can disambiguate immediately.
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 guidance: use kosis_search instead when working at the table level, and explains that indicator results are curated. It also describes pagination behavior, though it does not explicitly mention when to use kosis_indicator_data instead of this search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_listARead-only
ํต๊ณ๋ชฉ๋ก ํธ๋ฆฌ๋ฅผ ํ ๋จ๊ณ ํ๋๋ค(์ฃผ์ ๋ณยท๊ธฐ๊ด๋ณ ๋ฑ).
Args:
vw_cd: ์๋น์ค๋ทฐ ์ฝ๋. kosis_guide ์ ์๋น์ค๋ทฐ ์ฐธ์กฐ.
parent_id: ์์ ๋ชฉ๋ก ID. ๋น์ฐ๋ฉด ์ต์์๊ฐ ์จ๋ค(๊ฐ๋ฐ๊ฐ์ด๋๋ ํ์๋ผ ํ์ง๋ง
์ค์ ๋ก๋ ์๋ต ๊ฐ๋ฅ โ ์ค์ธก).
| Name | Required | Description | Default |
|---|---|---|---|
| vw_cd | No | MT_ZTITLE | |
| parent_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only and non-destructive. The description adds useful behavioral detail beyond that: traversal is one step at a time, empty parent_id returns top-level items, and an empirical note contradicts the development guide's claim that parent_id is required. It does not describe return shape, but that is minor for a simple read-only list tool.
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 compact and efficiently structured: a one-sentence purpose statement followed by a concise argument list. There is no filler, and the empirically grounded note about parent_id 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 two-parameter, read-only listing tool, the description covers purpose, parameter semantics, and key call behavior. It does not explicitly describe the return format, but the nature of a one-level tree scan makes it reasonably inferable, and the annotations cover the safety profile.
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 coverage is 0%, so the description carries the full parameter-documentation burden. Both parameters are meaningfully explained: vw_cd is tied to the service-view definitions in kosis_guide, and parent_id's optionality and empty-value behavior are explicitly clarified.
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 ('scans one level of the statistics list tree') and a clear resource, optionally scoped by topic or institution. It is clearly not tautological and conveys the tool's basic function, but it does not explicitly differentiate it from sibling tools such as kosis_search or kosis_meta.
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 context of use is implied: browse the statistics list hierarchy one level at a time, and leave parent_id empty to get the top level. However, the description never states when to prefer this tool over its siblings, nor does it mention any exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_metaARead-only
ํต๊ณํ์ ๋ฉํ์๋ฃ โ ํญ๋ชฉ(ITM)ยท์๋ก๊ธฐ๊ฐ(PRD)ยท์ถ์ฒ(SOURCE)ยท์ฃผ์(CMMT) ๋ฑ.
โ ๏ธ kosis_data ๋ฅผ ๋ถ๋ฅด๊ธฐ ์ ์ ITM ์ผ๋ก ํญ๋ชฉ ID ๋ฅผ, PRD ๋ก ์๋ก์ฃผ๊ธฐ๋ฅผ ํ์ธํ๋ฉด
err 20/21 ์ ํผํ ์ ์๋ค.
๐ด ๋ถ๋ฅ์ถ์ ์๋ ค ์ฃผ๋ ์ข
๋ฅ๋ ์๋ค. NCD ๋ ๋ถ๋ฅ๊ฐ ์๋๋ผ ์ ๊ท์๋ก ์์ ์ด๊ณ
OBJยทCLS ๋ err 30 ์ด๋ค(์ค์ธก) โ ์ถ์ kosis_data ๊ฐ ์์์ ๋ง์ถ๋ค.
โ ๏ธ ์๋ kind ๋ err 21 ์ด ์๋๋ผ err 30(0๊ฑด)์ผ๋ก ์ค๋ฏ๋ก ์คํ๊ฐ '์๋ฃ ์์'์ฒ๋ผ
๋ณด์ธ๋ค. ๊ทธ๋์ ์๋ ์ข
๋ฅ๋ง ๋ฐ๋๋ค โ ๊ฐ๋ฅํ ๊ฐ์ kosis_guide ์ ๋ฉํ_์ข
๋ฅ.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | TBL | |
| org_id | Yes | ||
| tbl_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses specific error behaviors (err 20/21 vs. err 30), what kinds are not supported (NCD, OBJ, CLS), and that axes are automatically handled by kosis_data. This adds meaningful behavioral context.
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 dense but well-organized, front-loading the main purpose then listing crucial warnings. Each sentence contributes actionable information, and the use of emojis aids scannability without adding fluff.
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 metadata-lookup tool with no output schema, the description covers all essential context: what it returns, relationship to sibling tools, error semantics, and limitations. It is complete enough for an agent to decide when and how to use it.
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 description explains the 'kind' parameter and its accepted values (from kosis_guide) and its default, but does not elaborate on org_id or tbl_id. Since these are self-explanatory in context and the schema covers them implicitly, the description adds moderate semantic value beyond the raw schema.
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 that the tool retrieves metadata (items, periods, sources, comments) for a statistical table, distinguishing it from data retrieval. It is specific about the resource and the scope of information provided.
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?
Explicitly instructs to call this tool before kosis_data to check ITM and PRD to avoid errors 20/21, and warns about the absence of classification-axis kinds and the error behavior of unknown kinds. It also points to kosis_guide for possible kind values, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kosis_searchARead-only
ํต๊ณํ๋ฅผ ์ด๋ฆยท๋ด์ฉ์ผ๋ก ์ฐพ๋๋ค(KOSIS ํตํฉ๊ฒ์).
Args: query: ๊ฒ์์ด(์: '์ฌ๊ต์ก๋น', '์ถ์ฐ์จ'). max_records: ๋๋ ค์ค ์ต๋ ๊ฑด์.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_records | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint, so the description need not restate safety. It adds useful behavioral specifics: search scope is by name/content and max_records caps the result count. It does not describe output shape or pagination, but for a simple read-only search this is a minor gap with no contradiction.
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 compact and front-loaded: one sentence states purpose and a short Args block defines the parameters. There is no filler, repetition, or unnecessary detail.
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 two-parameter read-only search tool with helpful annotations, the description covers the essential invocation details: what is searched, how to phrase the query, and the result cap. The only notable absence is a pointer to sibling tools for alternative use cases, but the simple scope and annotations make the definition sufficiently complete.
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%, but the description fully compensates by clearly defining query as the search term with concrete examples and max_records as the maximum number of results to return. Both parameters receive meaning beyond their bare schema titles.
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 ('์ฐพ๋๋ค/finds') and resource ('ํต๊ณํ/statistical tables'), and specifies the search is by name or content. It is clear but does not explicitly distinguish it from sibling tools such as kosis_list or kosis_meta, so it falls just short of full differentiation.
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 examples (e.g., '์ฌ๊ต์ก๋น', '์ถ์ฐ์จ') and 'KOSIS ํตํฉ๊ฒ์' imply this is for finding tables by keyword, giving some contextual guidance. However, there is no explicit statement about when to use this tool versus the sibling tools or 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.
kosis_statusARead-only
์ฐ๊ฒฐ ์ ๊ฒ โ ์ธ์ฆํค ๋ณด์ ์ฌ๋ถ + KOSIS ์ค์ ์๋ณต 1ํ.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses meaningful behavioral traits: it checks authentication-key possession and performs one live network round trip to KOSIS. This reveals the external dependency, latency, and auth-relevant behavior, which are valuable for the agent to anticipate.
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 entire description is one short, front-loaded sentence that conveys the tool's purpose and behavior with no filler. Every part of the description adds information.
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 status-check tool with no output schema, the description is largely complete: it says what is checked and that a live network call occurs. The only minor gap is that it does not specify the exact return format, but this is low-impact for such a simple 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 and schema coverage is 100%, so the baseline of 4 applies. The description does not need to explain parameter meanings since there are none.
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: '์ฐ๊ฒฐ ์ ๊ฒ' (connection check) for KOSIS, and specifies two concrete checks: whether an API key is held and whether one actual round trip works. This clearly distinguishes the status tool from siblings like kosis_data, kosis_search, or kosis_explain.
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 clearly implies when to use the tool: when an agent needs to verify KOSIS connectivity or API key validity before relying on other KOSIS operations. It does not explicitly name alternatives, but none of the sibling tools serve this health-check role, so the context is sufficient.
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.
4 tool updates
- Changed
kosis_collect7 fields changed- added
Input schema / properties / obj_l2Added value: +{ + "default": "", + "title": "Obj L2", + "type": "string" +} - added
Input schema / properties / obj_l3Added value: +{ + "default": "", + "title": "Obj L3", + "type": "string" +} - added
Input schema / properties / obj_l4Added value: +{ + "default": "", + "title": "Obj L4", + "type": "string" +} - added
Input schema / properties / obj_l5Added value: +{ + "default": "", + "title": "Obj L5", + "type": "string" +} - added
Input schema / properties / obj_l6Added value: +{ + "default": "", + "title": "Obj L6", + "type": "string" +} - added
Input schema / properties / obj_l7Added value: +{ + "default": "", + "title": "Obj L7", + "type": "string" +} - added
Input schema / properties / obj_l8Added value: +{ + "default": "", + "title": "Obj L8", + "type": "string" +}
- Changed
kosis_data7 fields changed- added
Input schema / properties / obj_l2Added value: +{ + "default": "", + "title": "Obj L2", + "type": "string" +} - added
Input schema / properties / obj_l3Added value: +{ + "default": "", + "title": "Obj L3", + "type": "string" +} - added
Input schema / properties / obj_l4Added value: +{ + "default": "", + "title": "Obj L4", + "type": "string" +} - added
Input schema / properties / obj_l5Added value: +{ + "default": "", + "title": "Obj L5", + "type": "string" +} - added
Input schema / properties / obj_l6Added value: +{ + "default": "", + "title": "Obj L6", + "type": "string" +} - added
Input schema / properties / obj_l7Added value: +{ + "default": "", + "title": "Obj L7", + "type": "string" +} - added
Input schema / properties / obj_l8Added value: +{ + "default": "", + "title": "Obj L8", + "type": "string" +}
- Added
kosis_indicator_data - Added
kosis_indicator_search
9 tool updates
v0.1.0- First observed
kosis_citation - First observed
kosis_collect - First observed
kosis_data - First observed
kosis_explain - First observed
kosis_guide - First observed
kosis_list - First observed
kosis_meta - First observed
kosis_search - First observed
kosis_status
TDQS
Scored across 11 tools
Each tool has a single clear role: table search vs indicator search, table data vs indicator data, metadata vs survey explanation, data retrieval vs file export. The detailed descriptions explicitly distinguish the similar indicator/table families, so an agent can reliably choose between them.
All tools share the kosis_ prefix and snake_case, and the search/data pairs are parallel (kosis_search/kosis_indicator_search, kosis_data/kosis_indicator_data). However, the second part mixes bare verbs (search, list, explain, collect) with bare nouns (meta, data, citation, guide), so it is not a strict verb_noun convention.
11 tools is well within the ideal range and each one earns its place: status/guide for orientation, search/explain/list/meta/data for the table workflow, indicator_search/indicator_data for the indicator workflow, plus collect and citation for output and scholarship.
For a read-only statistical data API, the surface is complete: users can discover tables by search or tree, read survey descriptions and table metadata, fetch full table data with automatic axis/period handling, access major indicators, export to files, and generate citations. No obvious dead ends or missing core operations remain.
Maintenance
Related MCP Connectors
Korean national statistics (KOSIS) โ browse, search and pull time series from Statistics Korea'sโฆ
Search and query 1,500+ OECD statistical datasets via SDMX. Keyless.
Access Koreaโs G2B procurement and Nara Market data for bid notices, awards, contracts, statisticsโฆ
Korean law: statutes, precedents, ordinances, treaties and citation verification (๋ฒ์ ์ฒ API).
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables MCP clients like Claude Desktop to search, retrieve, and analyze Korean statistical data from KOSIS OpenAPI.1631 PyPI1MIT
- AlicenseAqualityBmaintenanceEnables natural language querying of Korean statistical data from KOSIS, including population, employment, GDP, housing prices, and more, with support for regional and trend analysis.85 npm17MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying Korean official statistics from KOSIS via natural language in MCP clients like Claude Desktop, wrapping the KOSIS OpenAPI for search, data retrieval, and metadata exploration.MIT
- AlicenseNot gradedqualityBmaintenanceEnables querying Bank of Korea ECOS economic statistics via Open API, including searching tables, retrieving time series data, and accessing key indicators.MIT