Skip to main content
Glama
GeeYun086

korea-public-data-mcp

korea-public-data-mcp

This is an MCP server that allows Claude to directly call Korean public data (Financial Supervisory Service OpenDART, Bank of Korea ECOS, Statistics Korea KOSIS, Public Data Portal) and answer financial, economic, and statistical figures based on actual API responses rather than guesswork.

In the same way that MCPs using DART electronic disclosure data answer financial statement questions, Claude will call this server's tools to answer questions like "What was this company's revenue last year?", "Tell me the recent base rate trend", "What is our country's unemployment rate?" based on the latest figures.

The name is temporarily set as korea-public-data-mcp. When uploading to GitHub, you can freely change it to any name you want without affecting the code's operation.

Why It Was Made This Way (Design Principles)

It was designed to adhere to three constraints requested by the person in charge:

  1. No LLM/External Costs — This server only "fetches" data. It does not call any LLM internally and does not use any paid APIs. Since actual inference/summarization is done by Claude calling this MCP, the server operation cost is virtually zero (excluding electricity/server resources).

  2. Prevent API Blocking (IP Ban) — Government public APIs may be temporarily blocked if per-second/daily call limits are exceeded. Therefore:

    • A rate limiter (token bucket) is placed in front of all API calls to slow down automatically.

    • Repeated identical queries reuse memory cache, and large static files like the DART company list prevent re-download via disk cache (default 7 days).

    • Instead of calling individual account items/periods one by one, data is fetched in table units and period ranges at once (e.g., one call per company for all financial statement items, statistics are queried with a start~end period in a single call).

    • APIs that support batching, such as business registration status lookup, send up to 100 items in a single call.

    • For 429/5xx responses, it retries up to 3 times with exponential backoff.

  3. Run Each Person's Own Docker — Instead of running a separate server, each team member builds and runs locally with docker build + docker run and connects it to their own Claude.

Related MCP server: OpenDART MCP Server

APIs Currently Included (Primary Core Scope)

Since implementing all 40+ requested APIs at once would make maintenance difficult, we first implemented the core 4 institutions that the person in charge uses most frequently with good completeness. The rest can be added continuously by following the same pattern as the Extension Guide.

Agency

Provided Tools

Notes

금융감독원 OpenDART

dart_search_company, dart_get_financial_statements, dart_get_company_disclosures

Use in order: company name search → corp_code → financial statements/disclosures

한국은행 ECOS

ecos_get_key_indicator, ecos_search_statistics, ecos_get_statistic_data

Base rate/exchange rate/GDP/CPI can be queried directly by name

통계청 KOSIS

kosis_search_statistics, kosis_get_statistics_data

After keyword search, batch query by period range in table units

공공데이터포털 (data.go.kr)

data_go_kr_check_business_status, data_go_kr_generic_get

Business registration status supports batch (up to 100 items), other services are temporarily handled via a generic GET tool

한국수출입은행

koreaexim_get_exchange_rates, koreaexim_get_loan_rates, koreaexim_get_international_rates

Issued from koreaexim.go.kr's own site, not data.go.kr. Exchange rates/loan rates/international rates are separate API products, so you must apply for each service and receive 3 authkeys. Data may be empty when queried before 11:00 on business days or on non-business days.

API Key Issuance Guide

Even if you haven't obtained keys yet, the server will start normally and the tool list will be visible. However, when you actually call a tool, a message indicating that the key is missing will be returned, so apply for the ones you need in order.

Agency

Issuance Location

Notes

OpenDART

https://opendart.fss.or.kr → Register → [Apply/Manage Auth Key]

Issued immediately upon registration, fastest

ECOS

https://ecos.bok.or.kr/api/#/

Open API auth key application, within immediate~1 day

KOSIS

https://kosis.kr/openapi/index/index.jsp

"OpenAPI Application for Use", approval may take time

공공데이터포털

https://www.data.go.kr → desired service detail page → [Apply for Use]

