MyDART
Server Details
Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
- Status
- Healthy
- Uptime
- 99.6% over 78 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 15 tools
Most tools target a distinct artifact (full text, attachment images, structured financial rows, section tables, event timeline, registration terms, valuation inputs), and the descriptions explicitly cross-route between them. The main soft spot is the audit cluster (get_audit_profile, get_audit_report, get_internal_control, get_going_concern, search_audit_findings), where an "감사의견" question has several plausible entry points, and get_corporate_event vs search_disclosures overlap on disclosure listing — mitigated but not eliminated by the routing rules.
All 15 names are snake_case with a clear verb_noun structure: get_* (12), search_* (2), download_document, find_corp_code. The verb choices are semantically stable (get = retrieve a resource, search = enumerate candidates), so the pattern is predictable throughout.
15 tools sits at the top of the well-scoped range for a DART data server spanning identity, filings, full text, financials, audit, events, registration statements, and valuation. Each tool maps to a genuinely distinct data surface, so no tool feels like filler.
Coverage of the disclosure lifecycle is broad: corp_code resolution, disclosure listing, original text and attachments, XBRL/재무수치, periodic-report sections, audit outputs, corporate events, and securities registration. Gaps are minor — no cross-disclosure full-text keyword search, no ownership/지분율 graph beyond 최대주주·5%룰 snapshots, and no derived financial ratios — but agents can route around these via download_document and get_financials.
Available Tools
15 toolsdownload_documentARead-onlyIdempotentInspect
MyDART MCP의 download_document 도구는 공시 원문을 마크다운으로 읽고 검색합니다(heading·표 구조 보존). 감사보고서·주석별 조회 포함.
[Purpose]
Full disclosure text; audit analysis (감사의견·KAM): get_audit_report.
감사보고서·연결감사보고서 원문·주석: here (role·sections), not get_attachments.
비상장 non-filers: the F 감사보고서 rcept IS the route to 재무제표·주석.
ZIP 밖 형제문서(정관·운영실태보고서)·스캔: get_attachments. XBRL: get_financials(rcept_no).
[Usage]
"이 사업보고서 원문 읽어줘" → rcept_no="20260310002820"
"연결감사보고서 특수관계자 주석" → role="consolidated_audit", sections=["특수관계자"]
"원문에서 횡령·배임 찾아줘" → find=["횡령","배임"]
[Response]
documents[]: metadata only (role per 원문) — content ONLY with all_docs=true
[Rules]
감사의견·KAM are in 별도(_00760)/연결(_00761): pick by role.
Long doc: sections=[] → outline (헤딩 + 주석 번호별), then sections=[index|제목].
find = 표 단위 발췌 from every doc. 0 matches ≠ absent — 스캔 이미지 표는 get_attachments(mode=images).
truncated=true → raise truncate_at or pick sections.
원문 XML 없음([014]) → 뷰어 자동 전환(source=viewer): documents[]·doc_index = 뷰어 섹션.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | Search EVERY 원문 XML in the ZIP (본문 + 별도/연결 감사보고서); returns `find` (table-level excerpt bundles + other hit locations) INSTEAD of content. Several terms in one filing → ONE call with an array (max 8, OR; blocks with more terms first), not parallel calls. One string = ONE term (commas not split). Case-insensitive literal, not regex; 0 hits → retried letter-spaced (`핵 심 감 사`). doc_index/role narrows to that 원문 (doc_index out of range → searches all, with a note). Whole 절·주석 of a hit: same doc_index/role + sections=[section_index]. format=markdown only; not with all_docs. source=viewer ([014]): top-level 뷰어 sections (first 24; sub-sections inside parents); bundles[].doc_index = section index. | |
| role | No | Pick the 원문 by role instead of doc_index: separate_audit = 감사보고서(별도, `_00760`), consolidated_audit = 연결감사보고서(`_00761`), internal_control = 내부회계관리제도 보고서. No such 원문 in the ZIP (e.g. no 연결 without 종속기업) → fails with the 원문 list. Not with doc_index·all_docs. | |
| format | No | markdown = DART XML → 마크다운; raw = original XML; text = tags stripped (tables flattened). source=viewer ([014], no 원문 XML): no raw; markdown/text from 뷰어 HTML. | markdown |
| all_docs | No | Every 원문 XML in the ZIP with content as documents[] (본문 + 별도/연결 감사보고서). source=viewer ([014]): one entry per top-level 뷰어 section (max 24; sub-sections nested). | |
| rcept_no | Yes | 14-digit 접수번호 from search_disclosures; hyphens·spaces stripped. | |
| sections | No | Read only PART of the selected 원문 (role/doc_index; else 본문). [] = 목차 only (headings + one row per 주석 번호; 주석 boundaries inferred from 'N.'). Then pick by 목차 index (numbers), partial 제목 match (strings, spaces ignored; both 연결·별도 주석 if both exist) or "주석 31". A pick inside another comes back once; no match → 목차 instead. source=viewer ([014]): 뷰어 목차 (numbers = documents[].index; strings = 제목 only, no 주석 번호). format=markdown only; not with find·all_docs. | |
| doc_index | No | 0-based index of one 원문 XML in the ZIP (documents[].index); omitted = 0 = 본문. 감사보고서: use role, not a guessed 1~2. Out of range → 본문 WITH a note in notes — check it. source=viewer ([014]): picks one 뷰어 목차 섹션 (same index as get_attachments mode=text sections). | |
| truncate_at | No | Max content chars (default 300,000; excess cut; out-of-range clamped). Caps the sections total; all_docs: split across documents (per_doc_truncate_at). Ignored with find. | |
| find_max_bytes | No | Max total bundle size, UTF-8 bytes not chars (한글 3 bytes; default 12,000); oversized bundle cut by table row (header rows kept), clipped=true. | |
| find_max_bundles | No | Max bundles (default 5); other hits → locations only. Fewer if find_max_bytes fills first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), but the description goes well beyond: documents[] carries metadata only unless all_docs=true, truncated=true means re-query rather than data loss, find returns bundles 'instead of content', 0 find matches does not mean absence (scanned tables need get_attachments mode=images), and filings without 원문 XML silently switch to source=viewer with a different index space. These are non-obvious behaviors an agent would otherwise get wrong.
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?
Front-loaded with a one-line purpose, then bracketed sections ([Purpose]/[Usage]/[Response]/[Rules]) that make a long, dense, bilingual block scannable. It is verbose and repeats a few points already in the schema (truncation clamps, viewer mode), but for a 10-parameter tool with many interaction rules almost every line carries actionable content.
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?
No output schema exists, yet the description explains the return shape (documents[] indexing, find bundles, clipped/truncated flags, viewer-section mapping) and the fallback path when a filing has no 원문 XML. For a complex 10-param retrieval tool this is complete enough to call correctly on the first attempt.
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 100%, so the schema already documents all 10 parameters and the baseline is 3. The description nonetheless adds cross-parameter meaning the schema cannot: role vs doc_index vs all_docs mutual exclusion, sections=[] returning an outline to then index into, and the truncate_at remedy for truncated results. It also warns against guessing doc_index 1~2 for audit reports.
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 (reads and searches 공시 원문 as markdown, preserving heading/table structure) and explicitly carves out scope against siblings: audit opinion/KAM analysis goes to get_audit_report, ZIP-external documents and scans to get_attachments, XBRL to get_financials. An agent can distinguish it from every relevant sibling without opening a schema.
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 [Purpose] and [Usage] sections give explicit when-to-use conditions with three concrete worked examples (rcept_no lookup, role+sections, find terms), plus negative routing ('not get_attachments', audit opinion in _00760/_00761 pick by role). Exclusions and alternatives are named rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_corp_codeARead-onlyIdempotentInspect
MyDART MCP의 find_corp_code 도구는 회사명·종목코드로 DART 법인 식별자(corp_code)의 후보를 확인합니다.
[Purpose]
IMPORTANT: first call when a company's corp_code is unknown.
Also to disambiguate same-named companies.
ID resolution only — 업종·data location: get_company_profile; disclosure listings: search_disclosures.
[Usage]
"카카오" → corp_code 획득 → 재무제표 조회(get_financials)
"삼성전자" → corp_code 획득 → 임원 현황 조회(get_periodic_report)
"'동양' 들어가는 회사 후보 보여줘" → query="동양", limit=20
"005930이 어느 회사야?" → query="005930"
[Response]
stock_code: 보통주 code (kept after 상장폐지·합병); empty = 비상장.
count = rows returned (capped by
limit), not the total match count. 0 hits addsnotes.
[Rules]
resultsis a similarity-ranked candidate array — do not assume the first item is the answer.corp_code identifies the DART LEGAL ENTITY CODE, not the listing ticker. 우선주 codes map to the 보통주 issuer; ETF/ETN codes have no mapping.
Common names may overflow the default
limit— raise it when candidates look truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max candidates returned | |
| query | Yes | One 회사명 (한/영), 6-char 종목코드 (005930·0126Z0) or 8-digit corp_code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real behavioral context beyond them: results are similarity-ranked (do not trust the first item), count is capped by limit rather than being the total, 0 hits adds notes, and preferred/ETF codes have specific mapping 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?
Well-structured with [Purpose]/[Usage]/[Response]/[Rules] sections and the critical 'first call' note front-loaded. It is on the long side, but each section carries distinct information (routing, examples, return shape, ranking caveat) rather than repetition.
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 full burden of explaining return values (stock_code semantics, count capped by limit, notes on zero hits) and the ranking caveat. Combined with the schema and annotations, an agent has everything needed to call and interpret this tool 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?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: query accepts a Korean/English name, a 6-char ticker, or an 8-digit corp_code, and it shows limit in action (limit=20) and warns that common names may overflow the default. This goes beyond the schema's terse field descriptions.
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 ('회사명·종목코드로 DART 법인 식별자(corp_code)의 후보를 확인') and explicitly distinguishes from siblings, routing 업종·data to get_company_profile and disclosure listings to search_disclosures. An agent can tell this apart from every sibling without opening a schema.
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 names the trigger condition ('first call when a company's corp_code is unknown') plus a disambiguation use case, and gives four concrete input→workflow examples (e.g. '카카오' → get_financials). It also states what the tool is NOT for, pointing to the right alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentsARead-onlyIdempotentInspect
MyDART MCP의 get_attachments 도구는 공시의 첨부파일 목록과 형제문서 본문·페이지 이미지를 다룹니다.
[Purpose]
Attachment list + 형제문서 routing; body text = mode=text. 감사보고서·주석은 download_document(role).
자금부정통제 붙임·경영진 운영실태보고서 live here (mode=text; 붙임 = attachment_links[].retrieve).
Scan-only (도장·서명·스캔 서식): mode=images only.
[Usage]
정관·영업보고서 본문 → list 로 dcm_no 확보 → dcm_no, mode="text"
표가 이미지뿐이면 mode="images" (뒷장 image_from, PDF 페이지 pages)
[Response]
format: hwpx/hwp/pdf/docx/doc/xlsx/xls/zip/html/unknown
images: source="viewer" or "pdf" — different field shapes.
[Rules]
supported:false → unsupported_reason·suggestion·note·retrieve·next_step = the fallback route; follow it verbatim.
No bulk sweeps — mass viewer calls bring DART IP bans.
Ladder: text (표 lossless) → empty·링크 껍데기 body → images → download_url. Attachment files are never parsed server-side.
images returns pictures: OCR·판독 is the client's job, 1 image per capped call (image_from).
partial:true ⇒ section_errors[]; markdown is partial — 빈 곳 ≠ 사실 없음.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | list: attachment list only, nothing downloaded (cheap). text: document body as 마크다운 from the 뷰어 원문 — text·tables lossless. images: embedded raster (도장·스캔본·차트). No filename/index → 뷰어 원본 JPEG in document order, per-section eleId (manifest.source="viewer"); filename or index → scans THAT attachment PDF: decoded PNGs in page order, with page numbers (source="pdf"; pages narrows it). | list |
| index | No | images mode: 0-based index of the attachment to scan; filename wins if both. Selects the PDF-scan route, like filename. | |
| pages | No | images mode, PDF-scan route: 1-based pages WITHIN the attachment picked by filename/index (requires one), e.g. "2,4,7-9". Unset = that PDF's FIRST 40 pages only. Max 2000 pages per call — wider span rejected, not trimmed. | |
| dcm_no | No | Target 문서번호(dcmNo); default = 본문. Each 형제문서 (감사보고서·내부회계관리제도운영보고서·영업보고서·정관 etc.) has its own — take sibling_documents[].dcm_no from mode=list first; required to reach that 형제문서's attachments·text·images. | |
| filename | No | images mode: EXACT filename of the attachment PDF to scan (a miss lists available names); selects the PDF-scan route. | |
| rcept_no | Yes | 14-digit 접수번호; separators stripped. | |
| sections | No | mode="text" only: 0-based **sections[] array index**, NOT eleId (often index+1) — e.g. 3rd·6th entries → [2, 5]; check each returned index against your picks. Unset = first 24 sections. [] = 목차 only (titles, md_chars 0) → call again with picks. Picks apply before the 24-section cap — only way to reach 사업보고서 본문 sections 25~158. Out-of-range indices dropped with a note; all out-of-range = rejected. | |
| image_from | No | 뷰어 원본 JPEG route: 0-based start offset in document order — reach pages past max_images (capped channels fit ~1 page per call); continue with next_image_from. e.g. 운영실태보고서 자금부정통제 표 is usually the 2nd page → 1. PDF-scan route: use pages. | |
| max_images | No | images mode: max images; PDF-scan route keeps largest by area. | |
| truncate_at | No | mode=text 마크다운 cap in chars; default 100,000; out-of-range clamped. | |
| min_dimension | No | PDF-scan route only (뷰어 원본 JPEG unfiltered): images whose shorter side is under this many px are dropped as decoration (아이콘·괘선). Lower it to catch small 도장/서명. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive/idempotent annotations, the description discloses real operational behavior: mass viewer calls trigger DART IP bans (rate-limit), partial:true surfaces section_errors[] and markdown may be truncated mid-content ('빈 곳 ≠ 사실 없음'), images are returned as raw pictures whose OCR is the client's job, and capped calls yield roughly one image per page. It also specifies the supported:false fallback contract to follow verbatim.
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?
It is front-loaded with purpose before usage, response, and rules, and the bracketed headers make it scannable. It is somewhat verbose and repeats mode=text/mode=images cues across sections, but with no output schema the [Response] block earns 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?
With 11 parameters, no output schema, and mutation-free but costly remote calls, the description supplies the return shape ([Response]), the error/partial contract, and the fallback routing an agent needs. The remaining gap is minor: no explicit note on pagination or dcm_no-defaulted behavior for the list mode.
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 100%, so every one of the 11 parameters is already documented in the schema, which sets the baseline at 3. The description restates mode=text/mode=images and mentions sections/image_from routing, but adds no syntax or format detail not already present in the parameter descriptions themselves.
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 names a concrete verb+resource ('공시의 첨부파일 목록과 형제문서 본문·페이지 이미지를 다룹니다') and enumerates the three operating scopes (list/text/images). It also differentiates itself from a sibling by routing 감사보고서·주석 to download_document(role). However, the scope is dense and mixes three distinct retrieval modes, so the single-sentence purpose takes effort to parse.
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 [Usage] block gives stepwise conditions (list first to obtain dcm_no, then mode=text; mode=images only when the table exists purely as an image) and the [Rules] ladder (text → images → download_url) tells the agent exactly when to fall through to the alternative. It also names a sibling (download_document) as the route for 감사보고서·주석, so the when-to-use/when-not decision is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_profileARead-onlyIdempotentInspect
MyDART MCP의 get_audit_profile 도구는 감사인·감사의견·업무수행이사에 감사보수·감사투입시간·실사수행내역·외부조회 실시여부 등 외부감사 실시내역을 한 표로 요약해 반환합니다.
[Purpose]
Fact/figure asks: "who audited, at what fee, how was the 실사".
강조사항 comes structured (emphasis); full 의견근거·KAM·강조 text: get_audit_report.
ICFR detail: get_internal_control; 계속기업 quant: get_going_concern.
Company lists (모집단): search_audit_findings.
[Usage]
"삼성전자 2024 감사보수·비감사보수" → corp="삼성전자", year=2024
"감사인·감사보수만 빠르게" → corp="…", year=2024, light=true
[Response]
fees
_msuffix = 백만원.opinion domain: 적정/한정/부적정/의견거절.
[Rules]
data_available=false = the filing was not found (e.g. not yet filed) — do NOT read null fields as "confirmed absent".
audit_only=true (F 단독공시, unlisted) → fees are structurally absent (사업보고서 전용), not a defect.
For 연결/별도 split read kam.by_fs_div, not kam.topics (representative fallback).
ALWAYS read applicability.guidance[] — regime notes and next-tool routing.
감사인 교체/연속연수 are NOT returned — call per year and compare auditor.name.
| Name | Required | Description | Default |
|---|---|---|---|
| corp | Yes | 회사명/종목코드/corp_code | |
| year | Yes | 결산 사업연도 (회계연도·fiscal year), NOT the 공시(제출)연도 — pass the user's year as-is, never subtract: '2025 사업보고서' → 2025. Convert ONLY when the user explicitly names the 공시연도: '2026년에 공시된 사업보고서' → 2025. Relative ('최근 N개년'·'작년'): count back from the latest PUBLISHED 사업연도 (사업보고서 filed ≤90 days after 결산기말) — for 12월 결산 last year from April, the year before last in Jan~Mar (e.g. if latest = FY2025 → 최근 5개년 = 2021~2025). 비12월 결산 (3·6·9월): the year its 결산기 STARTS (3월 결산 2025-04~2026-03 = 2025; get_financials calls it 2026). | |
| light | No | Skip 원문 parsing — structured JSON only, fast; omits 실사 (incl. fees.headcount), 연결/별도 split, engagement_partner | |
| refresh | No | Bypass cache; re-collect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), and the description adds substantial behavioral context beyond them: data_available=false means the filing was not found (not 'confirmed absent'), audit_only=true makes fees structurally absent, 연결/별도 split must be read from kam.by_fs_div rather than kam.topics, applicability.guidance[] must always be read, and auditor rotation/연속연수 are not returned. This is exactly the value-add a description should provide.
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?
Front-loaded with a one-line purpose, then cleanly sectioned into Purpose/Usage/Response/Rules, so an agent can scan to the relevant block. It is dense and long, but the sections carry non-redundant content (units, opinion domain, regime notes) rather than filler.
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 the description carries the return-value burden and does so: it names the fields returned, explains the `_m` (백만원) unit, lists the opinion domain values, and discloses what is deliberately omitted (감사인 교체/연속연수). Combined with the rules on null semantics and cache refresh, an agent has everything needed to call and interpret the result.
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 100% and the year parameter is documented exhaustively in the schema itself, so the baseline is 3. The description adds intent-to-parameter mapping ('감사인·감사보수만 빠르게' → light=true) and explains what the light flag omits in outcome terms, giving meaning beyond the field definitions.
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: it returns a one-table summary of external-audit execution details (감사인·감사의견·업무수행이사·감사보수·감사투입시간·실사·외부조회). It explicitly differentiates from siblings by routing full 의견근거·KAM to get_audit_report, ICFR to get_internal_control, 계속기업 to get_going_concern, and 모집단 lists to search_audit_findings. An agent can pick this tool without opening any sibling schema.
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 concrete when-to-use examples with parameter mappings ('삼성전자 2024 감사보수·비감사보수' → corp/year) and a when-to-use-the-fast-path rule (light=true for 감사인·감사보수만). It also names the alternatives for adjacent needs, so both selection and invocation are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_reportARead-onlyIdempotentInspect
MyDART MCP의 get_audit_report 도구는 감사보고서 본문을 문단 단위로 구조화해 문단별 원문 텍스트를 반환합니다 — 감사의견·감사의견근거·KAM·강조사항·기타사항·계속기업가정불확실성.
[Purpose]
For verbatim 감사보고서 narrative paragraphs. Structured fact summaries (보수·실사 등): get_audit_profile.
ICFR detail and its fit with the 재무제표 감사의견: get_internal_control.
[Usage]
"LG에너지솔루션 2024 KAM 문단 전문" → corp="LG에너지솔루션", year=2024
"삼부토건 FY2024 별도 의견거절 근거 원문" → corp="삼부토건", year=2024, fs_div="OFS"
발견사항만 → sections="summary"; 잘리면 truncate_at 상향
[Response]
sections[].key = KSA700 elements (list in sections arg). opinion: 적정/한정/부적정/의견거절.
fs_label: 연결/별도. source_note = F 단독공시, correction_note = 정정 채택/생략.
[Rules]
kam.count=0 is normal if none_declared or 의견거절 (감사기준서 705 문단 29); else suspect omission.
Unlisted (F 단독공시) legitimately lacks KAM·업무수행이사 (see source_note).
재무제표·주석 FIGURES: download_document.
body_omitted:true = section EXISTS, body not requested (≠ absent) — re-call with sections.
internal_control = verdict only; ICFR 정본은 get_internal_control.
| Name | Required | Description | Default |
|---|---|---|---|
| corp | No | 회사명/종목코드/corp_code — corp+year required without rcept_no; locates the 사업보고서 (비상장: 감사보고서 F 단독공시 fallback) | |
| year | No | 결산 사업연도 (회계연도·fiscal year), NOT the 공시(제출)연도 — pass the user's year as-is, never subtract: '2025 사업보고서' → 2025. Convert ONLY when the user explicitly names the 공시연도: '2026년에 공시된 사업보고서' → 2025. Relative ('최근 N개년'·'작년'): count back from the latest PUBLISHED 사업연도 (사업보고서 filed ≤90 days after 결산기말) — for 12월 결산 last year from April, the year before last in Jan~Mar (e.g. if latest = FY2025 → 최근 5개년 = 2021~2025). 비12월 결산 (3·6·9월): the year its 결산기 STARTS (3월 결산 2025-04~2026-03 = 2025; get_financials calls it 2026). | |
| fs_div | No | Default both = 연결(CFS)+별도(OFS) → reports[] up to 2 entries; reading only the first drops an axis. | |
| refresh | No | Bypass cache; re-collect (corp+year only) | |
| rcept_no | No | 접수번호 instead of corp+year (사업보고서 or 감사보고서 F 단독공시) — resolved·applicability then null. | |
| sections | No | Section BODIES to include. full (default) = all. summary = finding paragraphs — opinion·kam·emphasis·other_matter·going_concern, + basis only when opinion ≠ 적정. Or a key array, e.g. ["opinion","kam"]; [] = 목차 only. Unselected → body_omitted:true stubs (re-requestable). Structured fields (opinion·kam.matters titles·emphasis·other_matters·going_concern_mentioned) ALWAYS returned. | |
| truncate_at | No | Max chars per included section body (default 8,000; excess cut; out-of-range clamped). truncated=true → check char_count, re-call higher. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description does not contradict them, so the safety profile is effectively transparent. The description adds genuine behavioral detail beyond annotations: body_omitted:true stubs are re-requestable rather than absent, refresh bypasses the cache, truncation is clamped and reportable via truncated=true, and fs_div=both can return up to two reports where reading only the first drops an axis. The omission is any statement of auth requirements or failure modes; with annotations carrying the safety burden, a 3 is fair.
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?
Front-loaded with a one-sentence purpose, then clean [Purpose]/[Usage]/[Response]/[Rules] blocks, so an agent can skim to the relevant block. It is dense, though — the Korean/English code-switching and long schema-side parentheticals mean some Rules entries (F 단독공시 caveat) restate what the parameter descriptions already cover, costing a little signal.
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 7 optional parameters and no output schema, the description carries the return-shape load and does so: sections[].key, the opinion enum (적정/한정/부적정/의견거절), fs_label, source_note, correction_note, and kam.count expectations are all explained. The one gap is that it never says what happens when corp+year resolve to nothing or how the corp fallback to F 단독공시 is signalled to the caller.
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 100%, so the baseline is 3, but the description adds real semantics on top: sections="summary" is defined as the finding-paragraph subset with a conditional basis rule, truncate_at is framed as a retry lever rather than a raw cap, and fs_div's 'reading only the first drops an axis' warning is operational advice absent from the schema. What it does not add is guidance on when to prefer rcept_no over corp+year beyond what the schema already states.
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 opening sentence states a specific verb and resource — it returns 감사보고서 body paragraphs structured section-by-section, listing the exact section keys (감사의견·감사의견근거·KAM·강조사항·기타사항·계속기업가정불확실성). It explicitly distinguishes itself from two siblings, routing structured fact summaries to get_audit_profile and ICFR detail to get_internal_control, so the agent can pick this tool without opening the schema.
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 [Usage] block gives three concrete request-to-parameter mappings (KAM 문단 전문, 별도 의견거절 근거 원문 with fs_div="OFS", 발견사항만 with sections="summary"), plus the escalation path (truncate_at 상향) when results are cut. The [Purpose] block names the two alternatives and the conditions that select them, and [Rules] adds exclusion logic (재무제표·주석 수치는 download_document).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_profileARead-onlyIdempotentInspect
MyDART MCP의 get_company_profile 도구는 기업개황(업종·대표자·결산월·상장구분)과 데이터 위치(data_location)를 조회합니다.
[Purpose]
Basics + routing check before 재무·감사 calls on unfamiliar (esp. 비상장) companies.
감사인·감사의견·감사보수: get_audit_profile; name ambiguity: find_corp_code.
[Usage]
"카카오는 뭐 하는 회사야?" → corp="카카오"
"교보생명 FY2024 재무는 어디서 봐?" → corp="교보생명", year=2024
"종목코드 068270 기업 개황" → corp="068270"
[Response]
data_location.filing_tier: listed(financials=JSON API) / listed_konex(NOT in structured financial APIs — financials live in 사업보고서 원문) / unlisted_reporting / audit_only(financials+notes live in 감사보고서 F 단독공시 원문) / no_disclosure_found / unknown
company.corp_cls: Y=코스피/K=코스닥/N=코넥스/E=기타(비상장). acc_mt = 결산월.
[Rules]
Route follow-up calls by data_location: audit_only → get_financials returns [013], open f_separate_rcept via download_document instead. listed_konex → empty get_financials is NORMAL, do not retry.
provisional=true (year omitted) is tentative — never conclude 비외감 from no_disclosure_found.
| Name | Required | Description | Default |
|---|---|---|---|
| corp | Yes | 회사명/종목코드/corp_code | |
| year | No | 회계연도 for judging applicability.data_location. Omitted = latest (provisional). Matters for 비상장사·코넥스 (market as of that year); 코스피·코스닥 = listed, no probe. 비12월 결산: 결산기 시작연도 (same as audit tools); get_financials etc. call the same period year+1 (see fiscal_year_note). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the bar is met for safety, yet the description adds substantial behavioral context beyond them: enumerated filing_tier outcomes and what each implies, the required follow-up route for audit_only and listed_konex, the anti-retry rule for empty financials on KONEX, and the provisional/no_disclosure_found caveat about never concluding 비외감. This is rare, decision-relevant disclosure.
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?
Content is front-loaded with a one-line summary, then separated into [Purpose], [Usage], [Response], and [Rules] blocks. Despite its length, each block carries distinct decision-relevant information (routing, output shape, caveats) with no filler sentences.
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 the description carries the return-value burden and does so by enumerating data_location.filing_tier values, company.corp_cls codes, and acc_mt. Combined with the routing rules and caveats, an agent has everything needed to call this and correctly interpret the result.
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 100% and both parameters (corp accepting 회사명/종목코드/corp_code, year's fiscal-period and provisional semantics) are already documented in the schema. The description's examples reinforce the accepted corp formats but add little meaning not present in the schema text, which is the expected baseline case.
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 opening line names a specific verb (조회) and resources (기업개황: 업종·대표자·결산월·상장구분 plus data_location), and the [Purpose] section explicitly routes agents elsewhere for adjacent needs (감사 → get_audit_profile, name ambiguity → find_corp_code). An agent can distinguish this from every sibling without opening a schema.
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?
Three concrete natural-language usage examples map user phrasings to parameters, and the [Purpose]/[Rules] sections state when this tool is the right first step (basics + routing check before 재무·감사 calls on unfamiliar/비상장 companies) and name the alternatives explicitly. Both inclusions and exclusions are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_corporate_eventARead-onlyInspect
MyDART MCP의 get_corporate_event 도구는 주요사항보고서 자본·지배구조 이벤트 36종(증자·감자·CB/BW/EB·자기주식·합병/분할 등)과 5%룰·임원 지분공시를 조회합니다.
[Purpose]
"Who raised/cut stakes, when": event_type="holdings" (5%룰 대량보유·임원/주요주주 소유보고).
결정의 후속 발행·합병 조건(공모가·인수인): get_registration_statement.
List skims: search_disclosures; 사업보고서 snapshots (최대주주·주식총수): get_periodic_report.
[Usage]
"카카오 최근 3년 자본 조달 흐름" → corp="카카오", mode="timeline"
"이 회사 CB 발행한 적 있어?" → corp="…", event_type="cb_issuance"
"자사주 취득·처분 2020년부터" → event_type=["treasury_acquisition","treasury_disposal"], start="2020-01-01"
[Response]
date = 최초 공시일 (start/end axis), newest first; fields = latest 정정본 (rcept_no) — corrected: last_filed_date.
지분공시: total_count = all-time cumulative, filtered_count = in-period (DART takes no dates — filtered client-side).
[Rules]
Empty timeline ≠ no events — default set = capital events only (name event_type for more); sections_meta may carry per-endpoint errors.
event_type_counts is pre-truncation (limit cuts timeline only).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | YYYY-MM-DD / YYYYMMDD; default today (period.end_defaulted:true) | |
| corp | Yes | 회사명/종목코드/corp_code | |
| mode | No | single: one event_type. timeline: several event_types (unset → 'capital' group) in parallel, merged into one newest-first list | single |
| limit | No | Max timeline rows, newest first by 최초 공시일. Excess cut → truncated=true, total_events = full count. Prefer narrowing start/end over raising limit. | |
| start | No | YYYY-MM-DD / YYYYMMDD; default 3 years ago (period.defaulted:true). start/end match each event's first filing (DART 최초접수일) — an in-window 정정 of an event first filed earlier is not returned | |
| event_type | No | String = one event (mode=single); array = several merged into one timeline (mode auto-switches to timeline). Unset in timeline = 'capital' group only (자본거래 25종). Group aliases: 'capital', 'holdings' (지분공시 2종). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, openWorld), and the description adds substantial context beyond them: date axis is 최초 공시일 newest-first, fields come from the latest 정정본, total_count is all-time cumulative while filtered_count is client-side filtered because DART takes no dates, empty timeline ≠ no events, and event_type_counts is pre-truncation. This is exactly the extra behavioral layer annotations cannot supply.
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?
Dense but well-sectioned ([Purpose]/[Usage]/[Response]/[Rules]) and front-loaded with the one-line purpose before details. Slightly long and a few lines (e.g. the paper-price/investor note) sit close to redundancy, but every block carries operational information.
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?
No output schema exists, so the description must carry return semantics — and it does, explaining the date axis, correction handling, the two count fields, truncation flags and sections_meta per-endpoint errors. For a 6-param open-world query tool, an agent has everything needed to call it and interpret results.
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 100% so the baseline is 3, but the description adds real meaning on top: mode switching behavior when event_type is an array, the 'capital' default group and 'holdings' alias, the limit-vs-start/end tradeoff guidance, and that start/end match an event's first filing so later 정정 is excluded. These go beyond the schema's own text.
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?
Names a specific resource (주요사항보고서 자본·지배구조 이벤트 36종 plus 5%룰·임원 지분공시) and a clear retrieval verb, then explicitly differentiates from siblings get_registration_statement, search_disclosures and get_periodic_report. An agent can distinguish it from all 14 siblings without opening any schema.
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 three concrete usage scenarios keyed to intent ('카카오 최근 3년 자본 조달 흐름', 'CB 발행한 적 있어?', '자사주 취득·처분 2020년부터') and names the alternative tool for each adjacent need. When-to-use and when-to-use-something-else are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsARead-onlyIdempotentInspect
MyDART MCP의 get_financials 도구는 매출·영업이익·순이익·자산/부채/자본 등 재무수치를 조회합니다 — 재무 질문 대부분은 이걸로 충분합니다.
[Purpose]
재무제표 figures start here. corp+year = LATEST filing (정정 반영); rcept_no = that filing AS FILED (재작성 전후 대조·합산 검증 — 구 get_xbrl).
사업보고서 prose: download_document; 부실징후(계속기업): get_going_concern.
[Usage]
"삼성전자 2025년 매출·영업이익" → corp="삼성전자", year=2025
"삼성전자와 SK하이닉스 실적 비교" → corp=["삼성전자","SK하이닉스"]
"이 공시본 그대로 전체" → rcept_no="…", sj_div=["BS","IS","CIS","CF","SCE"]
[Response]
Row keys: sj_div, account_nm, thstrm_amount(당기)/frmtrm_*(전기)/ bfefrmtrm_*(전전기)/thstrm_add_amount(누계). Amounts are STRINGS.
full: total_count=pre-filter, count=post-filter. rcept_no adds validations.
[Rules]
Quarterly/half IS·CIS: CUMULATIVE = thstrm_add_amount, thstrm_amount = that quarter alone; CF thstrm_amount is already YTD; BS: thstrm_amount only (see period_basis).
Cross-check the periods legend (전기/당기 off-by-one) and year_defaulted.
no_data is routing, not an error — follow next_step.
| Name | Required | Description | Default |
|---|---|---|---|
| corp | No | 회사명·종목코드·corp_code — string or array (comma list ok). scope=summary: 1 = single, 2+ = comparison (first 200 queried). scope=full: 1 only — extras dropped with a note. Unresolved entries dropped with a note; error only if none resolve. Omit with rcept_no. | |
| year | No | 결산 사업연도 (회계연도, not the filing year) — one per call; annual rows also carry 전기·전전기. Omitted → latest published 사업연도 by 결산월·report (year_defaulted=true). | |
| scope | No | summary (default): 주요계정 ~14 per basis (자산·부채 유동/비유동/총계, 자본금·이익잉여금·자본총계, 매출액·영업이익·법인세차감전 순이익·당기순이익·총포괄손익); 연결·별도 together ≈ 28 rows per company (별도-only 14; 금융업 +α). full: 전체 재무제표 filtered by sj_div, hundreds~1k rows. | |
| format | No | Unsupported — any value is rejected; omit. Tables come as items[]. | |
| fs_div | No | scope=full·rcept_no: 연결(CFS, default)/별도(OFS). CFS without data falls back to OFS (fs_div_note) — response fs_div = basis used. Ignored by summary (basis per row). | |
| report | No | 1Q·반기·3Q·연차 | annual |
| sj_div | No | scope=full·rcept_no: 재무제표 to include — BS=재무상태표, IS=손익계산서, CIS=포괄손익계산서, CF=현금흐름표, SCE=자본변동표. Default BS+IS+CIS (단일 포괄손익계산서 companies put 손익 in CIS only); CF·SCE only when listed. String or comma list ok. | |
| rcept_no | No | 사업보고서 접수번호 → that filing AS FILED (later 정정 not reflected), plus 합산 검증 (validations). 분·반기 rcept → no_data; use corp+report. Combine with fs_div·sj_div; omit corp·year·scope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/idempotent/destructive hints, yet the description adds substantial non-obvious behavior: amounts are STRINGS, cumulative-vs-quarter semantics differ per statement type (IS/CIS CUMULATIVE = thstrm_add_amount, CF already YTD, BS single-period), CFS→OFS fallback with fs_div_note, and the 정정-반영 vs AS-FILED distinction between corp+year and rcept_no. These are exactly the traits an agent needs and none are in 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?
Front-loaded with a one-line summary followed by labeled [Purpose]/[Usage]/[Response]/[Rules] sections that make it scannable despite its length. It is denser than necessary and repeats some schema content (sj_div expansions, format rejection), but every section carries usable information and there is no filler.
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?
No output schema exists, and the description compensates fully by naming the row keys (sj_div, account_nm, thstrm_amount, frmtrm_*, bfefrmtrm_*, thstrm_add_amount) and explaining total_count vs count semantics. Combined with the routing rule for no_data and the period legend caveat, an agent has everything needed to call and interpret this 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 100%, so the baseline is 3, but the description earns above baseline by adding cross-parameter semantics the schema lacks: corp+year returns the LATEST filing with 정정 applied while rcept_no returns the filing AS FILED, year means 결산 사업연도 not filing year, and format is rejected outright. Much of the sj_div/scope text does restate schema enums, so it is not a full 5.
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 (재무수치 조회) and enumerates the exact figures covered (매출·영업이익·순이익·자산/부채/자본). It explicitly scopes itself against siblings by naming download_document for 사업보고서 prose and get_going_concern for 부실징후, so an agent can route without opening schemas.
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 three concrete query→parameter mappings (single corp+year, comparison via array, as-filed via rcept_no) and explicitly states that '재무 질문 대부분은 이걸로 충분합니다.' The [Rules] section adds the no_data-is-routing-not-error escape hatch, which is genuine when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_going_concernARead-onlyIdempotentInspect
MyDART MCP의 get_going_concern 도구는 계속기업 위험을 정량 재무지표와 감사보고서 기재의 교차로 판정합니다.
[Purpose]
계속기업: 정량 징후 × 감사보고서 기재 대조 — a mismatch is a cue to read the 원문, not a finding.
Lists: search_audit_findings; figures: get_financials; 문단 원문: get_audit_report.
[Usage]
"이스타코 2024 계속기업 위험 있어?" → corp="이스타코", year=2024
"별도 기준 정량 점검" → corp="…", year=2024, fs_div="OFS"
[Response]
flags.consecutive_op_loss = NUMBER of 연속 영업손실 years (not a bool); others bool|null.
grade: 판정불가(no data)/양호(0)/주의(1
2)/경계(34)/위험(5+)cross_check.code: both/quant_only/text_only/none/insufficient_data/quant_unavailable/report_unavailable
text: audit_opinion, evidence_source, report_fs_div
[Rules]
going_concern_mentioned false = parser found no GC text, not proof of none; null = report not secured. quant_only covers both cases.
한정/부적정/의견거절: GC matters can sit in 의견근거 — read it (cross_check.next_step).
grade "판정불가" is not "양호". flags null = account not secured, not false.
fs_div (figures) is post-fallback — CFS may return OFS.
| Name | Required | Description | Default |
|---|---|---|---|
| corp | Yes | 회사명/종목코드/corp_code | |
| year | Yes | 결산 사업연도 (회계연도·fiscal year), NOT the 공시(제출)연도 — pass the user's year as-is, never subtract: '2025 사업보고서' → 2025. Convert ONLY when the user explicitly names the 공시연도: '2026년에 공시된 사업보고서' → 2025. Relative ('최근 N개년'·'작년'): count back from the latest PUBLISHED 사업연도 (사업보고서 filed ≤90 days after 결산기말) — for 12월 결산 last year from April, the year before last in Jan~Mar (e.g. if latest = FY2025 → 최근 5개년 = 2021~2025). 비12월 결산 (3·6·9월): the year its 결산기 STARTS (3월 결산 2025-04~2026-03 = 2025; get_financials calls it 2026). | |
| fs_div | No | Default CFS (연결); OFS = 별도. No 연결 → auto fallback to 별도 (response fs_div = basis used). | |
| refresh | No | Bypass cache; re-collect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower; the description nonetheless adds real behavior: grade banding semantics, cross_check code enumeration, the fact that consecutive_op_loss is a count not a bool, and null/False distinctions. It stops short of describing latency, caching depth, or pagination, so not a full 5.
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?
Front-loads the one-line purpose and organizes the rest into [Purpose]/[Usage]/[Response]/[Rules], so an agent can scan to the section it needs. It is dense and long, and a few rules restate response fields already listed above, but no section is filler.
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?
No output schema exists, so the description carries the return-value burden and does so: it enumerates flags, grade bands, cross_check codes, and text fields, and it documents the parser pitfall (going_concern_mentioned false vs null) that would otherwise cause misreads. For a 4-param analytical tool with a rich response, nothing material is missing.
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 100%, which normally sets the baseline at 3, but the description adds a semantic the schema omits: fs_div is post-fallback, so a CFS request may return OFS figures in the response. That is a genuine cross-field nuance beyond the schema text.
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 analytical action (judging going-concern risk by intersecting quantitative metrics with audit-report text) rather than a generic resource operation. It explicitly names the sibling tools it draws on (search_audit_findings, get_financials, get_audit_report), letting an agent place it among the 14 siblings without opening schemas.
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 [Usage] section gives concrete when-to-use examples ('이스타코 2024 계속기업 위험 있어?' → corp/year; 별도 기준 → fs_div=OFS) and the [Purpose] block routes the agent to alternatives for lists, figures, and report text. It also warns that a mismatch is a cue to read the 원문, not a finding — explicit guidance on interpretation, not just invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_internal_controlARead-onlyIdempotentInspect
MyDART MCP의 get_internal_control 도구는 '감사인'의 내부회계관리제도(ICFR) 감사/검토 보고서를 조회합니다 — 구분·의견·중요한 취약점 여부.
[Purpose]
ICFR 의견·취약점 vs 재무제표 감사의견; 취약점 lists: search_audit_findings.
자금부정통제·경영진 내부회계관리제도 운영실태보고서: not here → get_attachments (사업보고서 rcept, mode=list→dcm_no→mode=text, scans=images; no rcept: search_disclosures preset='annual_report').
Structured facts: get_audit_profile; full text: get_audit_report.
[Usage]
"카카오페이 2024 내부회계 의견" → corp="카카오페이", year=2024
"연결 기준만" → corp="…", year=2024, fs_div="CFS"
[Response]
opinion domain: 적정/부적정/의견거절 — NO '한정'. 검토(review_or_audit)의 의견거절 = 범위제한에 따른 검토결론 불표명.
[Rules]
reports is an ARRAY — both gives up to 2 entries (연결·별도).
present=false is usually out-of-scope (read the note), not missing data; an empty CFS entry is normal.
Never conflate a review's 의견거절 with an audit's — check review_or_audit.
자금부정통제 (FY2025~ mandatory, FY2024 optional)·시정계획 = 경영진 운영실태보고서 — see management_operation_report.steps (applicable=false = F 단독공시: no report exists).
| Name | Required | Description | Default |
|---|---|---|---|
| corp | Yes | 회사명/종목코드/corp_code | |
| year | Yes | 결산 사업연도 (회계연도·fiscal year), NOT the 공시(제출)연도 — pass the user's year as-is, never subtract: '2025 사업보고서' → 2025. Convert ONLY when the user explicitly names the 공시연도: '2026년에 공시된 사업보고서' → 2025. Relative ('최근 N개년'·'작년'): count back from the latest PUBLISHED 사업연도 (사업보고서 filed ≤90 days after 결산기말) — for 12월 결산 last year from April, the year before last in Jan~Mar (e.g. if latest = FY2025 → 최근 5개년 = 2021~2025). 비12월 결산 (3·6·9월): the year its 결산기 STARTS (3월 결산 2025-04~2026-03 = 2025; get_financials calls it 2026). | |
| fs_div | No | Default both = 연결(CFS)+별도(OFS). ICFR is normally 별도 only; 연결 ICFR 감사 only for 전기말 별도자산 2조↑ filers from FY2023. 별도 falls back to a standalone ICFR 공시 if the 감사보고서 embeds none; 연결 never does. | |
| refresh | No | Bypass cache; re-collect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly/idempotent), but the description adds substantial behavioral context: the opinion domain (적정/부적정/의견거절, no 한정), the review-vs-audit 의견거절 distinction, reports-always-array semantics, and present=false out-of-scope note. Goes well beyond what annotations declare.
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?
Structured with [Purpose]/[Usage]/[Response]/[Rules] headers and front-loaded purpose. Somewhat dense – the nested routing in [Purpose] is compressed – but nearly every sentence carries actionable guidance.
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, 4-param tool with rich schema and strong annotations, the description covers opinion-value semantics, empty-array behavior, present=false meaning, and cross-tool routing. No output schema exists, yet return-shape cues (opinion domain, reports array, review_or_audit field) are provided.
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 100%, so baseline is 3, but the description still adds useful semantic notes: fs_div='CFS' selection example and 연결 ICFR only applying to 2조↑ filers; the schema carries the detailed year edge cases. Points to fs_div behavior that clarifies real-world interplay.
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 resource and verb: retrieving the auditor's ICFR audit/review report with 구분·의견·중요한 취약점. Explicitly distinguishes ICFR opinion from 재무제표 감사의견 and names sibling tools (search_audit_findings, get_attachments, get_audit_profile, get_audit_report) that cover adjacent needs.
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 concrete worked examples ('카카오페이 2024 내부회계 의견', '연결 기준만'), names alternatives with the condition that routes to each (약점 lists → search_audit_findings, 자금부정통제 → get_attachments / management_operation_report). Explicit when-not and when-else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_periodic_reportARead-onlyIdempotentInspect
MyDART MCP의 get_periodic_report 도구는 사업보고서 세부 섹션 28종을 정형 데이터로 조회합니다 — 한 섹션 또는 여러 섹션 동시.
[Purpose]
Section tables: 배당·자기주식·최대주주·소액주주·임원보수·회계감사인·회사채 미상환 등.
재무제표 figures: get_financials. auditor_opinion is one word — KAM·내부회계·강조사항: get_audit_profile / get_audit_report.
[Usage]
"삼성전자 2025년 배당 내역" → corp="삼성전자", year=2025, report_type="dividends"
"카카오 최대주주가 누구야" → corp="카카오", report_type="shareholders" (year 생략 = 최신)
[Response]
Amounts are STRINGS. Section status: 000 성공 / 013 무자료.
periods legend maps 당기/전기/전전기 → fiscal years — cite 기수 only after reading it.
[Rules]
Non-December closer: apply fiscal_year_note — one year off vs the audit tools.
ARRAY: per-element status (success·013·error mix); all-013 flips to { mode:"no_data", … }.
Listed [013] ≈ legitimate absence (no 배당·자기주식, no eligible 개인별 보수), not failure.
개인별 보수 2종은 2026-05 서식 개정으로 구판↔V2 이원 — 도구가 자동 라우팅(endpoint· compensation_format 표시). V2 는 1인당 3행(당기·전기·전전기)이라 합계는 fscl_year="당기"만, 주식기준보상 세부는 stk_bsd_cmpn.
| Name | Required | Description | Default |
|---|---|---|---|
| corp | Yes | 회사명/종목코드/corp_code | |
| year | No | 결산 사업연도 (회계연도, not the filing year) — one per call. Omitted → latest published 사업연도 by 결산월·report (year_defaulted=true). | |
| report | No | 1Q·반기·3Q·연차 | annual |
| max_items | No | Row cap per section; excess cut → truncated=true, total_count = full row count. | |
| report_type | Yes | Section — string or array (array → sections[]). Families in enum order: 주주 4 (largest_shareholder…) / 임직원 3 (executives…) / 보수 6 (executive_compensation_*…) / 회계감사 3 (auditor_opinion…) / 자본 3 (dividends·treasury_stock…) / 자금사용 2 (*_fund_use) / 타법인출자 1 = other_company_investment (incl. 종속·관계기업 지분) / 채무증권 6 (debt_securities_issuance·*_unredeemed). Group aliases: 'shareholders' (주주 4), 'executive_compensation' (보수 6). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond that: amounts returned as STRINGS, status codes (000 성공 / 013 무자료), per-element ARRAY status with all-013 flipping to mode:'no_data', [013] as legitimate absence rather than failure, fiscal_year_note offset for non-December closers, and automatic 구판↔V2 routing for the 개인별 보수 sections.
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?
Clearly sectioned into [Purpose]/[Usage]/[Response]/[Rules] with the core purpose front-loaded, so an agent can stop reading early. The density of edge-case rules makes it longer than ideal, but nearly every line carries operational value rather than filler.
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 the description must carry return-value semantics — and it does: status codes, periods legend mapping 당기/전기/전전기 to fiscal years, the no_data mode shape, truncation signaling, and the V2 three-row-per-person compensation caveat. Complete for a 28-section, 5-parameter 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 100%, so the baseline is 3; the description nonetheless adds value by grouping the 28 report_type values into families, naming the group aliases 'shareholders' and 'executive_compensation', and explaining the year-defaulting behavior and fiscal_year_note interplay. It stops short of documenting max_items/truncation in prose, which the schema already handles.
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 (사업보고서 세부 섹션 28종), including scope (single or multiple sections), and explicitly delineates against siblings by naming get_financials for 재무제표 figures and get_audit_profile/get_audit_report for auditor opinion. An agent can distinguish this tool without opening any schema.
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 two concrete worked examples mapping natural-language queries to arguments, states the year-omission default (최신), and routes agents to alternative tools for adjacent data (재무제표 → get_financials, KAM·내부회계 → get_audit_profile). When-to-use and when-to-use-something-else are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_registration_statementARead-onlyInspect
MyDART MCP의 get_registration_statement 도구는 증권신고서 주요정보 6종 — 모집·매출 조건, 인수인, 자금 사용목적, 합병·분할 조건을 정형 JSON 으로 조회합니다.
[Purpose]
Filed terms of a 증권신고서: 공모가액·인수인·자금의사용목적·합병비율·주식매수청구권.
Board decision: get_corporate_event / listing scan: search_disclosures(kind="issuance") / narrative (투자위험요소): download_document.
[Usage]
"대한항공 유상증자 조건" → corp="대한항공", statement_type="equity"
[Response]
filings[] = one per 신고서(rcept_no), newest first. sections: general·securities·underwriters·fund_use·sellers·put_right·issued_securities·parties.
date = 접수일 (정정본: 정정 접수일, may fall outside window). Values are raw strings; '-'(해당없음) fields omitted.
[Rules]
superseded_by = later version DART omits; if [발행조건확정], 가액·총액·금리 here are 예정 terms (final: its retrieve). Older 정정 not included.
withdrawn:true = 철회신고서 filed. version_check set = check incomplete.
No data ≠ not issued: 사모·일괄신고서·소액공모 out of scope. Per-type status in sections_meta.
fetch_failed/truncated_note types mean "unconfirmed", not "none" — re-query that type.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | YYYY-MM-DD / YYYYMMDD; default today (period.end_defaulted:true) | |
| corp | Yes | 회사명/종목코드/corp_code (no all-company scan) | |
| limit | No | Max 신고서 returned (per rcept_no, not rows), newest first; default 10. Excess → truncated=true, total_filings = full count | |
| start | No | YYYY-MM-DD / YYYYMMDD, matched on 신고서 최초접수일; default 2015-01-01 = data floor, full history (period.defaulted:true) — keep the window wide | |
| statement_type | No | 증권신고서 type, string or array; unset = all 6. equity=지분증권(유상증자·IPO) / debt=채무증권(회사채) / depositary=증권예탁증권(DR) / merger=합병 / stock_exchange=주식의포괄적교환·이전 / division=분할. Group aliases: 'offering' (공모 3종), 'restructuring' (구조조정 3종) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true. Beyond that, the description discloses substantial behavior an agent could not infer: superseded_by semantics, withdrawn:true meaning a 철회신고서, version_check indicating incomplete checks, fetch_failed/truncated_note meaning 'unconfirmed' not 'none', and that 사모·일괄신고서·소액공모 are out of scope. This is rich, non-obvious operational context.
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 organized into [Purpose]/[Usage]/[Response]/[Rules] headers and is front-loaded with the core purpose. It is dense and lengthy, but nearly every sentence carries behavioral detail (superseded, withdrawn, fetch_failed, out-of-scope types), so little is pure filler.
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 compensates by describing the return shape (filings[] per rcept_no, newest first, the named sections, date semantics, omitted '-' fields). Combined with edge-case rules for truncated, withdrawn, version_check, and out-of-scope types, an agent has everything it needs to interpret results 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?
Schema coverage is 100%, so the schema already documents most parameters, giving a baseline of 3. The description adds value by reinforcing the window-widening advice ('keep the window wide') and clarifying that date = 접수일 and that 정정본 dates may fall outside the window, which informs how start/end should be set.
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 opening sentence names a specific verb (조회) and resource (증권신고서 주요정보 6종: 모집·매출 조건, 인수인, 자금 사용목적, 합병·분할 조건) returned as structured JSON. The [Purpose] block further distinguishes it from siblings by routing board decisions to get_corporate_event, listing scans to search_disclosures, and narrative risk factors to download_document. An agent can tell exactly what this tool returns and how it differs from neighbors.
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 [Usage] section gives a concrete trigger example ('대한항공 유상증자 조건' → corp/statement_type) and the [Purpose] block maps adjacent needs to specific alternative tools. It clearly frames the context for invoking this tool, though it stops short of explicitly stating exclusions like 'do not use for private placements' framed as guidance (that constraint appears later under [Rules]).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_valuation_dataARead-onlyIdempotentInspect
MyDART MCP의 get_valuation_data 도구는 가치평가 데이터(시장 시계열·WACC·유사회사)를 kind 로 골라 조회합니다.
[Purpose]
평가기준일 시세·β checks, WACC build-up, peer comps.
Evidence, not adoption — the 평가자 decides.
재무수치: get_financials; 업종(KSIC)·시장구분: get_company_profile.
[Usage]
"에스에프에이 최근 1년 주가" → kind="market", corp="에스에프에이"
"반도체장비 업종 피어 멀티플" → kind="peers", ksic="29271"
[Response]
Units: *_pct = %, but mrp·srp·tax_rate = decimals (0.08 = 8%); flt_rt = 등락률 %.
[Rules]
Returns come from flt_rt, never close deltas (break at 액면분할·병합).
Quote aggregates with n (varies; EBITDA often missing).
peers = KSIC candidates the 평가자 curates; too few relax the prefix 5→4→3 (see prefix_depth_used).
무차입β (beta.unlevered·beta_unlev) = Hamada on WACC's 기준일 D/E (D 이자부부채 리스 포함, E per equity_basis); peers: E outstanding_plus_nci+우선주, β 2w.
Cite each source·as_of verbatim (조서 정합).
ALWAYS read notes[] — 강등·폴백·주의 accumulate there.
Daily cap on distinct targets per token or key.
| Name | Required | Description | Default |
|---|---|---|---|
| kd | No | [wacc] Kd directly, % p.a. 세전 (e.g. 4.5); overrides credit_rating·kd_tenor | |
| yq | No | [wacc·peers] 평가기준 분기 YYYYQn (e.g. 2026Q2, lowercase q OK); default latest snapshot | |
| end | No | [market] Default: latest 적재일 | |
| mrp | No | [wacc] MRP override, decimal; default 0.08 = midpoint of 한국공인회계사회 가이던스 7~9% | |
| srp | No | [wacc] SRP override, decimal; skips 분위 판정 | |
| corp | No | 회사명·종목코드·corp_code. market: 개별 종목 시세 (exactly one of corp·index·rate_series); wacc: REQUIRED, the subject company; peers: target (동업종 peers auto-selected) | |
| freq | No | [market] daily (default)·weekly (Fri close)·monthly (month-end). weekly/monthly rows carry period_return_pct (compounded flt_rt, %) instead of flt_rt — returns come from it, never close deltas | |
| kind | Yes | market = 시세·지수·금리 time series; wacc = WACC components + CAPM build-up; peers = 동업종(KSIC) peer multiples·무차입β·자본구조. Arguments are tagged by kind ([market]·[wacc]·[peers]); one this kind does not use → error listing the ones it accepts; unknown key → rejected. | |
| ksic | No | [peers] KSIC 업종코드 instead of corp (비상장 target) or overriding corp's 업종; e.g. '26410' | |
| index | No | [market] 시장지수 kospi·kosdaq (KOSPI·코스피 etc. accepted). Not with corp·rate_series | |
| limit | No | [market·peers] market: row cap, latest rows kept (default 600, 1~3000); peers: top-N by 시총, aggregates over these N only (default 15, 3~50) | |
| start | No | [market] YYYYMMDD or YYYY-MM-DD; default end − 1 year | |
| exclude | No | [peers] spac·reit·loss (LTM 순손실)·financial (KSIC 64~66). Default [spac, reit]; a given value replaces it | |
| kd_tenor | No | [wacc] Kd(타인자본비용) tenor (default 5y) | |
| rf_tenor | No | [wacc] Rf(무위험이자율) tenor (default 10y) | |
| tax_rate | No | [wacc·peers] 한계법인세율, decimal; default 0.264 (24%×1.1). Also Hamada t (beta.unlevered·beta_unlev) | |
| beta_spec | No | [wacc] β: 2w = 2년 주간 (default), 5m = 5년 월간 | |
| size_band | No | [peers] Keep peers within N× the target's 시총 (10 = 1/10~10x; min 2); ignored without corp | |
| target_de | No | [wacc] Target 자본구조 D/E (시가) for WACC weights (wE·wD); default 실측 D/E (0 if missing). β: still unlevered at 실측 D/E, only relevered here (relevered_at_target_de); Ke keeps observed βL | |
| srp_scheme | No | [wacc] 규모위험 프리미엄(SRP) 분위체계 (default quintile) | |
| rate_series | No | [market] 시장금리: ktb* = 국고채, corp_* = 회사채 3년 (AA-·BBB-; pyeong = 민평), cd91 = CD 91일. Not with corp·index | |
| equity_basis | No | [wacc] E(자기자본 시가): listed (자기주식 포함)·outstanding (자기주식 제외)·outstanding_plus_nci (default, +비지배지분); also β-unlevering D/E | |
| include_pref | No | [wacc] Add 우선주 시총 into E (default true) | |
| credit_rating | No | [wacc] 신용등급 for Kd (무보증 공모회사채, KIS자산평가 매트릭스); mid-notch = AA0·A0·BBB0·BB0·B0, not bare AA. Omitted → 공시 회사채 등급; none disclosed → Kd not computed (no assumed rating), WACC null if D/E>0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent surface, but the description adds substantial behavior beyond them: a daily cap on distinct targets per token (rate limit), flt_rt vs close-delta return semantics with the 액면분할 caveat, peer prefix relaxation with prefix_depth_used fallback, and the instruction to always read notes[] for 강등·폴백. These are exactly the operational traits an agent needs.
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?
Front-loaded with a one-line purpose, then Purpose/Usage/Response/Rules sections where nearly every line carries a rule an agent cannot infer. Dense but not padded; slight compression cost from the bilingual shorthand, which is understandable given 24 parameters.
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?
No output schema exists, so the description compensates with a Response section on units and return provenance, plus Rules covering degradation, sourcing, and caps. For a 24-parameter, three-mode tool this is complete enough for correct invocation.
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 100%, so the schema already establishes most parameter meaning (baseline 3). The description adds cross-parameter semantics not in the schema: the unit convention (*_pct = %, mrp/srp/tax_rate = decimals, flt_rt = 등락률 %) and the interlocking role of basis choices in the Hamada unlevering, which lift it above baseline.
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 ('가치평가 데이터를 kind 로 골라 조회') and enumerates the three retrievable domains (market 시계열, WACC build-up, peer comps). It explicitly distinguishes itself from siblings by naming get_financials for 재무수치 and get_company_profile for 업종·시장구분.
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 concrete when-to-use routing examples ('에스에프에이 최근 1년 주가' → kind=market; '반도체장비 업종 피어 멀티플' → kind=peers) and names the alternative tools for adjacent data. The kind enum also documents that passing an argument for the wrong kind errors, which is explicit usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_audit_findingsARead-onlyIdempotentInspect
MyDART MCP의 search_audit_findings 도구는 회사를 지정하지 않고 감사보고서 조건으로 상장사·비상장사 목록을 찾습니다.
[Purpose]
List/aggregate: "의견거절 회사"·"내부회계 취약점"·"○○회계법인 감사 회사".
Detail: get_audit_profile/get_internal_control; 원문: get_audit_report.
[Usage]
"FY2024 코스피 의견거절 회사" → year=2024, market="kospi", opinion="disclaimer"
목록·집계만 필요 → fields="brief"
"24~25년 ICFR 취약점" → year=[2024,2025] (다년 — coverage.years[])
"비상장 의견거절" → market="unlisted"
[Response]
Output market Y=코스피/K=코스닥/N=코넥스/E=비상장; fs_div KOREAN "연결"/"별도".
[Rules]
READ coverage.note FIRST — empty result over a non-ingested scope = "not seen", never "does not exist".
fs_div=both(default) → ≤2 rows/company; dedupe corp_code to count companies.
breakdown = baseline over year/market/fs_div only (other filters ignored); ≠ count.
KAM omission suspect: kam=false+kam_required=true+kam_none_declared=false (의견거절 excluded).
ICFR undetected: 연결 icfr.note only when 감사 expected but missing; else read expected_type.
Daily row cap per token or key.
| Name | Required | Description | Default |
|---|---|---|---|
| kam | No | Has 핵심감사사항(KAM) | |
| year | No | 결산 사업연도 (회계연도·fiscal year), NOT the 공시(제출)연도 — pass the user's year as-is, never subtract: '2025 사업보고서' → 2025. Convert ONLY when the user explicitly names the 공시연도: '2026년에 공시된 사업보고서' → 2025. Relative ('최근 N개년'·'작년'): count back from the latest PUBLISHED 사업연도 (사업보고서 filed ≤90 days after 결산기말) — for 12월 결산 last year from April, the year before last in Jan~Mar (e.g. if latest = FY2025 → 최근 5개년 = 2021~2025). 비12월 결산 (3·6·9월): the year its 결산기 STARTS (3월 결산 2025-04~2026-03 = 2025; get_financials calls it 2026). Array = multi-year query (e.g. [2024, 2025]): rows carry their own bsns_year; per-year coverage.years[]. | |
| limit | No | Cap on ROWS, not companies. Cut → truncated=true, count = full row count; deduped company count then a floor — narrow market·fs_div·asset_bucket until truncated=false. | |
| fields | No | Row width. full = every field incl. 본문 text (의견근거·강조·기타·계속기업, KAM 제목, ICFR 근거·취약점, applicability), ~4KB/row. brief = corp_name·corp_code·stock_code·bsns_year·market·fs_div·auditor·audit_opinion·going_concern·emphasis·other_matter·icfr{type,opinion}·kam_count·rcept_no, ~0.3KB/row — for list/count asks; once a company is picked, full or get_audit_report·get_internal_control. coverage·breakdown·count·truncated identical in both. | full |
| fs_div | No | Default both = 연결(CFS)+별도(OFS) as SEPARATE rows (의견·강조·KAM·ICFR held per report) → ≤2 rows/company; dedupe corp_code to count companies. | |
| market | No | Default all = 상장사 (kospi·kosdaq·konex by FY말 market); all never includes unlisted — query it separately. unlisted = FY말 market E: 비상장 사업보고서 filers + 상장사 years before 상장 or after 상장폐지. Servers without the 비상장 dataset: validation:market error, and all may still return those 상장사 E years. 외감 비상장사 filing only a 감사보고서: in neither — get_audit_profile per company. | |
| auditor | No | 감사인명 partial match (e.g. 삼정) | |
| opinion | No | 감사의견: unqualified=적정, qualified=한정, adverse=부적정, disclaimer=의견거절, modified=변형의견 (한정·부적정·의견거절). | |
| emphasis | No | Has 강조사항(EoM) | |
| industry | No | 업종: financial=금융 (KSIC 64~66: 은행·보험·금융지주…), non_financial=비금융; 주석 XBRL·ICFR 운영의무 thresholds differ. | |
| asset_bucket | No | 전기말 자산총액(별도) band = row label: gte_2tn=2조이상, gte_500bn=5천억이상 (<2조), gte_100bn=1천억이상 (<5천억), lt_100bn=1천억미만. | |
| icfr_opinion | No | 내부회계관리제도 의견: adverse=부적정, disclaimer=의견거절 (감사 의견거절 + 검토 검토결론 불표명 — split by row icfr.type), modified=변형 (≠ 적정). | |
| kam_required | No | This report had to carry KAM: 적용시기 (규모·연도·시장) met AND opinion ≠ 의견거절 (감사기준서 705 문단 29; 한정·부적정 still must). false = outside phase-in, or 의견거절 (row carries kam_exempt_reason) | |
| other_matter | No | Has 기타사항(OM) | |
| going_concern | No | 감사보고서 mentions 계속기업 불확실성 | |
| xbrl_required | No | 재무제표 주석 XBRL mandatory that year (적용시기) | |
| include_reference | No | Attach the 적용시기 참조표 (KAM·ICFR·XBRL 주석·자금부정통제 phase-in schedule, ~4.8KB) — only when 법령 근거 text is needed. | |
| kam_none_declared | No | 감사보고서 explicitly declares '보고할 핵심감사사항 없음' (kam_count=0 then normal); false = undeclared or unknown | |
| icfr_material_weakness | No | Has 내부회계관리제도 중요한 취약점 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description still adds substantial non-obvious behavior: coverage.note must be read before concluding a null result (empty ≠ nonexistent), fs_div=both yields up to two rows per company requiring corp_code dedupe, breakdown ignores non-baseline filters, and there is a daily row cap per token. These are exactly the traps that would cause a wrong answer, not restatements of 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?
The [Purpose]/[Usage]/[Response]/[Rules] headers front-load the essential framing and there is little filler. However, the [Rules] section is compressed into pseudo-formulas ("kam=false+kam_required=true+kam_none_declared=false") that trade readability for density, and the bilingual prose adds some scanning cost.
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 19-parameter search tool with no output schema, the definition carries most of the necessary burden: filter semantics, the brief/full row contents, output market letters (Y/K/N/E), fs_div KOREAN labels, and the null-result interpretation rule. The remaining gap is that the overall response envelope (coverage, breakdown, count, truncated, applicability) is only alluded to rather than described, so an agent must infer the shape of the result.
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 100%, so the baseline is 3; the description earns above that by adding cross-parameter meaning the schema does not carry — fields="brief" is the list/count path while full is for a picked company, year accepts an array for multi-year with per-year coverage.years[], and fs_div=both is a row-multiplication caveat rather than a simple enum. A few rules (e.g. the kam/ kam_required / kam_none_declared triple) are stated so telegraphically that they are hard to apply without re-reading 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 opening sentence states a specific verb and resource: it finds listed/unlisted companies by audit-report conditions *without* naming a company. It also carves out the sibling boundary explicitly — detail via get_audit_profile/get_internal_control, original text via get_audit_report — so an agent can route correctly without opening any schema.
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 [Usage] block gives four concrete natural-language-to-parameter mappings (opinion="disclaimer" + market="kospi", fields="brief" for list/count, year=[2024,2025] for multi-year, market="unlisted" for private filers), and [Purpose] names the alternatives for detail and full-text needs. When-to-use and when-to-go-elsewhere are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_disclosuresARead-onlyInspect
MyDART MCP의 search_disclosures 도구는 DART 공시 목록에서 접수번호(rcept_no)를 찾습니다 — download_document·get_attachments 진입점.
[Purpose]
사업보고서 섹션 데이터는 get_periodic_report, 동명 회사는 find_corp_code 로 corp_code 확정.
[Usage]
"삼성전자 최근 한 달 공시" → corp="삼성전자", days=30
"작년 유상증자 결정 전부" → preset="rights_offering", start="2025-01-01", end="2025-12-31"
"CB 발행만(매도·만기전취득 제외)" → preset="cb_issuance" (CB 관련 전부는 "cb")
[Response]
corp_cls: Y=코스피, K=코스닥, N=코넥스, E=기타(비상장).
report_nm [기재정정]/[첨부정정]/[첨부추가] prefix = 정정공시; [발행조건확정]=정정본(kept), [정정제출요구]=원본.
[Rules]
Always pass corp when a company is named — corp-less searches split the period (batch: by month), request budget 60; with corp: 1 request.
Counters nest: total_available ≥ total_fetched ≥ matched ≥ returned; matched > returned = cut by limit, incomplete=true = partial (see incomplete_note). collected_periods = the only ranges queried; counters scope to them, the rest is unchecked, not zero.
Preset batch drops 정정공시; page mode·bare all_pages keep them.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End date (default today) | |
| corp | No | 회사명/종목코드/corp_code. Omit = all companies; a batch then splits the period by month, spends up to 60 DART requests (incomplete=true when hit) and can take tens of seconds. With corp: 1 request, a few hundred ms. | |
| days | No | Trailing N days from today, used when start is omitted; out-of-range values clamp. Default by preset: 사업·감사 460 / 반기 280 / 분기 180 / 수시·일반 90. Longer windows: start/end. | |
| kind | No | 공시유형; omit = all types. Enum order = DART pblntf_ty A~J; that letter or the Korean name (정기공시…) also works. | |
| page | No | Page number (page mode = no preset, all_pages=false). Page mode returns raw DART rows; batch rows drop stock_code·rm and add event (주요사항), corrected (= a later 정정 exists), withdrawn. | |
| size | No | Page size (page mode) | |
| limit | No | Max rows returned in batch mode (preset or all_pages) | |
| start | No | Start date YYYY-MM-DD. Omitted = `days` back from today; set it for older filings. | |
| detail | No | 공시상세유형 (DART pblntf_detail_ty), narrower than kind: A001 사업보고서 · A002 반기 · A003 분기 · B001 주요사항보고서 · F001 감사보고서 · F002 연결감사보고서 … Not with preset. | |
| market | No | 법인구분 (DART corp_cls Y·K·N·E): kospi · kosdaq · konex · unlisted (기타). Omit or all = every market. | |
| preset | No | Batch filter; sets kind and collects every page. 주요사항보고 keys match the EXACT DART 보고 사유 (never a title substring) — one key per 사유 (cb_issuance · cb_treasury_resale …); group aliases capital_change · cb · bw · cps · bond_issuance · treasury · treasury_trust · restructuring · asset_deal · asset_transfer_etc · guarantee_debt · insolvency · overseas union several. large_holding_5pct = all 지분공시. | |
| all_pages | No | Batch-collect the whole period without a preset (same set as page mode, 정정공시 included); limit replaces page/size. | |
| final_only | No | One latest version per event: 원본 replaced by its latest 정정본 (정정공시 NOT excluded) — a duplicate-free set. Windowed by each event's LATEST version date: filed in window but corrected after end = absent. | |
| concurrency | No | Collector workers. A server-wide cap sets real concurrency, so raising this rarely helps — to cut latency set corp, narrow the period or lower limit. | |
| include_corrections | No | Include 정정공시 ([기재정정] etc.) in preset batch; off avoids 원본+정정 double count. correction_all forces true; ignored with final_only. Page mode and bare all_pages always include them. Latest-only: final_only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive profile, but the description goes well beyond them: request budget (60 without corp, 1 with), latency expectations, incomplete=true when the budget is hit, the nested counter semantics (total_available ≥ total_fetched ≥ matched ≥ returned), and the crucial caveat that collected_periods are the ONLY ranges queried so unqueried ranges are unchecked rather than zero. It also discloses that preset batch drops 정정공시 while page mode and bare all_pages keep them. Only gap: it never states the tool actually returns rows vs. just receipt numbers in each mode beyond the response-field notes.
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?
Front-loaded with the one-line purpose, then clearly sectioned [Purpose]/[Usage]/[Response]/[Rules], which makes it scannable despite length. It loses a point for duplicating schema content — the corp batch-vs-single-request tradeoff and the correction-handling rules are already spelled out in the corp and include_corrections parameter descriptions.
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 15 parameters, three enums, and no output schema, the description compensates by decoding return fields (corp_cls Y/K/N/E, report_nm [기재정정]/[발행조건확정]/[정정제출요구] prefixes) and by explaining how to interpret truncated or partial results via the counter nesting and incomplete_note. An agent has everything needed to call it and to reason about whether the result set is trustworthy.
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 100%, so the baseline is 3, but the description adds real semantics the schema does not: preset keys match the EXACT DART 보고 사유 rather than title substrings, one key per 사유, and which group aliases union several keys. It also explains the final_only/include_corrections interaction and the counter scoping rule that governs how to read limit-truncated results.
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 — finds rcept_no in the DART disclosure list — and immediately frames itself as the entry point to download_document and get_attachments. The [Purpose] block also names what it is NOT: get_periodic_report for periodic-report sections and find_corp_code for disambiguating company names, so an agent can pick it apart from siblings without opening schemas.
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?
Three concrete intent-to-parameter mappings ("삼성전자 최근 한 달" → corp + days=30, 작년 유상증자 → preset rights_offering with explicit dates, CB 발행만 → preset cb_issuance vs group alias cb) show exactly when to use which knob. Rules add a hard directive — always pass corp when a company is named — plus the cost consequence (60 requests, tens of seconds vs 1 request) that drives the choice.
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.
2 tool updates
- Changed
search_audit_findings1 field changed- removed
Input schema / requiredRemoved value: -[ - "year" -]
- Changed
search_disclosures2 fields changed- added
Input schema / properties / detailAdded value: +{ + "description": "공시상세유형 (DART pblntf_detail_ty), narrower than kind: A001 사업보고서 · A002 반기 · A003 분기 · B001 주요사항보고서 · F001 감사보고서 · F002 연결감사보고서 … Not with preset.", + "pattern": "^[A-J]\\d{3}$", + "type": "string" +} - added
Input schema / properties / marketAdded value: +{ + "description": "법인구분 (DART corp_cls Y·K·N·E): kospi · kosdaq · konex · unlisted (기타). Omit or all = every market.", + "enum": [ + "all", + "kospi", + "kosdaq", + "konex", + "unlisted" + ], + "type": "string" +}
Related MCP Connectors
Full-text search over FSS/FSC accounting supervision documents for Korean accounting professionals
Full-text search over K-IFRS/K-GAAP standards, Q&A and KASB/KICPA material for Korean accountants
Search company disclosures and financial statements from the Korean market. Retrieve stock profile…
DART — Korea's Data Analysis, Retrieval and Transfer System. The Korean equivalent of SEC EDGAR.…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to query Korean OpenDART electronic disclosure data — disclosures, financials, equity, and XBRL — through 15 consolidated tools, including insider-trading signals, accounting-risk scoring, Buffett-style quality checklists, and HWP/PDF attachment-to-Markdown conversion.1,292 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to search Korean corporate filings, financials, equity data, and XBRL from the OpenDART electronic disclosure system through 15 tools covering 83 APIs. Adds Buffett-style analyst frames for insider trading signals, accounting-risk scoring, and quality checklists, plus conversion of HWP/PDF attachments into Markdown.1,292 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to query Korean OpenDART disclosures through 15 consolidated MCP tools, covering filings, financials, ownership, XBRL, insider signals, accounting-risk scores, Buffett-style quality checks, and HWP/PDF attachment conversion to Markdown.1,292 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to query Korean DART electronic disclosures across 83 OpenDART APIs compressed into 15 tools, covering filings, financials, ownership, and XBRL with calculation verification. Adds Buffett-style analyst frames (insider signals, accounting risk scoring, quality checklists) and converts HWP/PDF attachments into Markdown.1,292 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.