Skip to main content
Glama
seolcoding

korean-stat-mcp

by seolcoding

korean-stat-mcp

KOSIS OpenAPI 데이터를 MCP 클라이언트에서 바로 쓸 수 있게 만든 Python 서버입니다.

Claude Desktop, Claude Code, Cursor, Windsurf 같은 MCP 지원 도구에서 통계표를 검색하고, 메타데이터를 확인하고, 데이터를 가져와 간단한 분석까지 이어갈 수 있습니다.

English README

PyPI Python License: MIT CI

할 수 있는 일

  • KOSIS 통계표 키워드 검색

  • 기관/주제별 통계 목록 탐색

  • 통계표 분류, 항목, 수록 기간 같은 메타데이터 조회

  • 원천 데이터 조회, 필터링, 그룹 집계

  • 저장된 데이터 청크 읽기와 원천 데이터 검증

  • verify_statistics로 특정 수치가 KOSIS 원천 행과 맞는지 확인

KOSIS API는 테이블마다 필요한 파라미터가 조금씩 다르고, 기간/분기/지자체 데이터에서 예외가 자주 나옵니다. 이 서버는 그 부분을 MCP 도구 형태로 감싸서 클라이언트 쪽 설정을 줄이는 데 초점을 둡니다.

Related MCP server: korea-health-mcp-server

호스팅 인스턴스로 바로 사용 (설치 없음)

pip install 없이, Claude.ai 커넥터에 URL 한 줄만 추가하면 됩니다. Claude Pro/Max/Team/Enterprise 요금제가 필요합니다 (Free는 커넥터 1개만 가능).

0단계: KOSIS API 키 발급 (무료, 1분)

KOSIS OpenAPI 신청 페이지에서 회원가입 후 "Open API 사용 신청" 버튼을 누르면 인증키가 발급됩니다.

커넥터 추가 방법

  1. claude.ai에 로그인합니다.

  2. 왼쪽 사이드바 하단의 본인 이름설정커넥터 메뉴로 들어갑니다.

  3. 커스텀 커넥터 추가 버튼을 클릭합니다.

  4. 아래 내용을 입력합니다 (<YOUR_KEY> 를 0단계에서 발급받은 키로 바꿉니다):

    • 이름: korean-stat

    • URL: https://korean-stat-mcp.seolcoding.com/mcp?apiKey=<YOUR_KEY>

  5. 추가 버튼을 누르면 등록 완료.

  6. 추가한 커넥터의 구성 → 도구 목록에서 모든 도구를 항상 사용으로 설정.

사용

채팅 화면에서 자연어로 물어보면 korean-stat 도구가 자동 호출됩니다:

"2020년부터 2023년까지 전국 인구 추이 보여줘"
"서울 자치구별 사업체 수 비교"

자체 호스팅도 그대로 동작

기존 pip install + KOSIS_API_KEY 환경변수 방식은 변경 없이 작동합니다. 아래 설치 섹션을 참고하세요.


설치

먼저 KOSIS OpenAPI 키가 필요합니다. 키는 KOSIS OpenAPI 신청 페이지에서 발급받을 수 있습니다.

Claude Desktop / Cursor / Windsurf

pip install korean-stat-mcp

MCP 설정 파일에 아래 내용을 추가합니다.

{
  "mcpServers": {
    "korean-stat": {
      "command": "korean-stat-mcp",
      "env": {
        "KOSIS_API_KEY": "<KOSIS_API_KEY>"
      }
    }
  }
}

Claude Desktop의 macOS 설정 파일 위치:

~/Library/Application Support/Claude/claude_desktop_config.json

MCP 클라이언트 설정

{
  "mcpServers": {
    "korean-stat": {
      "command": "korean-stat-mcp",
      "env": {
        "KOSIS_API_KEY": "<KOSIS_API_KEY>"
      }
    }
  }
}

직접 실행

pip install korean-stat-mcp
export KOSIS_API_KEY="<KOSIS_API_KEY>"
korean-stat-mcp          # stdio MCP, 로컬 Claude Desktop/Cursor용
korean-stat-mcp --http   # Streamable HTTP 서버, http://localhost:8000/mcp

설치 확인:

korean-stat-mcp --version

원격 MCP로 호스팅하기

공식 호스팅 엔드포인트:

https://korean-stat-mcp.seolcoding.com/mcp?apiKey=<YOUR_KOSIS_KEY>

이 URL을 그대로 Claude.ai 커넥터에 붙이거나 다른 MCP 클라이언트의 Streamable HTTP endpoint로 사용할 수 있습니다. 자세한 등록 절차는 위 호스팅 인스턴스로 바로 사용 섹션 참고.

상태·메타 확인:

curl https://korean-stat-mcp.seolcoding.com/health
curl https://korean-stat-mcp.seolcoding.com/info

자체 호스팅도 가능합니다

본인 KOSIS 키 쿼터를 별도로 분리하고 싶거나, 사내 네트워크/온프레미스 환경에서 운영해야 하면 직접 띄울 수 있습니다. Docker, Fly.io, Render, Railway, DigitalOcean App Platform, 일반 VPS 배포 가이드는 deploy/README.md에 정리되어 있습니다.

