Skip to main content
Glama

dart-mcp

OPEN DART(금융감독원 전자공시) 를 MCP 서버로 노출합니다. 법무·내부통제 검토에 쓰이는 1차 공시 원본(공시서류 원문·지분공시·재무제표)을 도구로 제공합니다.

엔드포인트는 모두 OPEN DART 공식 API 경로를 원문 그대로 사용합니다(추측 없음). 토스 증권 등 다른 자격증명과 무관한 독립 서버로, OPENDART_API_KEY 만 필요합니다.

왜 별도 MCP인가 (법무 활용)

DART 공시는 금감원 1차 원본입니다. 매뉴얼·뉴스·해설서와 격이 다른, 인용 가능한 원천 자료입니다. 법무팀 스택과 결합해 검토 파이프라인을 구성합니다:

dart-mcp (공시검색 → rcept_no → 원문)
   ↓ get_document
kordoc MCP (HWP/PDF/표 추가 파싱)
   ↓
korean-law MCP (관련 법령·판례 대조)
   ↓
legal-analysis / legal-team (종합 판단 → J-ID 축적)

예: "A사 합병 주요사항보고서 검토" → search_disclosures(kind=B)get_document 원문 → 상법·자본시장법 대조 → 판단.

Related MCP server: dart-mcp

제공 도구 (7개)

도구

엔드포인트

용도

dart_resolve

corpCode.xml

종목코드/회사명/고유번호 해석

search_disclosures

list.json

공시검색(기업·기간·유형)

get_company

company.json

기업개황(대표자·설립·업종 등)

get_document

document.xml

📌 공시서류 원문 텍스트

major_holders

majorstock.json

대량보유(5%) 상황보고

insider_holdings

elestock.json

임원·주요주주 소유상황

financial_statements

fnlttSinglAcntAll.json

단일회사 전체 재무제표

공시유형(kind): A 정기 · B 주요사항 · C 발행 · D 지분 · E 기타 · F 외부감사 ... 보고서(reprt_code): 11011 사업(연간) · 11012 반기 · 11013 1Q · 11014 3Q.

설치 & 설정

cd dart_mcp
pip install -e .
cp .env.example .env   # OPENDART_API_KEY 입력 (https://opendart.fss.or.kr 무료 발급)

환경변수

설명

OPENDART_API_KEY

OPEN DART 인증키 (필수)

DART_CACHE_DIR

corp_code 매핑 캐시 경로 (기본 data/)

Claude Code 등록

claude mcp add dart --scope user \
  --env "PYTHONPATH=$(pwd)/src" -- python3 -m dart_mcp.server

OPENDART_API_KEY.env(gitignore)에서 자동 로드되어 claude 설정엔 저장되지 않습니다.

구조

dart_mcp/
├── pyproject.toml
└── src/dart_mcp/
    ├── config.py            # OPENDART_API_KEY 로딩
    ├── client.py            # 키 주입·status 처리·corp_code 캐시·원문 추출
    ├── server.py            # FastMCP + 도구 등록
    └── tools/
        ├── disclosures.py   # 검색·기업개황·원문
        ├── ownership.py     # 대량보유·임원소유
        └── financials.py    # 재무제표

비고

  • corp_code 매핑(상장사 ~3,970개)은 최초 1회 다운로드 후 주간 캐시.

  • DART status 013(데이터 없음)은 정상 처리(빈 목록 반환), 그 외 오류는 메시지 반환.

  • 원문(get_document)은 본문 텍스트를 추출하며 max_chars 초과 시 truncated=true.

Available Tools

7 tools
dart_resolveA

회사 식별자 해석. query 는 6자리 종목코드 / 8자리 고유번호(corp_code) / 회사명 중 무엇이든 가능. corp_code·회사명·종목코드를 반환하며, 회사명이 모호하면 후보 목록(matches)도 함께 반환.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.6/5.0
Behavior4/5

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

Given no annotations, the description carries the full burden. It discloses that the tool returns candidates when company name is ambiguous, which is valuable behavioral context. It does not mention side effects, but the tool is inherently read-only and non-destructive.

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

Conciseness5/5

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

The description is two sentences in Korean, front-loading the purpose and efficiently covering input/output/edge cases with no unnecessary details.

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

Completeness5/5

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

For a simple resolver with one parameter and no output schema, the description covers all essential aspects: accepted inputs, returned fields, and ambiguity handling. It is fully adequate for the agent to invoke correctly.

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

Parameters5/5

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

With 0% schema description coverage and only one parameter 'query', the description fully explains valid inputs (stock code, unique number, or company name). This adds critical meaning beyond the schema's type string alone.

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

Purpose5/5

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

The description clearly states the tool resolves company identifiers, specifies accepted input formats (6-digit stock code, 8-digit unique number, company name), and details output fields (corp_code, company name, stock code, optional matches). This distinguishes it from sibling tools which are more specialized.

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

Usage Guidelines4/5

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

The description implicitly says to use when you need to resolve an identifier to company information, and it lists valid input types. However, it does not explicitly compare to alternatives like get_company or state when not to use.

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

financial_statementsA

