korea-public-data-mcp
korea-public-data-mcp
MCP-сервер, который позволяет Claude напрямую вызывать государственные данные Республики Корея (OpenDART Финансовой надзорной службы, ECOS Банка Кореи, KOSIS Статистического управления Кореи, Портал государственных данных) и отвечать на вопросы о финансовых, экономических и статистических показателях на основе фактических ответов API, а не догадок.
Аналогично MCP-серверам, которые используют данные электронной системы раскрытия информации DART для ответов на вопросы по финансовой отчетности, этот сервер позволяет Claude отвечать на такие вопросы, как "Сколько составила выручка этой компании в прошлом году?", "Расскажи о последних изменениях ключевой ставки", "Какой уровень безработицы в нашей стране?", вызывая инструменты этого сервера и основываясь на актуальных данных.
Название временно установлено как
korea-public-data-mcp. При загрузке на GitHub вы можете свободно изменить его на любое другое, это не повлияет на работу кода.
Почему это сделано так (принципы проектирования)
Сервер спроектирован с соблюдением трех ограничений, запрошенных ответственным лицом.
Отсутствие затрат на LLM/внешние сервисы — этот сервер только "получает" данные. Он не вызывает никаких LLM внутри и не использует платные API. Фактическое рассуждение/обобщение выполняет Claude, вызывающий этот MCP, поэтому эксплуатационные расходы сервера практически равны нулю (за исключением электроэнергии/серверных ресурсов).
Предотвращение блокировки API (IP-бан) — государственные публичные API могут временно блокироваться при превышении лимитов вызовов в секунду/день. Поэтому:
Перед всеми вызовами API установлено ограничение количества вызовов в секунду (token bucket), чтобы самостоятельно замедлять скорость.
При повторении одного и того же запроса используется кэш в памяти, а для больших статических файлов, таких как список компаний DART, используется дисковый кэш (по умолчанию 7 дней) для предотвращения повторной загрузки.
Данные получаются не отдельными вызовами для каждой статьи учета/периода, а единым блоком для таблицы/диапазона периодов (например, финансовая отчетность получается одним вызовом для всех статей учета компании, статистика запрашивается сразу за весь период начало~конец).
Для API, поддерживающих пакетную обработку, таких как проверка статуса регистрации бизнеса, до 100 записей отправляются одним вызовом.
При ответах 429/5xx выполняется повторная попытка с экспоненциальной задержкой, максимум 3 раза.
Запуск каждым через Docker — сервер не разворачивается отдельно, а каждый член команды локально запускает
docker build+docker runи подключает к своему Claude.
Related MCP server: korean-stat-mcp
Включенные API (основной объем первой очереди)
Поскольку реализация всего списка запросов (около 40) сразу привела бы к сложностям в обслуживании, сначала были реализованы с достаточной полнотой 4 ключевых организации, которые ответственное лицо использует чаще всего. Остальные можно добавлять по тому же шаблону, следуя руководству по расширению.
Организация | Предоставляемые инструменты | Примечания |
OpenDART Финансовой надзорной службы |
| Используется в порядке: поиск по названию компании → corp_code → финансовая отчетность/раскрытие информации |
ECOS Банка Кореи |
| Ключевую ставку/валютный курс/ВВП/цены можно запрашивать напрямую по названию |
KOSIS Статистического управления Кореи |
| Поиск по ключевым словам, затем пакетный запрос данных за диапазон периодов по таблицам |
Портал государственных данных (data.go.kr) |
| Проверка статуса регистрации бизнеса поддерживает пакетную обработку (до 100 записей), для остальных сервисов временно используется универсальный GET-инструмент |
Экспортно-импортный банк Кореи |
| Ключи выдаются не через data.go.kr, а на самом сайте koreaexim.go.kr. Валютные курсы/ставки по кредитам/международные ставки являются отдельными продуктами API, поэтому для каждого сервиса нужно подавать отдельную заявку и получать 3 authkey. При запросе до 11:00 в рабочие дни или в нерабочие дни данные могут отсутствовать |
Инструкция по получению ключей API
Даже если у вас еще нет полученных ключей, сервер запустится нормально, и список инструментов будет отображаться. Однако при фактическом вызове инструмента будет возвращено сообщение об отсутствии ключа, поэтому подавайте заявки по порядку, начиная с необходимых.
Организация | Место получения | Примечания |
OpenDART | https://opendart.fss.or.kr → Регистрация → [Запрос/управление ключом аутентификации] | Выдается сразу после регистрации, самый быстрый |
ECOS | Запрос ключа аутентификации Open API, в течение от нескольких часов до 1 дня | |
KOSIS | "Подача заявки на использование OpenAPI", может занять время до утверждения | |
Портал государственных данных | https://www.data.go.kr → Страница нужного сервиса → [Подать заявку на использование] | Требуется отдельная заявка для каждого сервиса. Рекомендуется сначала подать заявку на "Проверка подлинности и статуса регистрации бизнеса Налоговой службы" |
Экспортно-импортный банк Кореи | https://www.koreaexim.go.kr/ir/HPHKIR019M01 → Спецификация Open API → Подача заявки на получение ключа аутентификации | Выдается не через data.go.kr, а напрямую на koreaexim.go.kr. В течение нескольких часов/в тот же день |
Получив ключи, скопируйте .env.example в .env и заполните их.
cp .env.example .env
# .env 파일을 열어 발급받은 키 입력Быстрый старт (Docker)
git clone <이 레포 주소>
cd korea-public-data-mcp
cp .env.example .env # 키 채워넣기 (없어도 일단 진행 가능)
docker build -t korea-public-data-mcp .Зарегистрируйте в настройках MCP Claude Desktop / Claude Code (например, claude_desktop_config.json) следующим образом.
{
"mcpServers": {
"korea-public-data": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--env-file", "/절대경로/korea-public-data-mcp/.env",
"korea-public-data-mcp"
]
}
}
}После перезапуска Claude в списке инструментов появятся инструменты dart_*, ecos_*, kosis_*, data_go_kr_*. Теперь на вопросы типа "Сколько составила выручка Samsung Electronics в 2023 году?" Claude будет вызывать эти инструменты и отвечать на основе фактических данных.
Локальная разработка/тестирование (без 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로 종료)Руководство по расширению (добавление нового API)
Для добавления остальных сервисов из полного списка, предоставленного ответственным лицом (RISS, KIPRIS, Национальная правовая информация, Нараджантер, Открытая площадка данных Сеула и т.д.), достаточно повторить следующий шаблон. Например, для добавления новой организации foo:
Добавьте элемент
fooвAPI_KEYSвsrc/korea_public_data_mcp/config.py(env var, URL выдачи)Создайте
src/korea_public_data_mcp/clients/foo.py— используйтеcore/http_client.get_jsonдля написания только логики вызова фактической конечной точки (повторные попытки/ограничение скорости обрабатываются общим клиентом автоматически)Создайте
src/korea_public_data_mcp/tools/foo_tools.py— оберните функцию клиента декоратором@mcp.tool(), перехватитеMissingApiKeyErrorдля возврата информационного сообщения, используйтеcached_callдля кэшированияДобавьте строку
foo_tools.register(mcp)вsrc/korea_public_data_mcp/server.pyДобавьте элементы в
.env.exampleи таблицу README
Благодаря этой структуре при добавлении нового API не нужно каждый раз заново писать логику предотвращения блокировки (ограничение скорости/кэш/пакетная обработка).
Следующие кандидаты на расширение (на основе списка запросов ответственного лица)
Право/администрирование: Open API Национальной правовой информации, API информации Национального собрания
Закупки/бизнес: Нараджантер (g2b), Хаб данных о закупках, NTIS Национальная научно-техническая информация
Академические: RISS, KISTI, OpenAPI Национальной библиотеки Кореи
Интеллектуальная собственность: KIPRIS Plus (патенты, товарные знаки)
Региональные: Открытая площадка данных Сеула, Кёнги Дата Дрим
Сообщите приоритеты или следующий API для подключения, и я продолжу реализацию с этого пункта.
Лицензия
Свободно используйте/изменяйте для внутренних целей.
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
Korean policy & finance facts with primary-source citations (laws, gov notices) for AI agents
Korean national statistics (KOSIS) — browse, search and pull time series from Statistics Korea's…
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables Claude to access the Korean Financial Supervisory Service's OpenDART API for corporate filings, financial statements, and disclosures.45 npm3MIT
- AlicenseAqualityDmaintenanceEnables MCP clients like Claude Desktop to search, retrieve, and analyze Korean statistical data from KOSIS OpenAPI.1631 PyPI1MIT
- AlicenseAqualityBmaintenanceEnables natural language querying of Korean statistical data from KOSIS, including population, employment, GDP, housing prices, and more, with support for regional and trend analysis.85 npm17MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying Korean official statistics from KOSIS via natural language in MCP clients like Claude Desktop, wrapping the KOSIS OpenAPI for search, data retrieval, and metadata exploration.MIT