# 직접 띄울 때
KOSIS_API_KEY=<YOUR_KEY> korean-stat-mcp --http
curl https://<your-host>/health

주요 도구

구분

도구

용도

검색

search_statistics

키워드로 통계표 찾기

탐색

browse_categories

기관/주제별 목록 탐색

메타데이터

get_table_metadata, get_available_values

분류, 항목, 기간 확인

데이터

get_statistics_data

KOSIS 원천 데이터 조회

가공

filter_statistics, aggregate_statistics

필터링, 그룹 집계

저장 데이터

read_stored_data, list_stored_data

큰 결과를 나눠 읽기

검증

verify_statistics

특정 수치와 원천 데이터 대조

전체 도구 목록과 이전 이름과의 매핑은 docs/TOOL_MIGRATION.md를 참고하세요.

환경변수

변수

필수

설명

KOSIS_API_KEY

KOSIS OpenAPI 인증키

KOSIS_ARTIFACTS_DIR

아니오

로컬 차트/리포트 저장 경로

KOSIS_MCP_URL

아니오

자체 호스팅 인스턴스의 base URL

전체 예시는 .env.example에 있습니다.

검증 상태

  • Python 3.12 / 3.13 CI를 사용합니다.

  • 2026-04-30 기준 unit test는 449개가 통과했습니다.

  • KOSIS live pilot 100건에서 API 오류, timeout, parse 오류는 없었습니다. no_data 2건은 폐기되었거나 응답이 비어 있는 통계표로 분류했습니다.

자세한 내용은 docs/VALIDATION_REPORT.md에 있습니다.

문서

라이선스

코드는 MIT 라이선스로 배포됩니다. KOSIS 데이터 자체의 이용 조건은 KOSIS 국가통계포털 정책을 따릅니다.

Available Tools

16 tools
aggregate_statisticsA

통계 데이터를 그룹별로 집계합니다.

서버에 저장된 데이터(data_id) 또는 직접 전달된 데이터(data_json)를 사용합니다. data_id 사용 시 LLM 컨텍스트에 데이터를 포함하지 않아 효율적입니다.

Args: group_by: 그룹핑 필드 (쉼표로 여러 개 가능) 예: "C1_NM" 또는 "C1_NM,PRD_DE" agg_func: 집계 함수 "sum", "mean", "min", "max", "count" format: 응답 형식 ("summary" 또는 "raw") data_id: 저장된 데이터 ID (get_statistics_data 결과에서 확인) data_json: KOSIS 데이터 JSON 문자열 (data_id 없을 때 사용)

Returns: JSON 문자열: 집계된 데이터 (summary 형식이면 요약 포함)

Example: # 권장: data_id 사용 (서버에서 파일 읽음) >>> aggregate_statistics(group_by="C1_NM", data_id="20231213_abc12345")

# 대안: data_json 직접 전달
>>> aggregate_statistics(group_by="C1_NM", data_json=data)
ParametersJSON Schema
NameRequiredDescriptionDefault
formatNosummary
data_idNo
agg_funcNosum
group_byYes
data_jsonNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full responsibility. It discloses that data_id avoids loading into LLM context and describes the return format. However, it does not confirm read-only behavior, potential side effects, authorization requirements, or rate limits. The behavioral disclosure is adequate but incomplete.

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

Conciseness4/5

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

The description is well-structured: a one-sentence purpose, then usage notes, then a clean parameter list with examples. It is reasonably concise but the parameter descriptions could be more succinct (e.g., combining data_id and data_json explanation). Still, it is front-loaded and every sentence adds value.

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

Completeness4/5

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

Given the complexity (5 params, output schema exists), the description covers parameters, return format, and an example. It explains the summary vs raw format. However, it does not address error cases (e.g., conflicting data sources, missing parameters) or edge cases like default values for agg_func and format. The output schema reliance is reasonable, but some gaps remain.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate. It lists all parameters with detailed explanations: group_by supports comma-separated values, agg_func includes enumerated options (sum, mean, min, max, count), and explains the trade-off between data_id and data_json. This provides meaningful guidance beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it aggregates statistics by group, and explains the two data sources (data_id and data_json). However, it does not explicitly differentiate from sibling tools like get_statistics_data or filter_statistics, which may also involve grouping or aggregation. The purpose is clear but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use data_id (efficient, avoids context pollution) vs data_json, and includes an example. However, it does not specify when to prefer this tool over alternatives like browse_categories or filter_statistics, nor does it mention prerequisites or constraints (e.g., one of data_id or data_json should be provided).

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

browse_categoriesA

기관별 / 주제별 / 임의 view 로 KOSIS 통계 목록을 탐색합니다.

Args: by: 탐색 기준 - "org": 기관별 (통계청, 고용노동부 등) — 일반 사용 - "theme": 주제별 (인구, 경제, 사회 등) — 일반 사용 - "view": 임의 vwCd (광복이전 / 북한 / 영문 / e-지방지표 / 국제 등 12종) code: by="org"면 기관 코드(101, 118, ...). by="theme"이면 주제 코드(A, B, C, ...). by="view"이면 vwCd 본문(MT_ETITLE, MT_BUKHAN, MT_CHOSUN_TITLE, MT_HANKUK_TITLE, MT_STOP_TITLE, MT_RTITLE, MT_TM1_TITLE, MT_TM2_TITLE, MT_GTITLE01, MT_GTITLE02, MT_OTITLE, MT_ZTITLE). None이면 view 루트 목록 반환.