Separate application needed per service. Recommend applying for "National Tax Service_Business Registration Information Verification and Status Inquiry" first

한국수출입은행

https://www.koreaexim.go.kr/ir/HPHKIR019M01 → Open API specification → Apply for auth key issuance

Not via data.go.kr but issued directly from koreaexim.go.kr. immediate~same day

Once you receive the keys, copy .env.example to .env and fill it in.

cp .env.example .env
# .env 파일을 열어 발급받은 키 입력

Quick Start (Docker)

git clone <이 레포 주소>
cd korea-public-data-mcp
cp .env.example .env   # 키 채워넣기 (없어도 일단 진행 가능)
docker build -t korea-public-data-mcp .

Register it in the MCP settings of Claude Desktop / Claude Code (such as claude_desktop_config.json) as shown below.

{
  "mcpServers": {
    "korea-public-data": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--env-file", "/절대경로/korea-public-data-mcp/.env",
        "korea-public-data-mcp"
      ]
    }
  }
}

When you restart Claude, the dart_*, ecos_*, kosis_*, data_go_kr_* tools will appear in the tool list. Now, when you ask a question like "삼성전자 2023년 매출액 알려줘", Claude will call these tools and answer based on actual figures.

Local Development/Testing (Without Docker)

python -m venv .venv && source .venv/bin/activate
pip install -e .
pip install pytest
pytest -q                      # 키 없이도 통과하는 스모크 테스트
python -m korea_public_data_mcp.server   # stdio로 직접 실행해보기 (Ctrl+C로 종료)

Extension Guide (Adding a New API)

The entire list provided by the person in charge (RISS, KIPRIS, 국가법령정보, 나라장터, 서울 열린데이터광장, etc.) can be added by repeating the pattern below. For example, to add a new agency foo:

  1. Add a foo entry to API_KEYS in src/korea_public_data_mcp/config.py (env var, issuance URL)

  2. Create src/korea_public_data_mcp/clients/foo.py — write only the actual endpoint call logic using core/http_client.get_json (retry/rate limiting is handled automatically by the common client)

  3. Create src/korea_public_data_mcp/tools/foo_tools.py — wrap the client function with the @mcp.tool() decorator, catch MissingApiKeyError and return a guidance message, cache with cached_call

  4. Add one line foo_tools.register(mcp) in src/korea_public_data_mcp/server.py

  5. Add entries to .env.example and README table.

Thanks to this structure, you don't need to rewrite the blocking prevention (rate limiting/cache/batch) logic each time you add a new API.

Next Extension Candidates (Based on Requested List)

  • Law/Administration: 국가법령정보 Open API, 열린국회정보 API

  • Procurement/Projects: 나라장터(g2b), 조달데이터허브, NTIS 국가과학기술정보

  • Academic: RISS, KISTI, 국립중앙도서관 OpenAPI

  • Intellectual Property: KIPRIS Plus (patents/trademarks)

  • Regional: 서울 열린데이터광장, 경기데이터드림

If you let me know the priority or which API to add next, I will implement from that item onward.

License

Feel free to use/modify for internal purposes.

Available Tools

13 tools
dart_get_company_disclosuresC

기간 내 회사 공시 목록을 조회한다. 날짜는 YYYYMMDD 형식 (예: 20240101).

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
corp_codeYes
start_dateYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of disclosure. It does not mention that this is a read-only operation, what the response format is (which is important since there is no output schema), whether it paginates, or any limitations (e.g., maximum date range, rate limits). The agent has little beyond the parameter types.

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 short—one sentence. It is front-loaded with the purpose (조회한다). However, it quotes length is reasonable, but it lacks structure (no paragraphs or lists) and could include the date format inline. It is not verbose, but it is under-informative, not just concise.

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

Completeness2/5

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

