korea-public-data-mcp
This MCP server lets Claude directly query a wide range of Korean public data APIs and answer questions using live data, with natural Korean-language requests instead of remembering tool names.
Search government support programs and public procurement notices across 9 sources, including business support programs, K-Startup, and all procurement stages (발주계획, 조달요청, 사전규격, 입찰공고, 낙찰, 계약) via
gov_searchandgov_list_sources.Retrieve corporate financial statements, disclosures, and company codes from OpenDART (e.g., Samsung Electronics annual reports).
Pull macroeconomic indicators and statistics from ECOS (base rate, USD/KRW exchange rate, GDP growth, CPI), KOSIS national statistics, and Korea Exim Bank exchange/loan/international rates.
Search patents and utility models via KIPRIS, school information via NEIS, national R&D projects via NTIS, Seoul Institute research reports, and KCI academic articles (some keys pending).
Look up company employee counts and hiring/leaving trends via National Pension Service data, plus search Wanted job postings and HRD-Net KDT training courses (keys pending).
Use
data_go_kr_generic_getto call any other public-data-portal service without code changes, and batch-check business registration numbers withdata_go_kr_check_business_status.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@korea-public-data-mcp삼성전자 2023년 매출액 알려줘"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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:
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).
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.
Run Each Person's Own Docker — Instead of running a separate server, each team member builds and runs locally with
docker build+docker runand 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 |
| Use in order: company name search → corp_code → financial statements/disclosures |
한국은행 ECOS |
| Base rate/exchange rate/GDP/CPI can be queried directly by name |
통계청 KOSIS |
| After keyword search, batch query by period range in table units |
공공데이터포털 (data.go.kr) |
| Business registration status supports batch (up to 100 items), other services are temporarily handled via a generic GET tool |
한국수출입은행 |
| 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 | Open API auth key application, within immediate~1 day | |
KOSIS | "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:
Add a
fooentry toAPI_KEYSinsrc/korea_public_data_mcp/config.py(env var, issuance URL)Create
src/korea_public_data_mcp/clients/foo.py— write only the actual endpoint call logic usingcore/http_client.get_json(retry/rate limiting is handled automatically by the common client)Create
src/korea_public_data_mcp/tools/foo_tools.py— wrap the client function with the@mcp.tool()decorator, catchMissingApiKeyErrorand return a guidance message, cache withcached_callAdd one line
foo_tools.register(mcp)insrc/korea_public_data_mcp/server.pyAdd entries to
.env.exampleand 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 toolsdart_get_company_disclosuresC
기간 내 회사 공시 목록을 조회한다. 날짜는 YYYYMMDD 형식 (예: 20240101).
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| corp_code | Yes | ||
| start_date | Yes |
TDQS
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.
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.
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.
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.
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.
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'(별도재무제표).
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| fs_div | No | CFS | |
| report | No | 사업보고서 | |
| corp_code | Yes |
TDQS
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.
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.
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.
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.
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.
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='삼성전자'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| company_name | Yes |
TDQS
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.
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.
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.
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.
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.
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'].
| Name | Required | Description | Default |
|---|---|---|---|
| business_numbers | Yes |
TDQS
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.
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.
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.
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.
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.
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 확장 가이드 참고).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| params | Yes | ||
| base_url | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| indicator | Yes |
TDQS
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.
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.
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.
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.
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.
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(연).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| cycle | Yes | ||
| start | Yes | ||
| stat_code | Yes | ||
| item_code1 | No | ||
| item_code2 | No |
TDQS
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.
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.
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.
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.
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.
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)를 검색한다. 사전 등록되지 않은 지표를 찾을 때 사용.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes |
TDQS
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.
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.
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.
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.
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.
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시 이전이나 비영업일 조회 시 데이터가 비어 있을 수 있다.
| Name | Required | Description | Default |
|---|---|---|---|
| search_date | No |
TDQS
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.
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.
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.
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.
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.
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, 생략 시 당일 영업일 기준.
| Name | Required | Description | Default |
|---|---|---|---|
| search_date | No |
TDQS
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.
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.
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.
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.
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.
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, 생략 시 당일 영업일 기준.
| Name | Required | Description | Default |
|---|---|---|---|
| search_date | No |
TDQS
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.
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.
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.
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.
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.
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로 기간 범위를 지정하면 여러 연도/월을 한 번의 호출로 받아올 수 있다 (개별 호출 반복 금지).
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | ||
| prd_se | No | Y | |
| tbl_id | Yes | ||
| end_prd | No | ||
| item_ids | No | ||
| start_prd | No |
TDQS
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.
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.
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.
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.
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.
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)를 검색한다. 예: '실업률', '인구', '출생아수'.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes |
TDQS
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.
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.
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.
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.
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.
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.
13 tool updates
v0.1.0- First observed
dart_get_company_disclosures - First observed
dart_get_financial_statements - First observed
dart_search_company - First observed
data_go_kr_check_business_status - First observed
data_go_kr_generic_get - First observed
ecos_get_key_indicator - First observed
ecos_get_statistic_data - First observed
ecos_search_statistics - First observed
koreaexim_get_exchange_rates - First observed
koreaexim_get_international_rates - First observed
koreaexim_get_loan_rates - First observed
kosis_get_statistics_data - First observed
kosis_search_statistics
TDQS
Scored across 13 tools
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.
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.
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.
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
Related MCP Connectors
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
- mcpweaveOAuthcom.mcpweave
Korea-native MCP gateway: Korean commerce, payments, messaging, gov & finance APIs for AI agents.
Search company disclosures and financial statements from the Korean market. Retrieve stock profile…
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceIntegrates with Claude Desktop to provide Korean financial data including stock prices, bonds, real estate transactions, and economic indicators from multiple sources.-
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access the Korean Financial Supervisory Service's OpenDART API for corporate filings, financial statements, and disclosures.27 npm3MIT
- AlicenseAqualityDmaintenanceEnables MCP clients like Claude Desktop to search, retrieve, and analyze Korean statistical data from KOSIS OpenAPI.161MIT
- AlicenseAqualityBmaintenanceEnables natural language querying of Korean statistical data from KOSIS, including population, employment, GDP, housing prices, and more, with support for regional and trend analysis.814 npm16MIT