Returns: { "browse_type": "org" | "theme" | "view", "code": <입력 그대로>, "count": , "categories" 또는 "statistics": [...], "usage" 또는 "next_step": <안내 문구> }

Example: >>> browse_categories(by="org") >>> browse_categories(by="org", code="101") >>> browse_categories(by="theme") >>> browse_categories(by="view", code="MT_ETITLE") # 영문 KOSIS >>> browse_categories(by="view", code="MT_BUKHAN") # 북한통계

ParametersJSON Schema
NameRequiredDescriptionDefault
byNoorg
codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It transparently explains the three browsing modes, how 'code' behaves for each, and the return format. It does not mention side effects, authentication, or rate limits, but the tool appears to be a read-only data browser, and the description sets proper expectations.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Example sections. It front-loads the purpose. Some redundancy (e.g., listing all vwCd values could be condensed), but overall it is efficient and every sentence adds value.

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

Completeness5/5

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

Given the tool's moderate complexity (2 params, 3 modes, variable return shape), the description is complete. It covers inputs, examples, and output format. Sibling tools like 'search_statistics' are handled by the purpose distinction. No output schema is provided, but the description offers a clear return structure.

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

Parameters5/5

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

Schema coverage is 0% (no descriptions in schema), but the description fully documents both parameters. It explains all valid values for 'by' and how 'code' maps to each mode with concrete examples. This adds significant meaning beyond the minimal schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool browses KOSIS statistics lists by institution, theme, or custom view. It specifies the resource ('KOSIS 통계 목록') and the action ('탐색합니다'). This distinguishes it from siblings like 'search_statistics' (search) and 'filter_statistics' (filter), which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed guidance on when to use each 'by' value with examples and code explanations. It doesn't explicitly state when not to use or mention alternative tools, but the context is clear enough for an agent to choose correctly.

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

discover_toolsA

노출/내부 도구 전체 목록 조회.

LLM에 기본 노출되는 도구는 V1_EXPOSED 한정이지만, 모든 등록된 내부 도구는 execute_tool(name, args)로 호출할 수 있습니다.

Returns: dict with keys: exposed, internal, total, exposed_count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description provides moderate transparency: it reveals the return format (dict with keys: exposed, internal, total, exposed_count) and the V1_EXPOSED distinction, but lacks details on side effects, rate limits, or authentication.

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

Conciseness5/5

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

The description is extremely concise: two sentences and a return line. The purpose is front-loaded, and every sentence is informative with no wasted words.

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

Completeness4/5

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

Given no parameters, no annotations, and the presence of an output description, the description is fairly complete. It covers purpose, alternative tool, and return keys, though it could mention if the listing is paginated or limited in any way.

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

Parameters4/5

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

No parameters exist (0 params), so baseline is 4. The description adds no param info (none needed), and the empty schema fully covers what's expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists exposed and internal tools, using specific verbs ('조회' meaning view/list), and directly distinguishes from sibling execute_tool by explaining how internal tools can be called.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool (to get the full list) and mentions the alternative execute_tool for calling internal tools, but does not explicitly state when not to use this tool.

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

execute_toolA

이름으로 임의의 등록된 도구를 호출 (파워유저 escape hatch).

Args: name: 도구 이름 (discover_tools()로 확인 가능). args: 도구에 전달할 키워드 인자. 시그니처와 맞지 않으면 에러 반환.

Returns: {"tool": name, "result": ...} 또는 {"tool": name, "error": ...}.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNo
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

The description discloses that the tool returns a result or error, and that args mismatch leads to an error. However, it doesn't warn about potential side effects of calling arbitrary tools (destructive actions), which is a notable gap given its role as an escape hatch.

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

Conciseness4/5

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

The description is concise and front-loaded with the purpose. It could be slightly more structured (e.g., bullet points), but it efficiently conveys key information in a few sentences.

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

Completeness3/5

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

The tool has a moderate complexity as a meta-tool. The description explains the return format and error behavior, but lacks details on handling invalid tool names or other error scenarios. Given that it can call any tool, more safety-related context would enhance completeness.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining that 'name' comes from discover_tools() and 'args' are keyword arguments. It also describes the return format, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it invokes any registered tool by name, identifying it as a 'power user escape hatch'. This distinguishes it from sibling tools, which are specific data retrieval tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it's for advanced users, and suggests using discover_tools() to get valid tool names. Though it doesn't list when not to use it, the context is sufficient for an experienced agent.

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

filter_statisticsA

통계 데이터를 필터링합니다.

서버에 저장된 데이터(data_id) 또는 직접 전달된 데이터(data_json)를 사용합니다. data_id 사용 시 LLM 컨텍스트에 데이터를 포함하지 않아 효율적입니다.