For a tool with 3 required parameters, no output schema, and no annotations, the description is incomplete. It does not tell the agent what the response will look like, how to interpret corp_code, or any usage constraints. The date format instruction is helpful but insufficient given the complexity of the Korean DART system (which has specific code formats and pagination).

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

Parameters2/5

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

Schema description coverage is 0%, meaning the parameters have no descriptions other than their types. The tool description only explains the date format (YYYYMMDD) but does not explain what corp_code refers to (likely a DART company code), nor how to obtain it. It adds minimal value over the 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 retrieves (조회한다) a list of company disclosures (회사 공시 목록) within a date range. The verb '조회한다' (retrieve) and the resource '회사 공시 목록' (company disclosure list) are specific. It is distinguishable from sibling tools, which focus on financial statements, exchange rates, or general search.

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 guidance is provided on when to use this tool compared to siblings like dart_get_financial_statements or dart_search_company. There is no mention of prerequisites, such as needing a valid corp_code from dart_search_company, which would be critical for an agent to use it correctly.

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

dart_get_financial_statementsB

OpenDART 단일회사 전체 재무제표를 조회한다. corp_code는 dart_search_company로 먼저 찾을 것. report: '사업보고서'(연간, 기본값) | '1분기' | '반기' | '3분기'. fs_div: 'CFS'(연결재무제표, 기본값) | 'OFS'(별도재무제표).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
fs_divNoCFS
reportNo사업보고서
corp_codeYes

TDQS

B3.1/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 carry the full burden of behavioral disclosure. It mentions that the tool retrieves financial statements but does not disclose any side effects, authentication requirements, rate limits, error behavior, or what happens with invalid input. The behavioral traits beyond the action are largely absent.

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 short and front-loaded with the main action. It uses a clear list format for parameter options. Every sentence serves a purpose, and there is no redundant information. It is appropriately sized for the tool's complexity.

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

Completeness2/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 output schema, and no annotations, the description is incomplete. It does not describe the return value format, what 'entire financial statements' includes, error conditions, or pagination. Year parameter is unexplained. The description lacks sufficient context for the agent to fully understand the tool's behavior.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains the allowed values and defaults for 'report' and 'fs_div', and clarifies that 'corp_code' should be obtained from a sibling tool. However, 'year' is not explained (e.g., format, range) and 'corp_code' details are minimal. The description adds some meaning but not for all parameters.

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 retrieves entire financial statements for a single company from OpenDART, which is a specific verb and resource. It also mentions a prerequisite (finding corp_code via dart_search_company). However, it does not explicitly distinguish itself from the sibling tool 'dart_get_company_disclosures', which could be related.

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 provides a prerequisite instruction to use dart_search_company first and explains the allowed values for 'report' and 'fs_div'. However, it does not give explicit guidance on when to use this tool versus alternatives like dart_get_company_disclosures, nor does it state when not to use it.

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

dart_search_companyA

회사명으로 OpenDART corp_code를 검색한다. 재무제표/공시 조회 전에 먼저 호출해서 정확한 corp_code를 확인하는 용도. 예: company_name='삼성전자'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
company_nameYes

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 must disclose behavior. It states the tool searches by company name and returns a corp_code, which covers the core purpose. However, it does not disclose potential behavior such as partial matches, error handling, rate limits, or whether it is read-only versus destructive. The description is adequate for a simple data lookup but lacks depth.

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 two sentences plus an example, with no wasted words. It is front-loaded with the core purpose and immediately provides usage context and an example.

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 simple tool (2 parameters, no output schema, no annotations), the description covers the essential information: what it does, when to use it, and an example. It does not explicitly describe the return value format, but for this tool it is adequately implied.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It describes 'company_name' with an example ('삼성전자'), clarifying the expected input. The 'limit' parameter is not mentioned, but its default value of 10 and integer type are in the schema. The description adds significant semantic value for 'company_name'.

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 states a specific verb ('검색한다') and resource ('OpenDART corp_code'), and clearly distinguishes the tool's role as a preliminary step before financial statement or disclosure queries. The example '삼성전자' clarifies the input format.

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