단일회사 전체 재무제표 (fnlttSinglAcntAll.json). company 는 종목코드/고유번호/회사명. year 는 사업연도 4자리(예: "2025"). reprt_code: 11011 사업(연간)/11012 반기/11013 1Q/11014 3Q. fs_div: CFS 연결 / OFS 별도.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYes
yearYes
reprt_codeNo11011
fs_divNoCFS

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only describes parameters and a file name, but does not disclose behavioral traits such as whether the tool is read-only, authentication requirements, rate limits, or what happens on error.

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

Conciseness5/5

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

The description is concise and densely packed with essential parameter information. Every sentence adds value with no waste.

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

Completeness3/5

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

While parameter semantics are well covered, the description lacks information about the output structure or return value, which is necessary for a tool with no output schema. Also missing are usage examples.

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

Parameters5/5

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

The description adds significant meaning beyond the schema, which has 0% coverage. It explains the format and allowable values for each parameter, such as reprt_code options and fs_div choices.

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

Purpose5/5

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

The description clearly states the tool retrieves single company full financial statements, which is a specific verb+resource. It distinguishes itself from sibling tools like search_disclosures or get_company.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention when not to use it. It only describes parameters.

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

get_companyB

기업개황 (company.json). 대표자·설립일·주소·업종·결산월 등. company 는 종목코드/고유번호/회사명.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the data returned but does not state read-only behavior, error handling, or other traits. The lack of a clear read-only declaration or side-effect disclosure is a gap.

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

Conciseness5/5

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

The description is extremely concise: two sentences that convey the purpose and parameter meaning without unnecessary words. It is front-loaded and efficient.

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

Completeness3/5

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

Given no output schema or annotations, the description partially compensates. It lists key fields but does not fully describe the return structure, error scenarios, or behavior when input is invalid. While adequate for a simple tool, completeness is moderate.

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

Parameters4/5

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

With 0% schema description coverage, the description adds significant value by explaining that the 'company' parameter can be a stock code, unique number, or company name. This is essential context missing from the schema.

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

Purpose4/5

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

The description clearly states the tool returns company overview information including CEO, establishment date, address, etc. It also explains the input parameter meaning. However, it does not explicitly differentiate from sibling tools like financial_statements or insider_holdings.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus siblings or alternatives. It only states what the tool does without any when/when-not or context for selection.

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

get_documentA

공시서류 원문 조회 (document.xml). rcept_no 는 접수번호 (search_disclosures 결과의 rcept_no). 원본 문서의 본문 텍스트를 추출해 반환하며, max_chars 초과 시 truncated=true. 1차 원본 인용용.

ParametersJSON Schema
NameRequiredDescriptionDefault
rcept_noYes
max_charsNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses text extraction behavior and truncation when max_chars exceeded (with truncated=true flag). It also mentions the purpose (1차 원본 인용용). However, it does not cover error handling, missing documents, or authorization requirements, leaving some behavioral gaps.

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

Conciseness5/5

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

The description is two concise sentences with front-loaded main action. Every part is meaningful: the tool's purpose, parameter hint, return behavior, and use case. There is no redundant information.

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

Completeness4/5

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

Given the low complexity (2 parameters, no output schema), the description covers the essential aspects: what it does, how to get the required parameter, and truncation behavior. It does not detail error cases or response structure, but for a simple retrieval tool, this is reasonably complete.

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

Parameters4/5

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

The input schema has 0% description coverage, so the description adds significant meaning. For rcept_no, it explains it is the receipt number from search_disclosures results. For max_chars, it implicitly explains its role via the truncation behavior. This adds value beyond the raw schema fields.

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

Purpose5/5

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

The description clearly states the tool retrieves the original text of a disclosure document using a receipt number. It specifies the resource (공시서류 원문) and the action (조회). It also distinguishes itself from siblings by linking rcept_no to search_disclosures, clarifying it is a follow-up tool for document text retrieval.

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

Usage Guidelines4/5

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

The description explicitly states that rcept_no comes from search_disclosures results, providing clear context for when to use this tool (after search_disclosures). However, it does not mention when not to use it or provide alternative scenarios, but the context is clear enough for appropriate selection.

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

insider_holdingsC

임원·주요주주 특정증권등 소유상황보고 (elestock.json). company 는 종목코드/고유번호/회사명. 내부자 보유·변동 검토용.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits. It states the purpose (reviewing insider holdings and changes) and data source but does not mention whether the operation is read-only, what the output format is, or any limitations (e.g., date range, real-time vs. lag).

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

Conciseness4/5

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

Two concise sentences in Korean cover the essential purpose and parameter. No wasted words, but could be more structured (e.g., separating purpose and parameter explanation).

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

Completeness2/5

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

For a simple tool with one parameter, no output schema, and no annotations, the description should provide more context: what the return data looks like, whether it's historical or current, and how it differs from major_holders. The current description is insufficient.

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

Parameters3/5

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

The single parameter 'company' is described as accepting a stock code, unique number, or company name, which adds meaning beyond the bare schema (which has no description). However, no example or format details are given.

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

Purpose3/5

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