Args: regions: 포함할 지역 목록 (쉼표 구분) 예: "서울특별시,부산광역시" periods: 포함할 기간 목록 (쉼표 구분) 예: "2022,2023" items: 포함할 항목 목록 (쉼표 구분) 예: "인구수,세대수" format: 응답 형식 ("summary" 또는 "raw") data_id: 저장된 데이터 ID (get_statistics_data 결과에서 확인) data_json: KOSIS 데이터 JSON 문자열 (data_id 없을 때 사용)

Returns: JSON 문자열: 필터링된 데이터 (summary 형식이면 요약 포함)

Example: # 권장: data_id 사용 (서버에서 파일 읽음) >>> filter_statistics(regions="서울특별시,부산광역시", data_id="20231213_abc12345")

# 대안: data_json 직접 전달
>>> filter_statistics(regions="서울특별시,부산광역시", data_json=data)
ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNo
formatNosummary
data_idNo
periodsNo
regionsNo
data_jsonNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Describes that data_id reads stored data without including it in context, and returns a JSON string (with optional summary). No annotations exist, so description carries the burden; it adequately discloses the tool's read-only, filtering nature.

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

Conciseness4/5

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

Well-structured with Args section and example. Slightly verbose but each sentence adds value. Could be more concise, but effective.

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

Completeness4/5

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

Covers both data sources, all parameters, return format, and an example. Missing details on error handling or edge cases, but sufficient for a filtering tool with output schema.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining each parameter: regions, periods, items, format (enumeration of 'summary'/'raw'), data_id (source), and data_json (alternative source). Examples clarify usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool filters statistics data and explains two modes (data_id vs data_json). It does not explicitly differentiate from sibling tools like search_statistics or aggregate_statistics, but the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on when to use data_id (efficient, avoids LLM context) vs data_json. Includes an example. However, lacks comparison with alternative sibling tools for filtering or searching.

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

get_available_valuesA

데이터에서 특정 필드의 사용 가능한 값을 조회합니다.

필터링 옵션을 확인하거나, 어떤 값으로 필터링할지 결정할 때 사용합니다.

Args: data_json: KOSIS 데이터 JSON 문자열 (get_statistics_data 결과) field: 필드명 (예: "C1_NM", "PRD_DE", "ITM_NM") - C1_NM: 분류1 (보통 지역명) - PRD_DE: 기간 - ITM_NM: 항목명

Returns: { "field": "C1_NM", "field_description": "분류1 (지역/카테고리)", "count": 17, "values": ["강원도", "경기도", ...], "filter_example": "filter_statistics(data, regions='서울특별시,부산광역시')" }

Example: >>> get_available_values(data, "C1_NM")

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYes
data_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool reads data and returns a list of values with count and example. It does not describe error handling for invalid inputs, but the read-only nature is clear.

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

Conciseness5/5

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

The description is concise, front-loaded with the purpose, and structured with Args and Returns sections. Every sentence adds value, and an example is included without unnecessary repetition.

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

Completeness5/5

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

Given the tool's simplicity (2 parameters, no nested objects), the description fully covers purpose, parameter details, return format, and an example. It is complete for an AI agent to select and invoke correctly.

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

Parameters5/5

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

Schema description coverage is 0%, but the description adds extensive meaning for both parameters: data_json is described as a KOSIS data JSON string from get_statistics_data, and field is explained with examples and field descriptions for common values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves available values for a specific field from data, with a specific verb (조회) and resource (available values). It distinguishes itself from siblings like filter_statistics by stating it's used to check filtering options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool when checking filtering options or deciding filter values. It provides an example, but does not explicitly mention when not to use it or name alternatives.

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

get_key_indicatorA

KOSIS 통계주요지표(Key Indicator)의 설명자료를 조회합니다.

8개 KOSIS 통계주요지표 sub-service 중 설명자료 계열 두 가지를 by 인자로 구분합니다 (KOSIS dev guide §2.7).

Args: by: "id" → 지표 고유번호로 조회 (pkNumberService.do) "name" → 지표명으로 조회 (indExpService.do) value: by="id" 면 지표 ID(jipyoId), by="name" 이면 지표명(jipyoNm). page: 페이지 번호 (기본 1). limit: 페이지당 결과 수 (기본 10).

Returns: {"by": ..., "value": ..., "count": , "results": [{...}, ...]} 결과 항목은 IndicatorExplanation 의 dict 형태.

Example: >>> get_key_indicator(by="id", value="160") >>> get_key_indicator(by="name", value="실업률")

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
pageNo
limitNo
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It transparently discloses the tool's behavior: it is a retrieval operation (조회), explains the two internal services used, parameter mapping, and return structure. No contradictions or hidden behaviors.

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

Conciseness5/5

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

The description is well-structured with Korean overview, parameter details, return format, and an example. Every sentence adds value, and it is concise without redundancy.

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

Completeness5/5

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