Usage Guidelines5/5

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

The description explicitly says to call this tool before financial statement or disclosure searches, providing a clear when-to-use directive. It does not mention alternatives, but the sibling list includes similar DART tools, 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.

data_go_kr_check_business_statusA

사업자등록번호(하이픈 없이 10자리) 상태를 최대 100건까지 한 번에 배치 조회한다. 예: business_numbers=['1234567890', '0987654321'].

ParametersJSON Schema
NameRequiredDescriptionDefault
business_numbersYes

TDQS

A4/5.0
Behavior2/5

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

With no annotations, the description alone must disclose behavioral traits. It indicates a read operation but omits details on error handling (e.g., invalid numbers), rate limits, authentication needs, or whether the operation is idempotent. This lack of transparency could lead to confusion during execution.

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 an example—with no redundant words. The key constraint (format, limit) and usage pattern are front-loaded, earning every sentence 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?

For a simple one-parameter tool without an output schema, the description covers input format and batch limit adequately. It lacks details about the return value or status, but given the tool's straightforward nature (batch status check), it is mostly complete. Minor gap: no mention of what '상태' (status) entails.

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 0% description coverage, so the description must compensate. It adds significant semantic value: explains the expected number format (10 digits, no hyphen), batch limit (100), and provides an example. This goes well beyond the bare schema definition.

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

Purpose5/5

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

The description clearly identifies the specific verb '조회한다' (inquire/check) and the resource 'business registration numbers', with precise constraints: 10 digits, no hyphen, max 100 batch. This distinguishes it from sibling tools which focus on different Korean data sources (dart, ecos, kosis, etc.).

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 states the required input format (10 digits without hyphen) and batch size limit (100), which are key usage guidelines. While it does not mention when not to use (there are no direct alternatives), the provided constraints are clear and actionable for an AI agent.

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

data_go_kr_generic_getA

공공데이터포털의 다른 서비스(사전에 클라이언트 코드가 없는 것)를 호출할 때 쓰는 범용 도구. base_url/path는 해당 서비스의 활용신청 상세페이지에 나온 End Point를 그대로 넣고, params에는 serviceKey를 제외한 나머지 파라미터만 넣는다(serviceKey는 자동으로 채워짐). 자주 쓰는 서비스는 전용 client/tool을 새로 만드는 것을 권장 (README 확장 가이드 참고).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
paramsYes
base_urlYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description must convey behavioral traits. It mentions that serviceKey is auto-filled (an important side effect), but does not disclose other behaviors such as rate limits, authentication requirements, error handling, or whether the tool is read-only or destructive. The description implies a safe call, but lacks explicit behavioral details beyond the auto-fill mechanism.

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 remarkably concise: three sentences that front-load the purpose, then dive into usage details. Every sentence adds unique value—purpose, parameter semantics, and recommendation for alternatives. 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 that there is no output schema, the description does not mention return values or error formats. However, for a generic endpoint tool, the focus on input parameters and usage is appropriate. The description covers why, when, and how to use it, but could benefit from a note on response format or common error codes. Still, it feels sufficient for an agent to invoke 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?

There are 3 parameters (base_url, path, params) with 0% schema description coverage, meaning the schema provides no descriptions. The description compensates by explaining that base_url and path come from the endpoint, and params should not include serviceKey. It also notes that params is an object (additionalProperties: true). While not exhaustive (e.g., no format details for base_url), it 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.

Purpose4/5

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

The description clearly states it is a generic tool for calling other public data portal services not having a client code. It specifies the verb (call/invoke) and the resource (공공데이터포털 services), distinguishing it from sibling tools that are specialized (e.g., dart_search_company, kosis_get_statistics_data). However, it does not explicitly name these siblings, relying on the context of 'pre-made client tools'.

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

Usage Guidelines5/5

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