The description states it provides a report on insider holdings and changes for executives and major shareholders. It identifies the resource (elestock.json) and the parameter role. However, it does not clearly distinguish from sibling tool 'major_holders', which likely covers similar territory.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'major_holders' or 'search_disclosures'. No prerequisites, exclusion criteria, or context are provided.

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

major_holdersB

대량보유 상황보고 (majorstock.json). 5% 이상 주식등 대량보유·변동 내역. company 는 종목코드/고유번호/회사명. 지배구조·경영권 분쟁 검토용.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description must fully convey behavioral traits. It indicates the tool is read-only (reporting large holdings) and mentions the data source and threshold (5%+). However, it omits details on pagination, data freshness, or whether it returns all holders or only recent changes, which limits transparency.

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

Conciseness4/5

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

The description is concise, using two short sentences to convey purpose, input, and use case. It avoids unnecessary repetition and is front-loaded with key information. However, the mix of Korean and English could be streamlined for broader readability.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description should describe the return format or fields. It only mentions the input and use case, leaving the agent uninformed about whether the result includes dates, holder names, or percentages. This incompleteness forces reliance on trial and error.

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

Parameters4/5

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

The schema has 0% description coverage, so the description must compensate. It explains that 'company' can be a stock code, unique number, or company name, adding crucial meaning beyond the schema's title. This is helpful for the agent, though specific format examples or validation rules would further improve it.

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

Purpose4/5

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

The description clearly states the tool reports on large shareholding situations (5% or more), including changes, for a given company. It mentions the source (majorstock.json) and a specific use case (governance/management disputes). The purpose is distinct from sibling tools like insider_holdings, which focuses on insider transactions, though it could be more explicit about retrieving data.

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

Usage Guidelines2/5

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

The description provides only a vague use case ('for review of governance and management disputes') without specifying when to use this tool versus alternatives like insider_holdings or search_disclosures. No exclusion criteria or prerequisites are mentioned, leaving the agent without clear decision guidance.

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

search_disclosuresA

공시검색 (list.json). company 는 종목코드/고유번호/회사명. since~until 은 YYYYMMDD (기본 최근 90일). kind 는 공시유형 1글자 (A 정기 / B 주요사항 / C 발행 / D 지분 / E 기타 / F 외부감사 ...). final_only=True 면 최종보고서만. count 는 건수(최대 100).

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYes
sinceNo
untilNo
kindNo
final_onlyNo
countNo

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It discloses default date range (90 days) and count limit (100) but does not state read-only nature, authentication needs, rate limits, or behavior on empty results. The description is insufficient for a safe and informed invocation.

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

Conciseness5/5

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

The description is a single, efficient paragraph that front-loads the purpose ('공시검색 (list.json)') and then concisely explains each parameter. Every sentence adds value with no redundant or filler content.

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

Completeness3/5

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

The description covers all parameters but omits the return format or structure (no output schema provided). It does not mention pagination beyond count, ordering, or error handling. For a search tool with 6 parameters and no annotations, additional output context would be beneficial.

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

Parameters5/5

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

With 0% schema description coverage, the description comprehensively explains each parameter: company (stock code/unique number/name), since~until (YYYYMMDD, default 90 days), kind (types with examples), final_only (boolean), and count (max 100). This adds critical meaning beyond the bare schema titles.

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

Purpose5/5

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

The description clearly states '공시검색' (disclosure search) and specifies the resource ('list.json'). It distinguishes itself from sibling tools by focusing on searching disclosures, while siblings like get_company or get_document are retrieval-focused.

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

Usage Guidelines2/5

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

The description explains parameters but provides no guidance on when to use this tool versus alternatives (sibling tools are listed). There is no mention of when to use search_disclosures instead of get_document, insider_holdings, etc., leaving the agent without context for tool selection.

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

Tool Schema Changelog

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

  1. 7 tool updatesv0.1.0
    • First observeddart_resolve
    • First observedfinancial_statements
    • First observedget_company
    • First observedget_document
    • First observedinsider_holdings
    • First observedmajor_holders
    • First observedsearch_disclosures

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: resolution, financial statements, company info, document retrieval, insider holdings, major holders, and search. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with verbs like 'get', 'search', 'resolve', and nouns/descriptors. No mixing of styles.

Tool Count5/5

7 tools is well-scoped for the domain of Korean financial disclosures. Each tool serves a necessary function without redundancy or missing essentials.

Completeness5/5

The tool set covers all key operations: identifier resolution, company info, financials, insider/major shareholder reports, disclosure search, and document retrieval. No obvious gaps for the intended use case.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP Server for public disclosure information of Korean companies, powered by the dartpoint.ai API.
    3
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Korea's DART (Data Analysis, Retrieval and Transfer) electronic disclosure system, operated by the Financial Supervisory Service (FSS). Exposes company disclosures, company profiles, and financial statements via the OpenDART public API.
    3
    8 npm
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Enables querying South Korean stock disclosures, financial statements, and shareholder reports via the OpenDART API from any MCP-compatible client.
    87
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides Korean stock market data, including DART electronic disclosures and KRX trading information, enabling users to query company profiles, financial statements, and stock trade details via MCP clients.
    9
    MIT