Given the tool has 4 parameters, no annotations, and an output schema, the description fully covers usage, parameter semantics, return structure, and provides an example. It is complete and self-contained.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully explains each parameter: 'by' values and their meaning, 'value' dependency on 'by', and defaults for 'page' and 'limit'. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves explanation data of KOSIS Key Indicator and specifies two sub-services based on the 'by' parameter. It distinguishes itself from siblings like list_key_indicators, search_key_indicators, and get_key_indicator_details by focusing on explanation retrieval with ID or name lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use 'by' parameter with values 'id' or 'name' and provides examples. However, it does not explicitly state when not to use this tool or mention alternatives like search_key_indicators for broader queries.

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

get_key_indicator_detailsB

KOSIS 통계주요지표의 시계열 상세 데이터를 조회합니다.

indIdDetailSearchRequest.do (service=4 / serviceDetail=indIdDetail).

Args: jipyo_id: 지표 ID (필수). start_date / end_date: 시점 기준 조회 (예: "2020", "2023"). recent_n: 최신자료 기준으로 최근 N개 시점만. start/end 와 동시 지정 시 start/end 우선. page, limit: 페이지네이션.

Returns: {"jipyo_id": ..., "count": , "results": [{period, value, ...}]}

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
end_dateNo
jipyo_idYes
recent_nNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Discloses parameter priority (start/end date overrides recent_n) and pagination behavior. Also states the return structure. However, with no annotations, it fails to mention whether the tool is read-only, requires authentication, or has rate limits, leaving gaps in safety and usage constraints.

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

Conciseness3/5

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

The description is structured with an introductory sentence, a code-like service call, then Args and Returns sections. It is somewhat verbose, but the structure aids readability. Could be more concise by removing redundant elements like the service call string.

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

Completeness3/5

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

Covers parameters and return format adequately given the tool's complexity (6 params, 1 required). However, it lacks broader context such as how it differs from get_key_indicator (which may also provide details), and does not mention output schema details even though one exists. The tool sits in a large sibling set, but no comparative info is provided.

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

Parameters4/5

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

Since the input schema has 0% description coverage, the description fully compensates by explaining each parameter: jipyo_id (required), start_date/end_date with examples, recent_n with conflict behavior, and page/limit. This adds significant meaning beyond the schema's type/default info, though date format specifics could be clearer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it queries 'time series detailed data of KOSIS statistical key indicators', clearly identifying the resource and action. It distinguishes from sibling tools like list_key_indicators and search_key_indicators which are for listing or searching, while this tool provides details for a specific indicator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or compare with siblings like get_key_indicator or get_statistics_data, leaving the agent to infer context.

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

get_statistics_dataA

KOSIS에서 통계 데이터를 조회합니다.

search_statistics나 get_table_metadata로 확인한 테이블의 실제 데이터를 가져옵니다.

Args: org_id: 기관 ID (예: "101") tbl_id: 테이블 ID (예: "DT_1B040A3") start_date: 시작 기간 (예: "2019", "202301") end_date: 종료 기간 (예: "2023", "202312") prd_se: 기간 유형 "Y"=연간, "M"=월간, "Q"=분기, "S"=반기 format: 응답 형식 "summary" (기본): LLM 친화적 요약 형식 (메타데이터 + 피벗 요약 + 샘플) "raw": 전체 원본 데이터 (주의: 컨텍스트 초과 가능) new_est_prd_cnt: 최근 N개 시점만 반환 (선택). KOSIS newEstPrdCnt 매핑. 예: 5 → 가장 최근 5개 기간만. start_date/end_date를 자동 제한하므로 "최근 5년만" 같은 자연어 쿼리에 직접 사용. prd_interval: 기간 stride (선택). KOSIS prdInterval 매핑. 예: prd_se="Y" + prd_interval=2 → 격년 데이터.

Returns: format="summary" (기본): { "summary": { "total_records": 850, "period_range": "2019~2023", "dimensions": ["행정구역별"], "items": ["인구수"] }, "metadata": { "tbl_id": "DT_1B040A3", "tbl_nm": "행정구역별 인구수", "org_nm": "통계청", "unit": "명" }, "pivot_summary": { "by_period": {"2019": 51849861, "2023": 51558034}, "by_c1": {"경기도": 68123456, "서울특별시": 47056789, ...} }, "data_preview": [최근 기간 샘플 50건], "available_values": { "PRD_DE": ["2019", "2020", "2021", "2022", "2023"], "C1_NM": ["서울특별시", "부산광역시", ...] } }

format="raw": 전체 API 응답 (배열 형태)

Example: >>> get_statistics_data("101", "DT_1B040A3", "2019", "2023") >>> get_statistics_data("101", "DT_1B040A3", "2019", "2023", format="raw")

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNosummary
org_idYes
prd_seNoY
tbl_idYes
end_dateYes
start_dateYes
prd_intervalNo
new_est_prd_cntNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description fully discloses behaviors: explains two response formats (summary vs raw), warns about context size for raw, and describes how new_est_prd_cnt limits periods. It does not mention authentication or error handling but is thorough for a read-only data retrieval tool.

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

Conciseness4/5

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