The description provides excellent usage guidance: it explains when to use this tool (for services without client code), what to put in base_url/path (endpoint from application details), and what not to include in params (excluding serviceKey since it's auto-filled). It also recommends creating a dedicated client/tool for frequently used services, pointing to a README extension guide. This explicitly helps the agent decide between this generic tool and alternatives.

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

ecos_get_key_indicatorA

자주 찾는 거시경제 지표를 이름으로 바로 조회한다. indicator: '기준금리' | '원달러환율' | 'GDP성장률' | '소비자물가지수'. start/end 형식은 지표의 주기에 맞춰야 함(월간=YYYYMM, 분기=YYYYQn, 일간=YYYYMMDD).

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
startYes
indicatorYes

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations provided, the description fully compensates by clearly explaining date format requirements (monthly=YYYYMM, quarterly=YYYYQn, daily=YYYYMMDD) and listing the exact supported indicators. This is sufficient behavioral context for an agent to use the tool correctly.

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 short sentences. The first sentence states the core purpose, and the second provides enumerations and format rules. 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 the low schema coverage (0%) and no annotations or output schema, the description covers purpose, parameter options, and date format rules. It is nearly complete for this simple key indicator lookup tool, though it omits details like error handling or response shape.

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 schema provides 0% description coverage, meaning no parameter descriptions exist. The tool description adds significant value by specifying the exact indicator values and date format rules. However, it could benefit from clarifying start/end meaning (e.g., date range, inclusive) but is adequate.

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 fetches frequently searched macroeconomic indicators by name, listing four specific indicator values. It is distinct from sibling tools like ecos_search_statistics and ecos_get_statistic_data, which imply broader search or data retrieval, while this tool targets specific 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 provides specific indicator names ('기준금리', etc.) and start/end date format rules based on indicator frequency. However, it lacks explicit guidance on when to use this tool versus alternatives, such as ecos_get_statistic_data for a wider range of statistics.

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

ecos_get_statistic_dataB

ecos_search_statistics로 찾은 stat_code로 실제 수치 데이터를 조회한다. cycle: D(일)/M(월)/Q(분기)/A(연).

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
cycleYes
startYes
stat_codeYes
item_code1No
item_code2No

TDQS

B3.1/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 carry the full behavioral disclosure burden. It does not mention any behavioral traits such as whether the tool is read-only, rate limits, auth requirements, or what happens if invalid parameters are provided. The description only adds the cycle format, which is minimal.

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 very short (two sentences) and front-loaded with the main purpose. However, the second sentence is a list of cycle options, which could be more structured. Still, no redundant information is present.

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

Completeness2/5

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

Given the tool has 6 parameters (4 required), no output schema, and no annotations, the description is severely incomplete. It does not explain the meaning of start and end, the format of item_code1 and item_code2, or the expected return format. The context signals confirm high complexity, and the description fails to provide adequate guidance for an agent.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It only explains the cycle parameter and leaves the other five parameters (stat_code, start, end, item_code1, item_code2) completely undocumented. The schema provides no default values for required parameters, so the description adds value only for cycle. This is a partial compensation, earning a baseline-adjusted 3.

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 that the tool retrieves numeric data using a stat_code obtained from a sibling tool (ecos_search_statistics), and specifies the cycle options. It effectively distinguishes its purpose from the search tool and other sibling tools.

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 mentions that the stat_code should come from a sibling tool, providing a basic usage context. However, it does not explain when to use this tool vs. other tools like ecos_get_key_indicator or kosis_get_statistics_data, nor does it provide any exclusions or prerequisites beyond the input schema.

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

ecos_search_statisticsA

키워드로 ECOS 통계표(stat_code)를 검색한다. 사전 등록되지 않은 지표를 찾을 때 사용.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes

TDQS

A3.7/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. The description accurately describes the operation as a search (read-only) but does not disclose important behavioral aspects such as whether it returns multiple results, pagination behavior, or any rate limits. With zero annotations, a score of 3 is appropriate as it doesn't offer deep behavioral insight beyond the single sentence.

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 very concise at two short sentences. It directly states the core function in the first sentence and adds usage context in the second. Every word serves a purpose, and there is no redundancy. However, it could be slightly improved by more clearly separating the main purpose from additional context, but overall it's efficient.

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?

Given the tool has a single required parameter, no output schema, no annotations, and a clear purpose, the description is nearly sufficient but lacks details on the return format (e.g., what fields are returned alongside the stat_code). The sibling context suggests other tools exist for fetching data once the code is known, but the description doesn't explicitly connect this. Overall, adequate for a simple search tool but leaves some gaps.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the schema itself provides no description for the only parameter 'keyword'. The description mentions that the tool searches by keyword but does not elaborate on the nature of acceptable keywords (e.g., English or Korean, partial match, case sensitivity). For a single parameter with zero schema documentation, the description should compensate, but it barely does.

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's purpose: searching for ECOS statistics tables by keyword. It uses specific verb-resource pairing (검색한다+ECOS 통계표) and distinguishes the return value being a stat_code. The additional phrase '사전 등록되지 않은 지표를 찾을 때 사용' adds context that this tool is for finding unregistered indicators, which differentiates it from sibling tools like ecos_get_statistic_data that likely use an already-known code.

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 on when to use this tool: when searching for a stat_code for an indicator that is not pre-registered. However, it does not explicitly state when NOT to use it (e.g., if you already have the stat_code) or explicitly name alternatives. The sibling tool ecos_get_statistic_data is implied as the alternative for when you have the code, but this is not stated outright.

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

koreaexim_get_exchange_ratesA

한국수출입은행 현재환율(매매기준율/전신환매매율)을 조회한다. search_date: YYYYMMDD 또는 YYYY-MM-DD, 생략 시 당일 영업일 기준. 영업일 11시 이전이나 비영업일 조회 시 데이터가 비어 있을 수 있다.

ParametersJSON Schema
NameRequiredDescriptionDefault
search_dateNo

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 the full burden. It discloses that data may be empty if queried before 11 AM on a business day or on a non-business day, and that the date defaults to the current business day. It does not mention authentication, rate limits, or whether the operation is read-only (though implicit from 'get').

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?

Three sentences, each earning its place: purpose, parameter details, behavioral note. Information is front-loaded and no words are wasted. Ideal length for a single-parameter 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 simplicity (one parameter, no output schema, no annotations), the description covers the main usage and limitations. However, it does not describe the return format or fields, which would be useful for an agent. Still, it is largely complete for the task.

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%, so the description must compensate. It fully explains the search_date parameter: accepted formats (YYYYMMDD or YYYY-MM-DD), default behavior (current business day if omitted), and the consequence of querying at certain times. 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 current exchange rates (basic rate/telegraphic transfer rate) from Korea Exim Bank, using a specific verb (조회하다) and resource. It distinguishes from sibling tools like get_loan_rates and get_international_rates by naming the exact rate types.

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 (for exchange rates) and provides practical context: search_date format, default behavior, and warning about empty data on non-business days or before 11 AM. It does not explicitly state when not to use it or name alternatives, but the sibling tools are clearly different domains.

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

koreaexim_get_international_ratesA

한국수출입은행 국제금리(LIBOR 등)를 조회한다. search_date: YYYYMMDD 또는 YYYY-MM-DD, 생략 시 당일 영업일 기준.

ParametersJSON Schema
NameRequiredDescriptionDefault
search_dateNo

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read operation but does not explicitly state that it is non-destructive, does not mention authentication requirements, rate limits, or error handling behaviors. The only behavioral point is the default date logic.

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 short sentences covering the core purpose and the single parameter. Every word adds value, with no redundancy or filler. It is front-loaded with the primary action.

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?

Given the tool's simplicity (one optional parameter, no output schema), the description is adequate for basic understanding. However, it lacks information about the response structure, potential empty results, or any connection to other Korea Eximbank data. It is minimally viable but not fully complete.

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

Parameters4/5

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

The input schema has 0% description coverage (the property has only a title). The description adds meaningful detail by specifying the accepted formats (YYYYMMDD or YYYY-MM-DD) and the default behavior (current business day if omitted). This compensates well for the schema gap.

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

Purpose5/5

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

The description explicitly states the tool retrieves international interest rates (LIBOR etc.) from Korea Eximbank. This is a specific verb+resource combination, and it clearly distinguishes from sibling tools like koreaexim_get_exchange_rates (currency) and koreaexim_get_loan_rates (loans).

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?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It only describes the parameter format and default, which is insufficient for an agent deciding between sibling tools.

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

koreaexim_get_loan_ratesA

한국수출입은행 대출금리(고정기준금리)를 조회한다. search_date: YYYYMMDD 또는 YYYY-MM-DD, 생략 시 당일 영업일 기준.

ParametersJSON Schema
NameRequiredDescriptionDefault
search_dateNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It adds transparency about the input format (YYYYMMDD or YYYY-MM-DD) and default behavior (current business day if omitted). However, it fails to disclose other behavioral aspects such as authentication requirements, rate limits, or whether the tool returns a single value or a list.

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 at two sentences. The first sentence immediately states the purpose, and the second covers the parameter. Every word earns its place, and the structure is well front-loaded.

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

Completeness2/5

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

The description lacks information about the output format or data structure. Since there is no output schema, the description should at least hint at what the tool returns (e.g., a single rate, multiple rates, or additional fields). This gap makes the tool less self-contained for an agent without prior knowledge.

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 0% description coverage, leaving the parameter `search_date` completely unexplained. The description compensates by specifying the accepted formats and default behavior, which adds essential meaning beyond the bare schema. This is helpful for correct invocation.

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 loan rates (fixed base rate) from the Korea Export-Import Bank. The verb '조회한다' (retrieves/query) and resource '대출금리' (loan rates) are specific, and the tool is easily distinguished from siblings like exchange rate or international rate tools.

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?

The description does not provide any explicit guidance on when to use this tool versus alternatives. While the sibling tools cover different financial data types, the description relies on the user to infer usage context from the name rather than stating it explicitly.

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

kosis_get_statistics_dataB

kosis_search_statistics로 찾은 org_id/tbl_id의 통계자료를 표 단위로 일괄 조회한다. prd_se: 'Y'(연)|'Q'(분기)|'M'(월). start_prd~end_prd로 기간 범위를 지정하면 여러 연도/월을 한 번의 호출로 받아올 수 있다 (개별 호출 반복 금지).

ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYes
prd_seNoY
tbl_idYes
end_prdNo
item_idsNo
start_prdNo

TDQS

B3.4/5.0
Behavior2/5

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

No annotations at all, so the description carries full transparency responsibility. It hints at batching advantages ('individual call repetition prohibited') but omits what gets destroyed (nothing), auth requirements, or whether the tool is read-only or state-changing. A batch-fetch tool needs to clarify whether partial failures are possible and if the result is a single combined table.

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?

Three sentences are adequate: first states main action, second explains period selection parameter, third emphasizes batch advantage. Every sentence earns its place, but a bit more structure (e.g., a line for required params) would help scannability.

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

Completeness2/5

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

With no output schema and 0% schema parameter descriptions, the description should compensate by stating return format (e.g., rows/columns), handling of missing data, maximum period range, and error responses for invalid IDs. Sibling tools (ecos_search_statistics etc.) add context but don't fill gaps for this tool's specific output.

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

Parameters2/5

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

Schema coverage is 0%, so the description is the only source for parameter meaning. It explains prd_se values ('Y'/'Q'/'M') and teaches start_prd~end_prd as a range idiom. But org_id, tbl_id, item_ids, and end_prd are not described: org_id and tbl_id are required and assumed from kosis_search_statistics results, yet no linking description is given.

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?

Uses a specific verb ('retrieve') and specific resource ('statistics data for org_id/tbl_id found via kosis_search_statistics'), then distills from sibling tools (dart_, ecos_, kosis_) by referring to the search tool. Distinct from dart's financial statements and ecos's indicator 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?

Explicitly states when to use: after kosis_search_statistics provides org_id/tbl_id. Also gives explicit when-not: avoid individual calls by using start_prd~end_prd batched range. No mention of when to prefer siblings like ecos_get_statistic_data for other data sources.

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

kosis_search_statisticsC

키워드로 KOSIS 통계표(org_id/tbl_id)를 검색한다. 예: '실업률', '인구', '출생아수'.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It only states that the tool searches for tables with a keyword; it does not mention return format, pagination, rate limits, or any side effects (e.g., whether it initiates downloads or is read-only).

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 short and to the point, which is appropriate for a simple tool. It includes one example. However, it could be more efficient by front-loading the purpose and possibly trimming the example formatting.

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?

Given the tool has only one required parameter and no output schema, the description is relatively complete. It identifies the resource being searched (KOSIS statistics tables) and provides examples. However, it lacks any detail on what the search results look like, which limits the agent's ability to plan subsequent steps.

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

Parameters2/5

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

The schema has only one parameter 'keyword' with no title or description, and schema description coverage is 0%. The description adds minimal semantic value by noting that the keyword is something like '실업률' or '인구', but it does not explain expected format (e.g., partial vs exact match), language, or constraints.

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 searches for KOSIS statistics tables (org_id/tbl_id) by a keyword. It provides relevant examples ('실업률', '인구', '출생아수') that clarify the type of queries it handles. However, it doesn't explicitly distinguish it from siblings like ecos_search_statistics, which also searches statistical data by keyword.

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?

The description gives no explicit guidance on when to use this tool versus alternatives such as ecos_search_statistics or kosis_get_statistics_data. The context suggests Korean economic/statistical data search, but no exclusions or recommendations for other tools are provided.

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

Tool Schema Changelog

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

  1. 13 tool updatesv0.1.0
    • First observeddart_get_company_disclosures
    • First observeddart_get_financial_statements
    • First observeddart_search_company
    • First observeddata_go_kr_check_business_status
    • First observeddata_go_kr_generic_get
    • First observedecos_get_key_indicator
    • First observedecos_get_statistic_data
    • First observedecos_search_statistics
    • First observedkoreaexim_get_exchange_rates
    • First observedkoreaexim_get_international_rates
    • First observedkoreaexim_get_loan_rates
    • First observedkosis_get_statistics_data
    • First observedkosis_search_statistics

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation5/5

Each tool is clearly scoped to a specific data source and operation (e.g., search, get data, check status). Tools within the same source have distinct purposes (e.g., dart_search_company vs. dart_get_financial_statements), and the ECOS/KOSIS pairs are well-separated by search vs. retrieval. No overlapping or ambiguous tools.

Naming Consistency5/5

All tool names follow a consistent `source_verb_noun` pattern in snake_case (e.g., dart_search_company, ecos_get_key_indicator, koreaexim_get_exchange_rates). The naming convention is uniform across all 13 tools, making it predictable for an agent.

Tool Count5/5

13 tools is a well-balanced count for a server aggregating multiple Korean public data sources. Each source (OpenDART, ECOS, KOSIS, data.go.kr, Korea Eximbank) gets a focused set of 2-4 tools, covering search and data retrieval without becoming bloated.

Completeness4/5

The tool set covers core operations for each integrated source: search, retrieve financial/statistical data, check business status, and fetch exchange/loan rates. The inclusion of a generic `data_go_kr_generic_get` tool fills gaps for unlisted data.go.kr services. Minor absences like more granular OpenDART disclosure filters or additional KOSIS metadata tools do not critically hinder coverage.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers