k-dart-mcp
Provides tools for querying OpenDART (Financial Supervisory Service's Data Analysis, Retrieval and Transfer System) corporate disclosure data for Korean companies, including company lookup by name/ticker/DART code, disclosure search with original document links and amendment flags, financial summaries (revenue, operating profit, net income, assets, liabilities, equity), full financial statements (balance sheet, income statement, comprehensive income, cash flow, changes in equity), and comparison of up to five companies using consistent report period and consolidated/separate basis.
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., "@k-dart-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.
k-dart-mcp
by All Time High
여의도불주먹과 함께, AI에 한국 기업 공시를 연결하세요.
공시 검색부터 재무제표·기업 비교까지. 금융감독원 OpenDART 데이터를 AI가 직접 조회하는 읽기 전용 MCP 서버입니다.
AI에게 설치 맡기기
Codex·Claude Code·Cursor처럼 PC에서 설치 명령과 파일 수정을 할 수 있는 AI에 아래 문장을 보내세요.
https://github.com/prismyoo1231/k-dart-mcp
이 저장소의 INSTALL.md를 읽고 내 AI 앱에 k-dart-mcp를 설치해줘.
기존 MCP 설정은 보존하고, 인증키는 내가 터미널에서 직접 입력하게 해줘.
설치 후 실제 DART 조회가 되는지 확인해줘.여러분이 준비할 것은 OpenDART 인증키입니다. 인증키 신청/관리에서 발급받으세요. 키는 AI 채팅에 보내지 말고 설치 중 안내되는 터미널에 직접 입력합니다.
AI가 Git·Node.js 22 이상과 패키지 관리자를 확인하고, 설치 및 앱 등록을 진행합니다. 실행 환경 설치, 권한 승인, 앱 재시작은 필요할 수 있습니다. 일반 ChatGPT 웹 채팅에 링크만 붙이는 것으로 PC에 설치되지는 않습니다.
Related MCP server: MCP OpenDART
이런 질문을 할 수 있어요
삼성전자 최근 공시 10개를 찾아서 원문 링크와 함께 보여줘.
SK하이닉스의 2025년 연결 기준 연간 매출과 영업이익을 조회해줘.
삼성전자와 SK하이닉스의 2025년 연간 재무정보를 같은 기준으로 비교해줘.
카카오의 2025년 연결 현금흐름표를 보여줘.
결과에는 조회 기준과 원문 링크가 포함됩니다. 공시 목록 조회가 본문 분석을 의미하지는 않습니다.
제공하는 도구
도구 | 기능 |
| 회사명·종목코드·DART 고유번호로 기업 검색 |
| 기간별 공시 검색, 정정 표시와 원문 링크, 페이지 정보 |
| 매출·영업이익·순이익·자산·부채·자본 |
| 재무상태표·손익계산서·포괄손익계산서·현금흐름표·자본변동표 |
| 최대 5개 기업을 같은 보고서·연결/별도 기준으로 조회 |
연간·반기·1분기·3분기 보고서, 연결(CFS)·별도(OFS)를 명시적으로 선택합니다. 누락된 금액은 0으로 채우지 않으며, 연결 자료가 없어도 별도로 자동 대체하지 않습니다. 금융업 등 비표준 계정은 요약에서 누락될 수 있으므로 전체 재무제표로 확인하세요.
직접 설치하기
Node.js 22 이상과 Git이 필요합니다. npm 예시이며 pnpm도 사용할 수 있습니다.
git clone https://github.com/prismyoo1231/k-dart-mcp.git
cd k-dart-mcp
npm install --ignore-scripts
node bin/cli.js install --client codex
node bin/cli.js auth
node bin/cli.js doctorauth는 본인이 직접 여는 터미널에서 실행하세요. 입력한 인증키는 화면에 표시되지 않습니다. doctor는 실제 API에 연결해 기업 검색과 공시 조회를 확인합니다.
--client에는 codex, cursor, claude-desktop을 사용할 수 있습니다. 등록 후 해당 앱을 재시작하세요. 등록된 서버 이름은 k-dart입니다. 서버 파일을 현재 폴더의 절대 경로로 등록하므로 설치 후 폴더를 이동하거나 삭제하지 마세요.
자동 등록은 기존 설정을 백업하고 다른 서버·설정을 보존합니다. TOML의 주석과 서식은 재작성될 수 있습니다. 동명의 다른 서버가 있으면 덮어쓰지 않습니다. Claude Desktop 자동 등록은 Windows·macOS를 지원합니다. Claude Code는 아래 수동 설정이나 해당 클라이언트의 MCP 등록 명령을 이용하세요.
수동 등록
MCP 설정을 직접 관리한다면 다음 형식을 참고하세요. 경로는 본인 PC의 실제 절대 경로로 바꿉니다.
{
"mcpServers": {
"k-dart": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/k-dart-mcp/bin/cli.js"]
}
}
}Codex의 config.toml 형식:
[mcp_servers.k-dart]
command = '/absolute/path/to/node'
args = ['/absolute/path/to/k-dart-mcp/bin/cli.js']Windows에서도 실제 경로를 사용하세요. TOML의 작은따옴표는 역슬래시를 그대로 보존합니다. 기존 설정 파일 전체를 예시로 교체하지 말고 서버 항목만 추가하세요.
인증키와 데이터
우선순위:
DART_API_KEY환경변수 →~/.k-dart-mcp/credentials.json.키 파일은 로컬 평문 파일입니다. POSIX에서는 소유자만 읽고 쓸 수 있게 생성합니다. Windows에서는 사용자 폴더 권한에 의존합니다. 저장 파일과 백업·화면 캡처를 공개하지 마세요.
키는 OpenDART 요청에 사용합니다. 별도의 운영 서버나 분석 서비스로 전송하지 않으며, 키가 담긴 URL을 로그에 기록하지 않습니다.
조회된 공시·재무 데이터는 AI 앱에 전달됩니다. AI 서비스의 데이터 처리 정책이 적용됩니다.
기업 목록은 첫 조회 때 내려받아 메모리에 최대 24시간 보관합니다. 재무·공시 결과를 디스크에 저장하지 않습니다.
인증키 교체는
auth를 다시 실행한 뒤 MCP 연결을 재시작하세요. 환경변수도 설정되어 있다면 환경변수가 우선합니다.
문제가 생기면
증상 | 확인할 것 |
도구가 보이지 않음 | 앱 재시작, MCP 활성화, Node와 서버 파일의 절대 경로 |
인증키 없음 | 터미널에서 |
처음 기업 검색이 느림 | 기업 목록을 내려받는 중일 수 있음. 네트워크 확인 |
| OpenDART 인증키 발급·사용 상태 |
| 인증키의 접근 IP 조건 |
| 해당 기업·기간·보고서에 데이터 없음 |
| 요청 한도 초과. 반복 호출을 멈추고 OpenDART 이용현황 확인 |
요약 금액이 | 표준 계정 미제공 또는 모호한 계정. 전체 재무제표 조회 |
node bin/cli.js doctor로 연결을 점검하세요. 오류를 공유할 때 인증키와 키가 들어간 설정은 제외하세요.
업데이트 / 연결 해제
설치 폴더에서 git pull --ff-only 후 npm install --ignore-scripts를 실행하고 앱을 재시작합니다. 직접 수정한 파일이 있다면 먼저 보관하세요. 패키지 업데이트 결과를 테스트한 뒤 사용하세요.
연결을 해제하려면 AI 앱의 MCP 설정에서 k-dart를 비활성화하거나 해당 항목만 삭제합니다. 다른 서버 설정은 보존하세요. 저장된 인증키가 더 이상 필요 없다면 ~/.k-dart-mcp/credentials.json도 직접 삭제합니다.
개발 / 검증
npm install --ignore-scripts
npm run check
npm test테스트는 모의 DART 응답, 설치 설정 보존, 실제 STDIO MCP 연결을 검사합니다. 실제 인증키를 사용하는 네트워크 조회는 자동 테스트에 포함되지 않습니다. doctor는 사용자 환경에서 별도로 실행합니다. macOS 앱에서의 실제 등록·실행은 해당 OS에서 확인해야 합니다.
금융감독원 공식 제품이 아닌 독립 오픈소스입니다. OpenDART의 공개 API를 사용하며 이용 조건·한도는 발급 계정에 따릅니다. 원문과 정정 공시를 확인하고, 보고서 기준·사업연도·통화를 맞춰 사용하세요.
참고
MIT License
Available Tools
5 toolscompare_financialsARead-onlyIdempotent
최대 5개 기업을 같은 사업연도·보고서·연결/별도 기준으로 조회합니다. 회사별 실패와 누락을 보존합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도. 접수연도와 구분 | |
| fs_div | No | CFS 연결, OFS 별도. 자동 대체 없음 | CFS |
| report | No | annual | |
| companies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description adds a genuinely non-obvious behavioral trait: per-company failures and omissions are preserved rather than aborting the whole batch, which tells the agent to expect partial results.
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?
Two short, front-loaded sentences with no filler: the scope ('same year/report/basis, up to 5 companies') comes first, followed by the failure-semantics caveat. Nothing is redundant, though it is extremely terse.
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, the description carries some burden for return shape, and it only hints at it via 'failures and omissions preserved' – it does not say what is returned per company or how a missing company is represented. Adequate but leaves a real gap for an aggregation tool.
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 only 50% (report has no schema description) and the schema already explains year, fs_div, and the accepted company identifier formats. The description compensates by clarifying that year/report/fs_div apply uniformly across all companies on a single basis, which is the key semantic of this tool rather than a restatement of fields.
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 gives a specific verb (조회) and resource (up to 5 companies' financials) plus scope constraints: same fiscal year, same report, same consolidated/separate basis. It distinguishes this batch-comparison tool from single-entity siblings like get_financial_summary, but never names those siblings explicitly.
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 phrase '최대 5개 기업을 같은 … 기준으로' implies the comparison use case (multiple companies viewed on one consistent basis), but there is no explicit when-to-use vs. get_financial_summary/get_full_financial_statements guidance and no stated exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_summaryARead-onlyIdempotent
매출·영업이익·순이익·자산·부채·자본의 표준계정을 조회합니다. 누락·모호한 계정은 null. 분기 금액과 누적 금액을 따로 반환합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도. 접수연도와 구분 | |
| fs_div | No | CFS 연결, OFS 별도. 자동 대체 없음 | CFS |
| report | No | annual | |
| company | Yes | 정확한 회사명, 6자리 종목코드 또는 8자리 DART 고유번호 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds genuinely non-obvious behavioral details beyond annotations: absent or ambiguous accounts are returned as null, and quarterly figures are returned separately from cumulative figures. Since there is no output schema, this return-shape disclosure is valuable, though it omits pagination/error behavior.
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 short sentences, front-loaded with the account scope, then the null convention, then the quarterly/cumulative return split. No filler, no repetition of the title.
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, the description carries the burden of describing returns and does so for the null convention and the quarterly/cumulative split. It remains silent on how fs_div/report interact with the returned figures and on the meaning of ambiguity, leaving a modest gap for a read-only lookup tool.
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 75% and both enums (fs_div, report) are documented in the schema itself, so the schema does most of the work. The description's mention of separate 분기/누적 amounts loosely maps to the report parameter but adds no format, default, or substitution guidance beyond what the schema already states (e.g., '자동 대체 없음').
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?
States a specific verb (조회) and resource (표준계정: 매출·영업이익·순이익·자산·부채·자본), making the scope of the summary unambiguous. However, it never distinguishes itself from the sibling get_full_financial_statements or compare_financials, so an agent must infer when the summarized set is preferred over the full statements.
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 when-to-use instruction and never names an alternative, despite four closely related siblings (notably get_full_financial_statements). Nothing tells the agent when the standard-account summary is the right call versus pulling complete statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_full_financial_statementsBRead-onlyIdempotent
전체 재무제표 계정과 원문 금액을 조회합니다. offset/limit으로 이어서 조회하세요.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도. 접수연도와 구분 | |
| limit | No | ||
| fs_div | No | CFS 연결, OFS 별도. 자동 대체 없음 | CFS |
| offset | No | ||
| report | No | annual | |
| company | Yes | 정확한 회사명, 6자리 종목코드 또는 8자리 DART 고유번호 | |
| statement | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive, open-world call, so safety is covered. The description adds the behavioral note that results are paginated and must be continued via offset/limit, which is genuinely beyond the annotations, but says nothing about ordering, totals, or truncation behavior.
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?
Two short sentences, no filler, with the core action stated first and the pagination instruction second. Nothing is redundant.
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 7-parameter tool with no output schema and under-half schema coverage, the description is on the thin side. The pagination hint is helpful, but the meaning of the statement type and fs_div options, plus the relationship to the summary sibling, are absent.
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?
With only 43% schema description coverage, the description should compensate, yet it only addresses offset/limit. The enum parameters statement, report, and fs_div are left undocumented in both schema and description, so an agent gets no semantic explanation of what BS/IS/CIS/CF/SCE mean or how fs_div fallback behaves.
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?
States a concrete verb and resource (retrieve full financial statement accounts plus original amounts), and the word '전체' implicitly contrasts with the sibling get_financial_summary. It stops short of naming that sibling or the boundary explicitly, so the distinction must be inferred.
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?
Provides one clear usage rule — that offset/limit are for continuing a paged read — but gives no guidance on when to choose this tool over get_financial_summary or compare_financials, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companyARead-onlyIdempotent
회사명·종목코드로 기업을 검색합니다. 유사 기업 후보와 정확한 DART 고유번호를 확인합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | 정확한 회사명, 6자리 종목코드 또는 8자리 DART 고유번호 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds useful return behavior ('유사 기업 후보' plus the exact DART ID), but says nothing about the limit/pagination behavior or fuzzy-match behavior that the '유사 기업 후보' wording implies.
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?
Two compact sentences, front-loaded with the action and followed by the outcome. No filler or redundancy.
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?
There is no output schema, so describing the return (candidate list plus exact DART number) is valuable and mostly sufficient. The only gap is the undocumented limit parameter and pagination behavior, a minor omission for a search tool.
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 only 50%: the query parameter is described, but limit has no description anywhere. The description echoes the query input types already stated in the schema (company name, stock code) without covering the limit parameter, so it only partially compensates for the 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?
States a specific verb and resource ('회사명·종목코드로 기업을 검색합니다') and adds the resolution outcome ('정확한 DART 고유번호'). It is clearly a lookup tool distinct from the financial/disclosure siblings, though it never names them explicitly.
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?
Usage is only implied: the agent can infer this is the identifier-resolution step before calling get_financial_summary or search_disclosures. There is no explicit when-to-use statement, no mention of when not to use it, and no reference to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_disclosuresBRead-onlyIdempotent
기업별 공시 목록과 원문 링크를 조회합니다. 기본 최근 30일. 페이지 정보를 보존하며 본문을 읽지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| type | No | DART 공시유형. A 정기공시 | |
| company | Yes | 정확한 회사명, 6자리 종목코드 또는 8자리 DART 고유번호 | |
| end_date | No | ||
| page_size | No | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the bar is lower; the description still adds real behavioral context: the default recent-30-day scope, that pagination state is preserved, and that document bodies are not fetched (only metadata/links). That is meaningful beyond the annotations.
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 short sentences with no filler, and the core purpose is front-loaded before the default-window and no-body-read details. Slightly terse on the pagination phrase, but efficient overall.
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 read-only search tool with no output schema, the description conveys the general return shape (list + links, no body) but leaves the return structure, pagination fields, and most parameter semantics unexplained. Adequate but with clear gaps given the 6-parameter surface.
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 only 33% across 6 parameters, so the description is expected to compensate, but it explains none of them (page, page_size, start_date, end_date are undocumented, and the company/type formats are left to the schema). Only the implicit 30-day default hints at the date 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?
States a specific verb+resource: retrieving corporate disclosure lists and original-document links per company. It is distinguishable from the financial-statement siblings (get_financial_summary, get_full_financial_statements), though it does not explicitly name what search_company does differently.
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?
Gives an implied usage context (a per-company disclosure search with a default 30-day window) but offers no explicit when-to-use/when-not guidance and does not name an alternative tool for reading full document bodies, which it gestures at with 'does not read the body'.
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.
5 tool updates
v0.1.0- First observed
compare_financials - First observed
get_financial_summary - First observed
get_full_financial_statements - First observed
search_company - First observed
search_disclosures
TDQS
Scored across 5 tools
The company/disclosure searches are clearly separated by resource, and the summary vs. full-statements split is explicit in the descriptions (standard accounts with nulls vs. all accounts with pagination). The two financial-retrieval tools still share the 'get financials' space, though descriptions disambiguate them well.
All five tools follow a clean verb_noun snake_case pattern (search_company, search_disclosures, get_financial_summary, get_full_financial_statements, compare_financials). No mixed conventions or vague verbs.
Five tools is well within the ideal range, and each one maps to a distinct capability (company lookup, disclosure listing, summary financials, full statements, comparison). Nothing feels redundant or missing at the count level.
The surface covers discovery, disclosure listing, financial summary, full statements, and cross-company comparison, which is solid read coverage for a public disclosure API. A minor gap is the inability to read a disclosure's body text, since search_disclosures explicitly returns only links and page info.
Maintenance
Related MCP Connectors
Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
Search company disclosures and financial statements from the Korean market. Retrieve stock profile…
Korean company disclosures in English: DART filings, financial statements, segments, 13F.
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to query Korean listed companies' financial statements, public disclosures, executive information, and shareholder structures in real-time using the DART API.2-
- FlicenseCqualityCmaintenanceEnables AI assistants to access South Korea's financial disclosure system (OpenDART), allowing users to retrieve corporate financial reports, disclosure documents, shareholder information, and automatically extract and search financial statement notes through natural language queries.85-
- FlicenseAqualityBmaintenanceEnables searching corporate disclosures from Korea's DART system, including company info, financial statements, and disclosure search.16-
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with real-time access to Korean listed companies' disclosures, financial statements, and corporate information via the DART API.4MIT