The description is well-structured with Args and Returns sections, and front-loaded with purpose. The Returns section is verbose with a full JSON example, which aids clarity but could be trimmed. Overall, it is appropriately sized for a complex tool.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, nested output), the description covers all aspects: purpose, prerequisites, parameter details, return formats, and examples. It lacks error handling and edge cases but is otherwise complete.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates fully with detailed parameter explanations, including examples, default values, and mapping to KOSIS concepts (e.g., prd_se values, newEstPrdCnt). This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb '조회' (query) and the resource '통계 데이터' (statistical data) from KOSIS. It explicitly distinguishes from sibling tools like search_statistics and get_table_metadata by indicating that this tool retrieves actual data from tables identified by those tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description guides when to use by stating it works after search_statistics or get_table_metadata. It provides examples and parameter details. However, it does not explicitly mention when not to use or alternatives among siblings like filter_statistics or aggregate_statistics.

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

get_table_metadataA

통계표의 메타데이터(구조 정보)를 조회합니다.

테이블의 분류항목, 항목, 기간 정보를 파악할 때 사용합니다. 데이터 조회 전에 어떤 필터가 가능한지 확인하는 데 유용합니다.

Args: org_id: 기관 ID (예: "101") tbl_id: 테이블 ID (예: "DT_1B040A3")

Returns: { "table_info": { "tbl_id": "DT_1B040A3", "tbl_nm": "행정구역별 인구수", "org_nm": "통계청", "prd_se": "Y", "period_range": "19922023" }, "structure": { "dimensions": [...], "dimension_count": 1, "items": [...], "item_count": 1 }, "suggested_query": { "example": "get_statistics_data('101', 'DT_1B040A3', '2019', '2023')", "available_periods": "19922023" } }

Example: >>> get_table_metadata("101", "DT_1B040A3")

ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYes
tbl_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only metadata query (no destructive actions) but does not explicitly state behavior such as idempotency, authentication requirements, or rate limits. The example and return structure give some transparency, but the lack of explicit behavioral disclosure prevents a higher score.

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

Conciseness4/5

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

The description is relatively compact, with a clear front-loaded purpose sentence followed by usage context, specific parameter explanations, and an example. The return structure is detailed but relevant. It could be slightly more concise by omitting the explicit return JSON if the output schema is sufficient, but it still earns its place.

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

Completeness4/5

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

Given the lack of annotations and the presence of an output schema, the description covers the essential aspects: purpose, usage context, parameters, return values, and an example. It does not address error cases or limitations, but for a metadata query tool with an output schema, it is reasonably complete.

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

Parameters5/5

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

The input schema has 0% description coverage, but the tool description's Args section fully explains both parameters: org_id as '기관 ID (예: "101")' and tbl_id as '테이블 ID (예: "DT_1B040A3")'. This provides clear semantics beyond the schema, satisfying the need for parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '통계표의 메타데이터(구조 정보)를 조회합니다' (queries metadata of statistical tables) and elaborates on the specific structural information (분류항목, 항목, 기간 정보). It differentiates from sibling tools like get_statistics_data by focusing on pre-query metadata inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says '데이터 조회 전에 어떤 필터가 가능한지 확인하는 데 유용합니다' (useful for checking available filters before querying data), indicating when to use it. However, it does not explicitly state when not to use or mention alternative tools, so it loses one point.

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

list_key_indicatorsA

KOSIS 통계주요지표를 카테고리 또는 수록주기 기준으로 나열합니다.

Args: by: "category" → 목록ID(listId)별 지표 (indiListService.do) "period" → 수록주기(prdSe)별 지표 (prListSearchRequest.do) value: by="category" 면 listId(예: "A"). by="period" 면 prdSe(Y/M/Q/S). page: 페이지 번호. limit: 페이지당 결과 수.

Returns: {"by": ..., "value": ..., "count": , "results": [{...}, ...]}

ParametersJSON Schema
NameRequiredDescriptionDefault
byNocategory
pageNo
limitNo
valueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations exist, so the description bears full responsibility. It discloses the tool's read-only nature (listing), pagination behavior, and return format. It does not mention authentication or rate limits, but the behavior is straightforward.

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

Conciseness5/5

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

The description is concise (8 lines) with clear sections (Args, Returns) and no extraneous content. Every sentence is necessary and informative.

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

Completeness4/5

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

The description covers the main functionality, parameters, and return structure. It lacks clarification on handling null 'value' or defaults, but given the output schema exists and the input schema defines defaults, it is nearly complete.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description fully compensates by explaining each parameter: 'by' (category/period), 'value' (listId or prdSe), page, and limit, with examples. This adds significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists KOSIS key indicators by category or period, with specific parameters and endpoints. It distinguishes from sibling tools like search_key_indicators and get_key_indicator by focusing on listing rather than searching or details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each mode (by=category or period) with examples. However, it does not explicitly state when not to use this tool versus alternatives like search_key_indicators or get_key_indicator.

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

list_stored_dataA

저장된 원본 데이터 파일 목록을 조회합니다.

get_statistics_data로 조회한 대용량 데이터는 자동으로 파일에 저장됩니다. 이 도구로 저장된 파일 목록을 확인하고, read_stored_data로 접근할 수 있습니다.

Returns: { "stored_files": [ { "data_id": "20231213_abc12345", "file_path": "/tmp/kosis_data/...", "record_count": 1000, "tbl_nm": "행정구역별 인구수", "created_at": "2023-12-13T10:30:00" }, ... ], "total_files": 5, "hint": "read_stored_data(data_id)로 데이터 접근" }

Example: >>> list_stored_data()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list with specific fields like data_id, file_path, record_count, and provides a hint for accessing data. It does not mention any destructive behavior or special requirements, which is appropriate for a read-only listing tool.

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

Conciseness3/5

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

The description includes a full return example and a hint, which are helpful but slightly redundant (the hint is repeated in the example). It could be more concise without losing clarity, but it is well-structured and front-loaded.

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

Completeness5/5

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

Given no parameters and an existing output schema, the description is complete. It explains the purpose, usage context, and provides an example return value, fully equipping an AI agent to use the tool correctly.

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

Parameters4/5

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

The input schema has zero parameters and 100% schema coverage, but the description adds value by explaining the tool's purpose in the context of get_statistics_data and showing the return structure. Since there are no params, the description is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb '조회합니다' (retrieve) and the resource '저장된 원본 데이터 파일 목록' (list of stored original data files). It distinguishes itself from sibling tools like read_stored_data by indicating that this tool lists files and the other accesses specific data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the workflow: large data from get_statistics_data is automatically saved to a file, this tool lists those files, and read_stored_data accesses them. This provides clear context on when to use this tool, though it does not explicitly state when not to use it or mention alternatives.

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

read_stored_dataA

저장된 원본 데이터를 읽습니다.

대용량 데이터는 청크 단위로 읽을 수 있습니다. chunk_index를 지정하지 않으면 전체 데이터를 반환합니다.

Args: data_id: 데이터 ID (list_stored_data 또는 get_statistics_data에서 확인) chunk_index: 청크 인덱스 (0부터 시작, 선택) chunk_size: 청크 크기 (기본 50건)

Returns: { "data_id": "20231213_abc12345", "meta": { "tbl_id": "DT_1B040A3", "tbl_nm": "행정구역별 인구수", "record_count": 1000 }, "data": [...], # 요청한 데이터 "chunk_info": { # chunk_index 지정 시 "chunk_index": 0, "chunk_size": 50, "total_chunks": 20, "has_more": True } }

Example: # 전체 데이터 읽기 >>> read_stored_data("20231213_abc12345")

# 청크별로 읽기
>>> read_stored_data("20231213_abc12345", chunk_index=0)
>>> read_stored_data("20231213_abc12345", chunk_index=1)
ParametersJSON Schema
NameRequiredDescriptionDefault
data_idYes
chunk_sizeNo
chunk_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses chunking behavior, default chunk size, and return format including meta, data, and chunk_info. It mentions that without chunk_index, all data is returned. No annotations are provided, but the description adequately covers behavioral traits.

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

Conciseness5/5

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

The description is concise and well-structured with clear sections (Args, Returns, Example). Every sentence adds value, and the example clarifies usage without redundancy.

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

Completeness5/5

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

Given the moderate complexity, the description covers all necessary aspects: parameter explanations, return format with example, and reference to sibling tools for obtaining data_id. It is complete despite missing annotations.

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

Parameters4/5

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

Schema description coverage is 0%, so the description compensates by explaining each parameter: data_id source, chunk_index start and optionality, chunk_size default. This adds meaning beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: '저장된 원본 데이터를 읽습니다' (reads stored original data). It specifies the resource (stored data) and verb (read), and distinguishes from sibling tools that focus on statistics or browsing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to read stored data, with chunking for large data) and provides examples. It does not explicitly state when not to use or compare to alternatives, but the context is clear.

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

search_key_indicatorsA

KOSIS 통계주요지표를 이름 또는 고유번호로 검색합니다.

Args: by: "name" → 지표명별 목록 검색 (indListSearchRequest.do, service=4) "id" → 고유번호별 검색 (indListSearchRequest.do, service=4) value: by="name" 이면 지표명, by="id" 이면 jipyoId. page: 페이지 번호. limit: 페이지당 결과 수.

Returns: {"by": ..., "value": ..., "count": , "results": [{...}, ...]}

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
pageNo
limitNo
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It does not state whether the tool is read-only, any side effects, authentication needs, or rate limits. The return format is described, but not operational behavior.

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

Conciseness4/5

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

The description is well-structured with Args and Returns sections, and each parameter is clearly explained. It is not overly verbose, though some redundancy in Korean text could be trimmed. Still, it is mostly concise.

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

Completeness4/5

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

Given the absence of annotations and the presence of an output schema (which we don't see but is noted), the description provides a good overview of inputs and the return format. However, it lacks behavioral context and does not mention prerequisites or error cases, which are needed for full completeness.

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

Parameters5/5

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

The description fully explains all four parameters: by (with enum values), value (with context-dependent meaning), page, and limit. It provides enough detail for an agent to correctly populate them, compensating for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool searches KOSIS statistical key indicators by name or unique ID. It provides specific endpoints and distinguishes itself from sibling tools like search_statistics by targeting key indicators specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the two search modes (by name or ID) and their parameters, but does not explicitly state when to use this tool versus alternatives like browse_categories or search_statistics. No 'when not to use' guidance is provided.

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

search_statisticsA

KOSIS 통계표를 키워드로 검색합니다.

원하는 통계 데이터를 찾을 때 첫 번째로 사용하는 도구입니다. 검색 결과에서 org_id와 tbl_id를 얻어 다음 단계에 사용합니다.

Args: keyword: 검색 키워드 (예: "인구", "고용", "물가", "GDP") org_id: 기관 ID로 필터링 (선택) "101"=통계청, "154"=고용노동부, "301"=한국은행 limit: 최대 결과 수 (기본 10) sort: 정렬 기준 (선택) - "RANK": 관련도 순 (KOSIS 기본) - "DATE": 최신 갱신일 순 — verify_statistics 같이 최신 데이터가 중요할 때 권장 None이면 KOSIS 기본(RANK).

Returns: { "query": "인구", "result_count": 10, "results": [...], "org_distribution": {"통계청": 5, "한국은행": 3, ...}, "next_step": "get_table_metadata(org_id, tbl_id)로 테이블 구조 확인" }

Example: >>> search_statistics("인구") >>> search_statistics("고용", org_id="154") >>> search_statistics("최저임금", sort="DATE") # 최신 갱신 순

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
org_idNo
keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does not explicitly state that the tool is read-only or non-destructive, but the search nature and guidance on sort options give some behavioral context. However, it lacks explicit safety or side-effect disclosure.

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

Conciseness5/5

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

The description is well-structured with a clear purpose line, usage advice, parameter list, returns, and examples. Every sentence is useful, and the most important information is front-loaded.

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

Completeness5/5

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

Despite the tool having 4 parameters and an output schema, the description is complete: it explains the return structure, includes a next_step suggestion, and provides examples. It covers all necessary context for correct use.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully with detailed parameter explanations, examples (e.g., org_id codes, sort options with recommendations), and default values, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches KOSIS statistics tables by keyword, with a specific verb and resource. It positions itself as the first tool to use, distinguishing from siblings like browse_categories and search_key_indicators.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it is the first tool for finding statistics data and suggests the next step (get_table_metadata). It provides examples but does not explicitly exclude scenarios where alternatives might be preferred.

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

verify_statisticsA

LLM이 생성한 숫자 주장을 KOSIS 원본 데이터와 대조 검증합니다 (US-005).

한국어/영문 자연어 주장에서 숫자 + 시점 + 지역 + 지표를 추출하여 KOSIS의 실제 셀 값과 상대 오차 비교 후 일치 여부를 반환합니다.

Args: claim: 검증할 주장 (예: "2023년 서울 인구는 9.4M명"). table_id: 알고 있는 KOSIS TBL_ID. 'org_id:tbl_id' 형식도 허용. 생략하면 키워드 검색으로 자동 추정합니다 (정확도 ↓). tolerance: 상대 허용 오차. 기본 0.01 (= 1%).

Returns: VerifyResult dict: match, expected, actual, diff_pct, tolerance, table_id, source_url, confidence, explanation.

ParametersJSON Schema
NameRequiredDescriptionDefault
claimYes
table_idNo
toleranceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description fully covers behavior: extraction of numbers, relative error comparison, return of match status. It also notes accuracy impact when table_id is omitted. No contradictory information.

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

Conciseness4/5

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

Description is structured with a summary, then Args and Returns sections. It is efficient but slightly verbose with the code-style blocks. Front-loaded with purpose.

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

Completeness4/5

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

The description covers inputs, process, and output fields (VerifyResult). It mentions the accuracy trade-off for table_id. Output fields are described, compensating for lack of output schema in context.

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

Parameters4/5

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

Schema description coverage is 0%, but the description explains each parameter: claim (the statement), table_id (optional, format, accuracy impact), tolerance (default 0.01). Adds meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool verifies numeric claims against KOSIS data, specifying the action (verify) and resource (KOSIS). It distinguishes from sibling tools like search_statistics or browse_categories by focusing on verification of claims.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool is used to verify claims with numbers, time, region, and indicator. It gives context about the extraction process but does not explicitly state when not to use it or provide direct comparisons to sibling tools.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose. Tools like search_statistics and search_key_indicators target different data types (general tables vs. key indicators), and browse_categories vs. list_key_indicators similarly avoid overlap. Detailed descriptions ensure no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., search_statistics, get_table_metadata, filter_statistics). Convention is uniform across all 16 tools, with no mixing of styles or vague verbs.

Tool Count5/5

16 tools is well-scoped for the domain of Korean statistics. The set covers discovery, browsing, metadata, data retrieval, filtering, aggregation, verification, key indicators, and stored data management without being excessive.

Completeness5/5

The tool surface covers the full statistical workflow: searching and browsing tables, inspecting metadata, retrieving data, filtering, aggregating, verifying claims, and accessing key indicators. Stored data management and power-user tools round out the offering without significant gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables natural language querying of Korean statistical data from KOSIS, including population, employment, GDP, housing prices, and more, with support for regional and trend analysis.
    8
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Korean public-data MCP servers for AI agents, enabling natural language queries to KOSIS statistics and other Korean official data sources without requiring local accounts or API keys.

Latest Blog Posts

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/seolcoding/korean-stat-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server