{"name":"kr.eocpa/mydart","slug":"eocpa-mydart","title":"MyDART","description":"Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals","url":"https://mcp.market/server/eocpa-mydart","rating":null,"grade":"C","score":67,"certified":false,"status":"active","category":"finance","tags":["finance"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":6,"ok":6,"last_checked_at":"2026-09-21T00:30:51.783Z","last_ok_at":"2026-09-21T00:30:51.783Z","latency_ms":589},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://eocpa.kr/mydart","version":"0.36.0","remotes":[{"type":"streamable-http","url":"https://mydart.eocpa.kr/mcp","headers":[{"description":"OpenDART API key (free at https://opendart.fss.or.kr) or an eocpa token (https://eocpa.kr/token) — either kind, same header. Required for tool calls; discovery (tools/list) works without it.","isRequired":true,"isSecret":true,"name":"x-dart-api-key"}]}],"packages":[],"tools":[{"name":"download_document","description":"MyDART MCP의 download_document 도구는 공시 원문을 마크다운으로 읽고 검색합니다(heading·표 구조 보존). 사업보고서 ZIP 안의 감사보고서 선택 포함.\n\n[Purpose]\n- Full disclosure text; audit analysis (감사의견·KAM): get_audit_report.\n- 비상장 non-filers: the F 감사보고서 rcept IS the route to 재무제표·주석.\n- HWP·PDF attachments·sibling docs (정관·내부회계 운영실태보고서): get_attachments.\n  XBRL: get_financials(rcept_no).\n\n[Usage]\n1. \"이 사업보고서 원문 읽어줘\" → rcept_no=\"20260310002820\"\n2. \"연결 감사보고서 본문\" → documents[].role=consolidated_audit → doc_index\n3. \"본문이 잘렸어, 전체로\" → truncate_at=2000000\n4. \"원문에서 횡령 찾아줘\" → find=\"횡령\"\n\n[Response]\n- role: main_body / separate_audit / consolidated_audit / internal_control\n- documents[]: metadata only — content ONLY with all_docs=true\n\n[Rules]\n- A 사업보고서 ZIP holds MULTIPLE docs — 감사의견·KAM·내부회계 live in the\n  별도(_00760)/연결(_00761) sub-docs, not index 0: check documents[].role first.\n- find returns 표 단위 발췌 for EVERY doc in the ZIP, not content. 0 matches ≠\n  absent — 스캔 이미지 표는 get_attachments(mode=images).\n- If truncated=true, raise truncate_at (compare char_count).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"rcept_no":{"description":"14-digit 접수번호 (the rcept_no from search_disclosures). Hyphens and spaces are stripped.","type":"string","pattern":"^\\d{14}$"},"format":{"default":"markdown","description":"Output format. markdown=DART XML → 마크다운, raw=original XML, text=tags stripped (table structure is lost)","type":"string","enum":["markdown","raw","text"]},"doc_index":{"description":"Selects one 원문 XML inside the ZIP (0-based; 0=본문 when omitted). Use the index from the documents list. The 감사보고서 body is usually index 1~2 (별도/연결). An out-of-range value silently falls back to the main body WITH a note in `notes` — check it.","type":"integer","minimum":0},"all_docs":{"default":false,"description":"Convert every 원문 XML in the ZIP and return them as documents[] — the 사업보고서 본문 plus 별도/연결 감사보고서 in one call.","type":"boolean"},"truncate_at":{"description":"Max text length (the excess is cut). Default 300,000 chars; out-of-range values are clamped to the bound. With all_docs=true the budget is divided across the documents (the per-document share comes back as per_doc_truncate_at). Ignored when find is set (no content is returned).","type":"integer","minimum":1000,"maximum":2000000},"find":{"description":"Full-text search over EVERY 원문 XML in the ZIP (본문+별도/연결 감사보고서). Returns `find` (표 단위 발췌 bundles + 나머지 매치 위치 locations) INSTEAD of content — 전문을 나르지 않는다. Case-insensitive, 리터럴 매칭(정규식 아님 — `(주)카카오` 를 그대로 넣어도 된다). 0건이면 표기를 자간 띄운 형태(`핵 심 감 사 사 항`)로 한 번 더 찾는다. doc_index 를 함께 주면 그 문서 하나로 좁힌다(범위 밖이면 좁히지 않고 전 문서를 검색하고 notes 로 알린다 — 전문 조회의 index-0 폴백과 다르다: 잘못된 index 로 좁히면 답이 있는데 0건이 나간다). format=markdown 에서만 쓸 수 있다.","type":"string","minLength":1,"maxLength":200},"find_max_bundles":{"description":"Max 발췌 bundles (기본 5). 나머지 매치는 locations 로 위치만 나열된다. 바이트 예산(find_max_bytes)이 먼저 차면 이 수에 못 미칠 수 있다.","type":"integer","minimum":1,"maximum":20},"find_max_bytes":{"description":"발췌 본문 합계의 UTF-8 **바이트** 상한 (기본 12,000). 문자수가 아니라 바이트인 이유: 한글은 자당 3바이트라 '12,000자' 로 재면 응답이 36,000B 가 된다(실측). 단일 발췌가 이 값을 넘으면 표 행 단위로 잘리고 clipped=true 가 붙는다(제목행·구분행은 보존).","type":"integer","minimum":1000,"maximum":60000}},"required":["rcept_no"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"find_corp_code","description":"MyDART MCP의 find_corp_code 도구는 회사명·종목코드로 DART 법인 식별자(corp_code)의 후보를 확인합니다.\n\n[Purpose]\n- IMPORTANT: first call when a company's corp_code is unknown.\n- Also to disambiguate same-named companies.\n- ID resolution only — 업종·data location: get_company_profile; disclosure listings:\n  search_disclosures.\n\n[Usage]\n1. \"카카오\" → corp_code 획득 → 재무제표 조회(get_financials)\n2. \"삼성전자\" → corp_code 획득 → 임원 현황 조회(get_periodic_report)\n3. \"'동양' 들어가는 회사 후보 보여줘\" → query=\"동양\", limit=20\n4. \"005930이 어느 회사야?\" → query=\"005930\"\n\n[Response]\n- stock_code: 6-digit present = listed (common shares); empty/absent = unlisted.\n- count = rows returned (capped by `limit`), not the total match count. 0 hits adds `notes`.\n\n[Rules]\n- `results` is a similarity-ranked candidate array — do not assume the first item is the answer.\n- corp_code identifies the DART LEGAL ENTITY CODE, not the listing ticker. 우선주/ETF/ETN codes\n  have no mapping (보통주 codes only).\n- Common names may overflow the default `limit` — raise it when candidates look truncated.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"회사명 (한/영), 6-digit 종목코드, or 8-digit corp_code"},"limit":{"default":10,"description":"Max candidates to return (default 10, max 50)","type":"integer","minimum":1,"maximum":50}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_attachments","description":"MyDART MCP의 get_attachments 도구는 공시의 첨부파일 목록과 형제문서 본문·페이지 이미지를 다룹니다.\n\n[Purpose]\n- Attachment list + 형제문서 routing; body text = mode=text (뷰어 원문), 구조 보존은 download_document.\n- 자금부정통제 붙임·경영진 운영실태보고서 live here (mode=text; 붙임 = attachment_links[].retrieve).\n- Scan-only (도장·서명·스캔 서식): mode=images only.\n\n[Usage]\n1. 정관·영업보고서 본문 → list 로 dcm_no 확보 → dcm_no, mode=\"text\"\n2. 표가 이미지뿐이면 mode=\"images\" (뒷장 image_from, PDF 페이지 pages)\n\n[Response]\n- format: hwpx/hwp/pdf/docx/doc/xlsx/xls/zip/html/unknown\n- images: source=\"viewer\" or \"pdf\" — different field shapes.\n\n[Rules]\n- supported:false → unsupported_reason·suggestion·note·retrieve·next_step = the fallback route;\n  follow it verbatim.\n- No bulk sweeps — mass viewer calls bring DART IP bans.\n- Ladder: text (표 lossless) → empty·링크 껍데기 body → images → download_url.\n  Attachment files are never parsed server-side.\n- images returns pictures: OCR·판독 is the client's job, 1 image per capped call (image_from).\n- partial:true ⇒ section_errors[]; markdown is partial — 빈 곳 ≠ 사실 없음.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"rcept_no":{"description":"14-digit 접수번호 (separators are stripped automatically)","type":"string","pattern":"^\\d{14}$"},"dcm_no":{"description":"Target 문서번호(dcmNo). Defaults to the 본문 document. One 공시(rcept_no) carries, besides the 본문, sibling documents (감사보고서·내부회계관리제도운영보고서·영업보고서·정관 etc.) each with its own dcmNo; take sibling_documents[].dcm_no from a list result to read that document (list its attachments, or mode=text/images). A sibling's attachments are invisible without it — always list first, then pass sibling_documents[].dcm_no.","type":"string","pattern":"^\\d+$"},"mode":{"description":"list: the attachment list only — nothing is downloaded, so it is the cheap call. text: the document body as 마크다운 via the 뷰어 원문 (XML→HTML) path — it skips PDF conversion, so text and tables are lossless and it is hundreds of times lighter. The primary path for sibling documents (정관·영업보고서·운영보고서 etc.) and the route to take whenever body text is what you want. images: return embedded images (도장·스캔본·차트 and other raster that text cannot capture). With NO filename/index it takes the 뷰어 원본 JPEG route (manifest.source=\"viewer\": originals in document order, per-section eleId); with filename or index it scans THAT attachment PDF instead (source=\"pdf\": decoded PNGs, largest area first, with page numbers; pages narrows it). The two routes return different field shapes. There is no file-parsing mode: an attachment file itself is reached through download_url, never parsed server-side.","type":"string","enum":["list","text","images"],"default":"list"},"filename":{"description":"Exact filename of the attachment to scan, in images mode (no partial-match fallback). Giving it PICKS the PDF-scan route — omit both filename and index to get the document's 뷰어 임베드 원본 JPEG instead. An EXACT match is required; on failure the error lists the available names.","type":"string"},"index":{"description":"0-based index of the attachment to scan, in images mode (filename takes precedence). Like filename it picks the PDF-scan route; omit both to get the 뷰어 임베드 원본 JPEG.","type":"integer","minimum":0},"sections":{"description":"Which sections to fetch, in mode=\"text\" — the **sections[] array index** (0-based). NOT the eleId: in these documents eleId runs \"1\"..\"8\", so eleId happens to equal index+1 and is easy to confuse. e.g. to read the 3rd and 6th entries of sections[], pass [2, 5]. Unset = the previous behavior (the first 24 sections, all fetched). [] = 목차 only — zero body calls, sections[] carries just the titles (md_chars all 0); read them, then call again with the indices you want (2-pass). The pick happens BEFORE the 24-node ceiling, so it reaches sections 25~158 of a 사업보고서 본문 that are otherwise unreachable at any truncate_at. Max 24 picks; out-of-range indices are dropped with a note in `notes` (all-out-of-range is rejected). In this mode every sections[] entry carries its own index — check it against what you asked for (an off-by-one that stays in range otherwise returns a neighbouring section silently).","maxItems":24,"type":"array","items":{"type":"integer","minimum":0}},"truncate_at":{"description":"Max length of the mode=text 마크다운 (default 100,000 chars; out-of-range values are clamped to the bound)","type":"integer","minimum":1000,"maximum":2000000},"pages":{"description":"Page filter for images mode (1-based, PDF-scan path only). e.g. \"3\", \"1-5\", \"2,4,7-9\". It narrows pages WITHIN the attachment picked by filename/index, so it requires one of them. Unset on a filename/index call = a scan of only that PDF's FIRST 40 pages. At most 2000 pages per call — a wider span is rejected, not silently trimmed.","type":"string"},"max_images":{"default":12,"description":"Max images returned in images mode (largest area first). Default 12.","type":"integer","minimum":1,"maximum":40},"image_from":{"default":0,"description":"Start offset in document order for the 뷰어 원본 JPEG route (0-based, default 0). Channels with a response cap fit only ~1 scan page per call, so this is how you reach later pages — e.g. the 자금부정통제 표 is usually the 2nd page of an 운영실태보고서, so image_from=1. The response carries `from` and a note telling you the next offset. PDF-scan route uses pages instead.","type":"integer","minimum":0},"min_dimension":{"default":24,"description":"In images mode, an image whose shorter side is under this many pixels is treated as decoration (아이콘·괘선) and dropped. Default 24. Lower it to catch small 도장/서명. It filters the PDF-scan path only (source:\"pdf\") — 뷰어 원본 JPEG images pass through unfiltered.","type":"integer","minimum":1}},"required":["rcept_no"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"get_audit_profile","description":"MyDART MCP의 get_audit_profile 도구는 감사인·감사의견·업무수행이사에 감사보수·감사투입시간·실사수행내역·외부조회 실시여부 등 외부감사 실시내역을 한 표로 요약해 반환합니다.\n\n[Purpose]\n- Fact/figure asks: \"who audited, at what fee, how was the 실사\".\n- 강조사항 comes structured (emphasis); full 의견근거·KAM·강조 text: get_audit_report.\n- ICFR detail: get_internal_control; 계속기업 quant: get_going_concern.\n- Company lists (모집단): search_audit_findings.\n\n[Usage]\n1. \"삼성전자 2024 감사보수·비감사보수\" → corp=\"삼성전자\", year=2024\n2. \"재고실사 입회했는지 빠르게만\" → corp=\"…\", year=2024, light=true\n\n[Response]\n- fees `_m` suffix = 백만원.\n- opinion domain: 적정/한정/부적정/의견거절.\n\n[Rules]\n- data_available=false = the filing was not found (e.g. not yet filed) — do NOT read null fields\n  as \"confirmed absent\".\n- audit_only=true (F 단독공시, unlisted) → fees are structurally absent (사업보고서 전용), not a\n  defect.\n- For 연결/별도 split read kam.by_fs_div, not kam.topics (representative fallback).\n- ALWAYS read applicability.guidance[] — regime notes and next-tool routing.\n- 감사인 교체/연속연수 are NOT returned — call per year and compare auditor.name.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code"},"year":{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward).","type":"integer","minimum":2015},"refresh":{"default":false,"description":"Bypass the cache and re-collect","type":"boolean"},"light":{"default":false,"description":"Skip 원문 parsing (structured JSON APIs only — omits 실사, the fs_div split, and fees.headcount, which comes from the 실사 source; fast)","type":"boolean"}},"required":["corp","year"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_audit_report","description":"MyDART MCP의 get_audit_report 도구는 감사보고서 본문을 문단 단위로 구조화해 문단별 원문 텍스트를 반환합니다 — 감사의견·감사의견근거·KAM·강조사항·기타사항·계속기업가정불확실성.\n\n[Purpose]\n- For verbatim 감사보고서 narrative paragraphs. Structured fact summaries (보수·실사 등):\n  get_audit_profile.\n- ICFR detail and its fit with the 재무제표 감사의견: get_internal_control.\n\n[Usage]\n1. \"LG에너지솔루션 2024 KAM 문단 전문\" → corp=\"LG에너지솔루션\", year=2024\n2. \"삼부토건 FY2024 별도 의견거절 근거 원문\" → corp=\"삼부토건\", year=2024, fs_div=\"OFS\"\n3. 발견사항만 → sections=\"summary\"; 잘리면 truncate_at 상향\n\n[Response]\n- sections[].key = KSA700 elements (list in sections arg). opinion: 적정/한정/부적정/의견거절.\n- fs_label: 연결/별도. source_note = F 단독공시, correction_note = 정정 채택/생략.\n\n[Rules]\n- kam.count=0 with none_declared: declared \"없음\" = normal; undeclared = suspect omission.\n- Unlisted (F 단독공시) legitimately lacks KAM·업무수행이사 (see source_note).\n- 재무제표·주석 FIGURES: download_document.\n- body_omitted:true = section EXISTS, body not requested (≠ absent) — re-call with sections.\n- internal_control = verdict only; ICFR 정본은 get_internal_control.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"description":"회사명/종목코드/corp_code (required when rcept_no is absent). corp+year auto-locates the 사업보고서, falling back to the 감사보고서 F 단독공시 for unlisted companies; results on that path are cached","type":"string"},"year":{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward).","type":"integer","minimum":2015},"rcept_no":{"description":"접수번호 given directly (instead of corp/year) — parses that filing live (never cached) and returns resolved/applicability as null. A 감사보고서제출(F) 단독공시 works too.","type":"string","pattern":"^\\d{14}$"},"fs_div":{"description":"both (default — 연결+별도 both)/연결(CFS)/별도(OFS). Aliases consolidated/separate·연결/별도 also accepted. With both, reports[] holds 2 entries — reading only the first drops an axis.","type":"string","enum":["both","CFS","OFS"]},"sections":{"description":"Which section BODIES to include. full (default) = every section. summary = the paragraphs that carry a finding — 의견(opinion)·KAM·강조(emphasis)·기타(other_matter)·계속기업(going_concern), plus 의견근거(basis) ONLY when the opinion is not 적정 (for 적정 that paragraph is boilerplate: p50 575 bytes with almost no variance across 27,067 reports; for 한정/부적정/의견거절 it is the reason itself, 2.5~3.1x longer). Or pass an explicit key array, e.g. [\"opinion\",\"kam\"]; [] = 목차만. Keys: opinion·basis·going_concern·kam·emphasis·other_matter·other_information·mgmt_resp·auditor_resp·other_reporting. Unselected sections are NOT dropped — they stay as {key, heading, char_count, body_omitted:true} so you can re-request them. The structured fields (opinion·kam.matters titles·emphasis·other_matters·going_concern_mentioned) are ALWAYS returned regardless of this argument.","anyOf":[{"type":"string","enum":["full","summary"]},{"maxItems":10,"type":"array","items":{"type":"string","enum":["opinion","basis","going_concern","kam","emphasis","other_matter","other_information","mgmt_resp","auditor_resp","other_reporting"]}}]},"truncate_at":{"description":"Max length per section body (default 8,000 chars; the excess is cut, out-of-range values are clamped to the bound). On truncated=true check char_count and re-call with a higher value. Applies only to sections whose body is included — see `sections`.","type":"integer","minimum":500,"maximum":500000},"refresh":{"default":false,"description":"Bypass the cache and re-collect (corp+year path only)","type":"boolean"}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_company_profile","description":"MyDART MCP의 get_company_profile 도구는 기업개황(업종·대표자·결산월·상장구분)과 데이터 위치(data_location)를 조회합니다.\n\n[Purpose]\n- Basics + routing check before 재무·감사 calls on unfamiliar (esp. 비상장) companies.\n- 감사인·감사의견·감사보수: get_audit_profile; name ambiguity: find_corp_code.\n\n[Usage]\n1. \"카카오는 뭐 하는 회사야?\" → corp=\"카카오\"\n2. \"교보생명 FY2024 재무는 어디서 봐?\" → corp=\"교보생명\", year=2024\n3. \"종목코드 068270 기업 개황\" → corp=\"068270\"\n\n[Response]\n- data_location.filing_tier: listed(financials=JSON API) / listed_konex(NOT in structured financial\n  APIs — financials live in 사업보고서 원문) / unlisted_reporting / audit_only(financials+notes live\n  in 감사보고서 F 단독공시 원문) / no_disclosure_found / unknown\n- company.corp_cls: Y=코스피/K=코스닥/N=코넥스/E=기타(비상장). acc_mt = 결산월.\n\n[Rules]\n- Route follow-up calls by data_location: audit_only → get_financials returns [013], open\n  f_separate_rcept via download_document instead. listed_konex → empty get_financials is\n  NORMAL, do not retry.\n- provisional=true (year omitted) is tentative — never conclude 비외감 from no_disclosure_found.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code"},"year":{"description":"회계연도 that applicability.data_location (where 재무·감사 data lives) is judged against. Defaults to the latest (marked 잠정). Matters only for 비상장사 — a 상장사 is always 사업보고서(JSON), so it is reported as listed without probing. For non-December closers this year follows the 시작연도 convention shared with the audit tools, while the financial JSON tools (get_financials 등) address the same fiscal period as year+1 — the response's fiscal_year_note spells the mapping out.","type":"integer","minimum":2015}},"required":["corp"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_corporate_event","description":"MyDART MCP의 get_corporate_event 도구는 주요사항보고서 자본·지배구조 이벤트 36종(증자·감자·CB/BW/EB·자기주식·합병/분할 등)과 5%룰·임원 지분공시를 조회합니다.\n\n[Purpose]\n- \"Who raised/cut stakes, when\": event_type=\"holdings\" (5%룰 대량보유·임원/주요주주 소유보고).\n- 결정의 후속 발행·합병 조건(공모가·인수인): get_registration_statement.\n- List skims: search_disclosures; 사업보고서 snapshots (최대주주·주식총수): get_periodic_report.\n\n[Usage]\n1. \"카카오 최근 3년 자본 조달 흐름\" → corp=\"카카오\", mode=\"timeline\"\n2. \"이 회사 CB 발행한 적 있어?\" → corp=\"…\", event_type=\"cb_issuance\"\n3. \"자사주 취득·처분 2020년부터\" → event_type=[\"treasury_acquisition\",\"treasury_disposal\"],\n   start=\"2020-01-01\"\n\n[Response]\n- date = filing date (rcept_dt); event dates (이사회 결의일 등) are in raw row fields.\n- 지분공시: total_count = all-time cumulative, filtered_count = in-period (DART takes no\n  dates — filtered client-side).\n\n[Rules]\n- Empty timeline ≠ no events — default set = capital events only (name event_type for more);\n  sections_meta may carry per-endpoint errors.\n- event_type_counts is pre-truncation (limit cuts timeline only).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code"},"mode":{"default":"single","description":"single: query one event_type. timeline: query the 자본 관련 events in parallel (25 types by default) and merge them into one date-descending list","type":"string","enum":["single","timeline"]},"event_type":{"description":"38 selectable events (36 주요사항 + 지분공시 2종) — **a single string OR an array**. A string queries that one event (mode=single); an array queries them in parallel and merges them into one date-descending timeline (mode switches to timeline automatically). When unset in timeline mode, every 자본 관련 event (capital=true) is selected; 소송·부도·회생·해외상장·지분공시 are NOT in that default set, so name them here. Group aliases expand to their members — 'capital' (자본거래 25종, the timeline default) and 'holdings' (지분공시 2종). The legacy key `event_types` is accepted.","anyOf":[{"type":"string","enum":["major_holding_5pct","executive_holding","default_occurrence","business_suspension","rehabilitation_filing","dissolution_cause","bank_management_start","bank_management_stop","litigation","rights_offering","bonus_issue","rights_bonus_combo","capital_reduction","cb_issuance","bw_issuance","eb_issuance","cocobond_issuance","treasury_acquisition","treasury_disposal","treasury_trust_contract","treasury_trust_cancel","stock_exchange","company_split_merger","company_split","company_merger","asset_transfer_etc","tangible_asset_transfer","tangible_asset_acquisition","other_corp_stock_transfer","other_corp_stock_acquisition","business_transfer","business_acquisition","bond_with_stock_right_acquisition","bond_with_stock_right_transfer","overseas_listing_decision","overseas_delisting_decision","overseas_listing","overseas_delisting"]},{"minItems":1,"type":"array","items":{"type":"string","enum":["major_holding_5pct","executive_holding","default_occurrence","business_suspension","rehabilitation_filing","dissolution_cause","bank_management_start","bank_management_stop","litigation","rights_offering","bonus_issue","rights_bonus_combo","capital_reduction","cb_issuance","bw_issuance","eb_issuance","cocobond_issuance","treasury_acquisition","treasury_disposal","treasury_trust_contract","treasury_trust_cancel","stock_exchange","company_split_merger","company_split","company_merger","asset_transfer_etc","tangible_asset_transfer","tangible_asset_acquisition","other_corp_stock_transfer","other_corp_stock_acquisition","business_transfer","business_acquisition","bond_with_stock_right_acquisition","bond_with_stock_right_transfer","overseas_listing_decision","overseas_delisting_decision","overseas_listing","overseas_delisting"]}}]},"start":{"description":"Start date (YYYY-MM-DD / YYYYMMDD). Defaults to 3 years ago — an omitted bound is flagged as period.defaulted:true in the response","type":"string"},"end":{"description":"End date (YYYY-MM-DD / YYYYMMDD). Defaults to today","type":"string"},"limit":{"default":100,"description":"Cap on timeline rows returned (default 100, date descending). The excess is cut and flagged via truncated=true, with total_events carrying the real count — a company with frequent 자본거래 yields hundreds over a 3-year window. Narrowing the period is more precise.","type":"integer","minimum":1,"maximum":2000}},"required":["corp"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_financials","description":"MyDART MCP의 get_financials 도구는 매출·영업이익·순이익·자산/부채/자본 등 재무수치를 조회합니다 — 재무 질문 대부분은 이걸로 충분합니다.\n\n[Purpose]\n- 재무제표 figures start here. corp+year = LATEST filing (정정 반영); rcept_no = that filing\n  AS FILED (재작성 전후 대조·합산 검증 — 구 get_xbrl).\n- 사업보고서 prose: get_periodic_report; 부실징후(계속기업): get_going_concern.\n\n[Usage]\n1. \"삼성전자 2025년 매출·영업이익\" → corp=\"삼성전자\", year=2025\n2. \"삼성전자와 SK하이닉스 실적 비교\" → corp=[\"삼성전자\",\"SK하이닉스\"]\n3. \"이 공시본 그대로 전체\" → rcept_no=\"…\", sj_div=[\"BS\",\"IS\",\"CIS\",\"CF\",\"SCE\"]\n\n[Response]\n- Row keys: sj_div, account_nm, thstrm_amount(당기)/frmtrm_*(전기)/\n  bfefrmtrm_*(전전기)/thstrm_add_amount(누계). Amounts are STRINGS.\n- full: total_count=pre-filter, count=post-filter. rcept_no adds validations.\n\n[Rules]\n- Quarterly/half IS·CIS·CF rows: CUMULATIVE = thstrm_add_amount, thstrm_amount = that quarter\n  alone (half-value trap — period_basis explains). BS rows: thstrm_amount only.\n- Cross-check the periods legend (전기/당기 off-by-one) and year_defaulted.\n- no_data is routing, not an error — follow next_step (retry is futile).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"description":"Company — **a single string OR an array** (회사명·종목코드·corp_code). With scope=summary: 1 (single) or 2+ (multi-company comparison). scope=full takes EXACTLY 1 — give 2 or more and only the first is returned, the rest are dropped (there is no multi-company full-statement API) and the drop is reported in `notes`. Compare several companies with scope=summary. A comma list (\"삼성전자,SK하이닉스\") or a bare number (259630) is absorbed too; the legacy key `corps` is accepted. Names/codes that fail to resolve are dropped with a note as long as at least one resolves (all-unresolved still errors). Omit when querying one specific filing by rcept_no instead.","anyOf":[{"type":"string","minLength":1},{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}]},"rcept_no":{"description":"14-digit 접수번호 — serves that filing AS FILED (구 get_xbrl 흡수). corp+year serves the LATEST version instead; the two can differ after a [기재정정]. **연차(사업보고서) rcept 전용** — 분·반기 XBRL 은 기간 구조(누계·단독)가 달라 corp+report 로 조회하세요(no_data 가 라우팅). Accepts fs_div·sj_div (구 sections 는 sj_div 로 흡수); corp·year·scope must be omitted. Adds 합산 검증(validations) to the response.","type":"string","pattern":"^\\d{14}$"},"year":{"description":"결산 사업연도 (회계연도). When omitted, the most recently PUBLISHED 사업연도 is selected automatically — this absorbs the validation error that used to occur when the caller left year out for a question that never named a year. Confirm the year actually used via year/year_defaulted in the response.","type":"integer","minimum":2015},"report":{"default":"annual","description":"q1/half/q3/annual","type":"string","enum":["q1","half","q3","annual"]},"scope":{"description":"summary (default): 주요계정, 8~10 rows (fast). full: the whole 재무제표 (BS/IS/CF/CIS/SCE), hundreds~1k rows","type":"string","enum":["summary","full"]},"fs_div":{"description":"With scope=full, selects 연결(CFS)/별도(OFS) (default CFS). The response echoes the basis ACTUALLY used, not the requested one — a CFS→OFS auto-fallback is flagged by fs_div_note. Ignored by scope=summary — summary responses carry no top-level fs_div because consolidation is per-row there. Aliases consolidated/separate·연결/별도 also accepted.","type":"string","enum":["CFS","OFS"]},"sj_div":{"description":"With scope=full, filters 재무제표 종류 (when unset: BS+IS+CIS — a company using the '단일 포괄손익계산서' presentation reports 손익 in CIS only, not IS, so CIS is included by default). BS=재무상태표, IS=손익계산서, CF=현금흐름표, CIS=포괄손익계산서, SCE=자본변동표. To get everything, state [\"BS\",\"IS\",\"CF\",\"CIS\",\"SCE\"] explicitly. A bare string (\"BS\") or comma list (\"BS,IS\") is absorbed into an array.","minItems":1,"type":"array","items":{"type":"string","enum":["BS","IS","CF","CIS","SCE"]}},"format":{"description":"REMOVED (구 get_xbrl) — any value is rejected. markdown/markdown_full → items[] replaces them (omit this arg); raw → discontinued.","type":"string"}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_going_concern","description":"MyDART MCP의 get_going_concern 도구는 계속기업가정 관련 위험을 정량 재무지표와 감사보고서 언급 여부의 교차로 판정합니다.\n\n[Purpose]\n- 계속기업 risk — esp. \"figures risky, 감사인 silent\" mismatches.\n- Lists: search_audit_findings; figures: get_financials; 문단 원문: get_audit_report.\n\n[Usage]\n1. \"이스타코 2024 계속기업 위험 있어?\" → corp=\"이스타코\", year=2024\n2. \"별도 기준 정량 점검\" → corp=\"…\", year=2024, fs_div=\"OFS\"\n\n[Response]\n- flags.consecutive_op_loss = NUMBER of 연속 영업손실 years (not a bool); others bool|null.\n- grade: 판정불가(no data)/양호(0)/주의(1~2)/경계(3~4)/위험(5+)\n- cross_check.code: both/quant_only/text_only/none/insufficient_data/quant_unavailable/report_unavailable\n\n[Rules]\n- NEVER read text.going_concern_mentioned null (report not secured = unknown) as false (checked, no mention).\n- quant_only covers TWO cases — risky figures with no mention confirmed, OR with report not secured; distinguish via going_concern_mentioned (false vs null).\n- grade \"판정불가\" is not \"양호\". flags null = account not secured, not false.\n- Response fs_div is post-fallback — a CFS request may return OFS.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code"},"year":{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward).","type":"integer","minimum":2015},"fs_div":{"description":"연결(CFS)/별도(OFS), default CFS. Falls back to 별도 automatically when 연결 is absent (the response fs_div reports the basis actually used). Aliases consolidated/separate·연결/별도 also accepted.","type":"string","enum":["CFS","OFS"]},"refresh":{"default":false,"description":"Bypass the cache and re-collect","type":"boolean"}},"required":["corp","year"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_internal_control","description":"MyDART MCP의 get_internal_control 도구는 '감사인'의 내부회계관리제도(ICFR) 감사/검토 보고서를 조회합니다 — 구분·의견·중요한 취약점 여부.\n\n[Purpose]\n- ICFR 의견·취약점 vs 재무제표 감사의견; 취약점 lists: search_audit_findings.\n- 자금부정통제·경영진 내부회계관리제도 운영실태보고서: not here → get_attachments\n  (사업보고서 rcept, mode=list→dcm_no→mode=text, scans=images; no rcept:\n  search_disclosures preset='annual_report').\n- Structured facts: get_audit_profile; full text: get_audit_report.\n\n[Usage]\n1. \"카카오페이 2024 내부회계 의견\" → corp=\"카카오페이\", year=2024\n2. \"연결 기준만\" → corp=\"…\", year=2024, fs_div=\"CFS\"\n\n[Response]\n- opinion domain: 적정/부적정/의견거절 — NO '한정'. 검토(review_or_audit)의 의견거절 = 범위제한에\n  따른 검토결론 불표명.\n\n[Rules]\n- reports is an ARRAY — both gives up to 2 entries (연결·별도).\n- present=false is usually out-of-scope (read the note), not missing data; an empty CFS entry is normal.\n- Never conflate a review's 의견거절 with an audit's — check review_or_audit.\n- 자금부정통제 (FY2025~ mandatory, FY2024 optional)·시정계획 = 경영진 운영실태보고서 — see\n  management_operation_report.steps (applicable=false = F 단독공시: no report exists).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code"},"year":{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward).","type":"integer","minimum":2015},"fs_div":{"description":"both (default — 연결+별도 both)/연결(CFS)/별도(OFS). ICFR normally exists for 별도(OFS) only; 연결(CFS) ICFR 감사 applies only to 전기말 별도자산 2조↑ filers from FY2023. 별도(OFS) falls back to a standalone ICFR 공시 when the 감사보고서 embeds none, while 연결(CFS) never falls back. Aliases consolidated/separate·연결/별도 also accepted.","type":"string","enum":["both","CFS","OFS"]},"refresh":{"default":false,"description":"Bypass the cache and re-collect","type":"boolean"}},"required":["corp","year"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_periodic_report","description":"MyDART MCP의 get_periodic_report 도구는 사업보고서 세부 섹션 28종을 정형 데이터로 조회합니다 — 한 섹션 또는 여러 섹션 동시.\n\n[Purpose]\n- Section tables: 배당·자기주식·최대주주·소액주주·임원보수·회계감사인·회사채 미상환 등.\n- 재무제표 figures: get_financials. auditor_opinion is one word — KAM·내부회계·강조사항:\n  get_audit_profile / get_audit_report.\n\n[Usage]\n1. \"삼성전자 2025년 배당 내역\" → corp=\"삼성전자\", year=2025, report_type=\"dividends\"\n2. \"카카오 최대주주가 누구야\" → corp=\"카카오\", report_type=\"shareholders\"  (year 생략 = 최신)\n\n[Response]\n- Amounts are STRINGS. Section status: 000 성공 / 013 무자료.\n- periods legend maps 당기/전기/전전기 → fiscal years — cite 기수 only after reading it.\n\n[Rules]\n- Non-December closer: quote fiscal_year_note verbatim — one year off vs the audit tools.\n- ARRAY: per-element status (success·013·error mix); all-013 flips to { mode:\"no_data\", … }.\n- Listed [013] ≈ legitimate absence (no 배당·자기주식, no eligible 개인별 보수), not failure.\n- 개인별 보수 2종은 2026-05 서식 개정으로 구판↔V2 이원 — 도구가 자동 라우팅(endpoint·\n  compensation_format 표시). V2 는 1인당 3행(당기·전기·전전기)이라 합계는 fscl_year=\"당기\"만,\n  주식기준보상 세부는 stk_bsd_cmpn.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code"},"year":{"description":"결산 사업연도 (회계연도) — the FISCAL year, NOT the filing year. When omitted, the most recently PUBLISHED year is selected automatically, based on 결산월(acc_mt) and report type. Confirm the year actually used via year/year_defaulted in the response.","type":"integer","minimum":2015},"report":{"default":"annual","description":"Report type","type":"string","enum":["q1","half","q3","annual"]},"max_items":{"default":150,"description":"Cap on rows returned per section (default 150). The excess is cut and flagged via truncated=true, and total_count then carries the real row count — this keeps responses from bloating on row-heavy, prose-heavy sections such as 임원현황·타법인출자·채무증권.","type":"integer","minimum":1,"maximum":2000},"report_type":{"anyOf":[{"type":"string","enum":["largest_shareholder","largest_shareholder_changes","minority_shareholders","total_stocks","executives","employees","outside_director_changes","executive_compensation_total","executive_compensation_individual","individual_pay_top5","unregistered_executive_comp","director_total_comp_approval","director_total_comp_by_type","auditor_opinion","audit_service_contract","non_audit_service_contract","capital_increase_decrease","dividends","treasury_stock","private_placement_fund_use","public_offering_fund_use","other_company_investment","debt_securities_issuance","cp_unredeemed","short_term_bond_unredeemed","corp_bond_unredeemed","hybrid_capital_unredeemed","contingent_capital_unredeemed"]},{"minItems":1,"type":"array","items":{"type":"string","enum":["largest_shareholder","largest_shareholder_changes","minority_shareholders","total_stocks","executives","employees","outside_director_changes","executive_compensation_total","executive_compensation_individual","individual_pay_top5","unregistered_executive_comp","director_total_comp_approval","director_total_comp_by_type","auditor_opinion","audit_service_contract","non_audit_service_contract","capital_increase_decrease","dividends","treasury_stock","private_placement_fund_use","public_offering_fund_use","other_company_investment","debt_securities_issuance","cp_unredeemed","short_term_bond_unredeemed","corp_bond_unredeemed","hybrid_capital_unredeemed","contingent_capital_unredeemed"]}}],"description":"28 sections — **a single string OR an array** (an array is collected in parallel and returned as sections[]). Families: 주주 4 (largest_shareholder etc.) / 임직원 3 (executives etc.) / 보수 6 (executive_compensation_* etc.) / 회계감사 3 (auditor_opinion etc.) / 자본 3 (dividends·treasury_stock etc.) / 자금사용 2 (*_fund_use) / 타법인출자 1 / 채무증권 6 (*_unredeemed etc.). See the enum list for exact value names (the name IS the meaning). Group aliases expand to their members too — 'shareholders' (주주 4) and 'executive_compensation' (보수 6)."}},"required":["corp","report_type"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_registration_statement","description":"MyDART MCP의 get_registration_statement 도구는 증권신고서 주요정보 6종 — 모집·매출 조건, 인수인, 자금 사용목적, 합병·분할 조건을 정형 JSON 으로 조회합니다.\n\n[Purpose]\n- Filed terms of a 증권신고서: 공모가액·인수인·자금의사용목적·합병비율·주식매수청구권.\n- Board decision: get_corporate_event / listing scan: search_disclosures(kind=\"issuance\") / narrative (투자위험요소): download_document.\n\n[Usage]\n1. \"대한항공 유상증자 조건\" → corp=\"대한항공\", statement_type=\"equity\"\n\n[Response]\n- filings[] = one per 신고서(rcept_no), newest first. sections: general·securities·underwriters·fund_use·sellers·put_right·issued_securities·parties.\n- date = 접수일 (정정본: 정정 접수일, may fall outside window). Values are raw strings; '-'(해당없음) fields omitted.\n\n[Rules]\n- Only latest 정정본 is returned once corrected — original terms not included (original rcept: search_disclosures → download_document).\n- Withdrawn filings are unmarked — confirm via 철회신고서·증권발행실적보고서.\n- No data ≠ not issued: 사모·일괄신고서·소액공모 out of scope. Per-type status in sections_meta.\n- fetch_failed/truncated_note types mean \"unconfirmed\", not \"none\" — re-query that type.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"type":"string","minLength":1,"description":"회사명/종목코드/corp_code — DS006 은 corp_code 필수라 회사 없는 전수 조회는 불가"},"statement_type":{"description":"신고서 종류 — 단일 값 또는 배열, **미지정 시 6종 전부 병렬 조회**(DART 6콜 고정). equity=지분증권(유상증자·IPO) / debt=채무증권(회사채) / depositary=증권예탁증권(DR) / merger=합병 / stock_exchange=주식의포괄적교환·이전 / division=분할. 묶음 별칭 'offering'(공모 3종)·'restructuring'(구조조정 3종)과 한글명(회사채·합병·분할 등)도 수용","anyOf":[{"type":"string","enum":["equity","debt","depositary","merger","stock_exchange","division"]},{"minItems":1,"type":"array","items":{"type":"string","enum":["equity","debt","depositary","merger","stock_exchange","division"]}}]},"start":{"description":"조회 시작일(YYYY-MM-DD / YYYYMMDD) — **신고서 최초접수일** 기준. 기본값은 데이터 하한인 2015-01-01(전기간)이며 생략 시 period.defaulted:true. 증권신고서는 드문 이벤트라 창을 좁히면 오히려 놓친다 — DS006 은 페이징이 없어 창을 넓혀도 호출 비용이 같다","type":"string"},"end":{"description":"조회 종료일(YYYY-MM-DD / YYYYMMDD). 기본 오늘","type":"string"},"limit":{"description":"반환할 신고서 건수 상한(rcept_no 단위, 접수일 최신순 — 기본 10). 초과분은 잘리고 truncated=true·total_filings 로 표시된다. 인수인 그룹이 신고서당 수십 행이라 행이 아니라 신고서 단위로 자른다","type":"integer","minimum":1,"maximum":100}},"required":["corp"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_usage_stats","description":"MyDART MCP의 get_usage_stats 도구는 도구 사용량 집계를 반환합니다 — 어떤 도구가 얼마나 쓰였는지.\n\n[Purpose]\n- Per-tool call counts·popularity·latency·error rate·cache hits, plus daily trends.\n\n[Usage]\n1. \"사용량 통계 보여줘\" → {}  (default 30 days)\n2. \"최근 90일 도구별 순위\" → days=90\n3. \"전체 기간 누적\" → days=0\n\n[Response]\n- Common: { period, overview:{total_calls, unique_users, error_rate},\n  by_tool:[{tool, calls, errors, avg_ms, cache_hits, cache_hit_rate, share_pct}], by_day[] }\n- Operator identity (local stdio, or the HTTP key matching the server operator's) additionally\n  gets by_company·users·viewer — decided by requester identity, NOT selectable by parameter.\n\n[Rules]\n- public responses have no by_company / per-user detail — do not promise them to general callers.\n- Local stdio may show total_calls>0 with unique_users=0 (single local user — not a contradiction).\n- error_rate is a 0~1 decimal; share_pct is a percentage — different units.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"days":{"default":30,"description":"Trailing window in days. 0 = the entire retained period.","type":"integer","minimum":0,"maximum":3650}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_valuation_data","description":"MyDART MCP의 get_valuation_data 도구는 가치평가 데이터(시장 시계열·WACC·유사회사)를 kind 로 골라 조회합니다.\n\n[Purpose]\n- 평가기준일 시세·β checks, WACC build-up, peer comps.\n- Evidence, not adoption — the 평가자 decides; all components overridable.\n- 재무수치: get_financials; 업종(KSIC)·시장구분: get_company_profile.\n\n[Usage]\n1. \"에스에프에이 최근 1년 주가\" → kind=\"market\", corp=\"에스에프에이\"\n2. \"반도체장비 업종 피어 멀티플\" → kind=\"peers\", ksic=\"29271\"\n\n[Response]\n- Units: *_pct = annual %, but mrp·srp·tax_rate = decimals (0.08 = 8%); close = 무수정주가, flt_rt = 등락률 %.\n- wacc_pct is null when 신용등급 미공시 while 차입 exists — nothing is assumed.\n\n[Rules]\n- Compute market returns from flt_rt, never by differencing close (breaks at 액면분할·병합).\n- aggregates n differs per metric (EBITDA often missing) — never quote a mean without n.\n- peers is a KSIC candidate list the 평가자 curates; too few peers relax the prefix 5→4→3 — prefix_depth_used shows 업종 동질성 dilution.\n- Cite the response's source·as_of verbatim (조서 정합) — 금투협 시가평가·한공회 가이던스·ECOS·금융위 시세.\n- ALWAYS read notes[] — 강등·폴백·주의 accumulate there.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"kind":{"type":"string","enum":["market","wacc","peers"],"description":"What to fetch — market=시세·지수·금리 time series / wacc=WACC components + CAPM build-up / peers=동업종(KSIC) peer multiples·무차입β·자본구조. Each kind takes a different argument set; an argument that does not apply is reported as an error naming every argument that kind DOES accept, never silently ignored. An unrecognized key is rejected the same way (additionalProperties:false), so a typo surfaces instead of being dropped."},"corp":{"description":"회사명·종목코드·corp_code. market=individual 종목 시세 (kind=market requires exactly one of corp | index | rate_series), wacc=REQUIRED (the subject company), peers=target (동업종 auto-selected). The legacy keys `code`/`stock_code` are absorbed into this argument","type":"string"},"index":{"description":"[market] 시장지수 — kospi·kosdaq (aliases such as KOSPI/코스피 accepted). Mutually exclusive with corp·rate_series","type":"string"},"rate_series":{"description":"[market] 시장금리 — ktb1y~ktb50y(국고채)·corp_aa_3y·corp_bbb_3y(회사채 3년)·cd91. Mutually exclusive with corp·index","type":"string","enum":["ktb1y","ktb2y","ktb3y","ktb5y","ktb10y","ktb20y","ktb30y","ktb50y","corp_aa_3y","corp_aa_pyeong_3y","corp_bbb_3y","cd91"]},"start":{"description":"[market] Start date YYYYMMDD·YYYY-MM-DD (default: one year before `end`). 구 `from` 도 받는다","type":"string"},"end":{"description":"[market] End date (default: latest 적재일). 구 `to` 도 받는다","type":"string"},"freq":{"description":"[market] Resampling frequency of the series — daily (default)·weekly (금요일 마감)·monthly (월말). Resampled rows drop flt_rt and carry period_return_pct instead (flt_rt compounded over the bucket, %), so returns still come from that field, never from close deltas","type":"string","enum":["daily","weekly","monthly"]},"beta_spec":{"description":"[wacc] β spec — 2w=2년 주간 (default, 실무 관행), 5m=5년 월간","type":"string","enum":["2w","5m"]},"rf_tenor":{"description":"[wacc] Rf(무위험이자율) tenor (default 10y)","type":"string","enum":["3y","5y","10y"]},"credit_rating":{"description":"[wacc] 신용등급 used to derive Kd (무보증 공모회사채, 금투협 시가평가 전 등급). Mid-notches are written with 0, NOT bare: AA0·A0·BBB0. If omitted the 정기보고서 공시등급 is picked up automatically; where none is disclosed Kd is left uncomputed rather than assumed","type":"string","enum":["AAA","AA+","AA0","AA-","A+","A0","A-","BBB+","BBB0","BBB-"]},"kd_tenor":{"description":"[wacc] Kd(타인자본비용) tenor (default 5y)","type":"string","enum":["1y","2y","3y","5y","7y","10y"]},"kd":{"description":"[wacc] Kd given directly (annual %, 세전) — overrides credit_rating·kd_tenor","type":"number"},"mrp":{"description":"[wacc] MRP override (decimal, e.g. 0.08). Default 0.08 = midpoint of the 한국공인회계사회 가이던스 range (7~9%)","type":"number"},"srp_scheme":{"description":"[wacc] 규모위험 프리미엄(SRP) 분위체계 (default quintile)","type":"string","enum":["quintile","tercile","none"]},"srp":{"description":"[wacc] SRP override (decimal) — bypasses 분위 판정","type":"number"},"target_de":{"description":"[wacc] Target 자본구조 D/E (시가). If omitted, the snapshot's 실측 value is used","type":"number"},"equity_basis":{"description":"[wacc] Definition of E(자기자본 시가) (default outstanding_plus_nci)","type":"string","enum":["listed","outstanding","outstanding_plus_nci"]},"include_pref":{"description":"[wacc] Add 우선주 시총 into E (default true)","type":"boolean"},"ksic":{"description":"[peers] KSIC 업종코드 given directly (instead of corp — useful for 비상장 targets). e.g. '26410'","type":"string"},"exclude":{"description":"[peers] Exclusion rules — spac·reit (default)·loss(LTM 순손실)·financial(KSIC 64~66). A bare string is also accepted","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"size_band":{"description":"[peers] Multiple range around the target's 시총 (e.g. 10 = 1/10~10x; min 2). Only honoured when corp is given","type":"number"},"yq":{"description":"[wacc·peers] 평가기준 분기 (e.g. 2026Q2 — lowercase q accepted). Default: latest snapshot","type":"string"},"tax_rate":{"description":"[wacc·peers] 한계법인세율 (default 0.264 = 24%×1.1)","type":"number"},"limit":{"description":"[market·peers] Return cap — market default 600 (1~3000), peers default 15 (3~50)","type":"number"}},"required":["kind"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"search_audit_findings","description":"MyDART MCP의 search_audit_findings 도구는 회사를 지정하지 않고 감사보고서 조건으로 상장사 목록을 찾습니다.\n\n[Purpose]\n- List/aggregate: \"의견거절 회사\"·\"내부회계 취약점 목록\"·\"○○회계법인 감사 회사\".\n- Detail: get_audit_profile/get_internal_control; 원문: get_audit_report.\n\n[Usage]\n1. \"FY2024 코스피 의견거절 회사\" → year=2024, market=\"kospi\", opinion=\"disclaimer\"\n2. 목록·집계만 필요 → fields=\"brief\" (산문 제외·행 1/12)\n3. \"24~25년 ICFR 취약점\" → year=[2024,2025] (다년 — coverage.years[] 로 연도별 적재 확인)\n\n[Response]\n- Output market Y=코스피/K=코스닥/N=코넥스; fs_div is KOREAN \"연결\"/\"별도\".\n\n[Rules]\n- READ coverage.note FIRST — empty result over a non-ingested scope = \"not seen\", never \"does not exist\".\n- fs_div=both(default) → ≤2 rows/company: row count ≠ company count (dedupe by corp_code).\n- breakdown = population baseline in scope(year/market/fs_div) — finding filters ignored, scope ones not; ≠ count.\n- ICFR undetected: `note` ONLY on 연결(CFS) — \"legitimately absent (<2조)\" vs \"expected-audit-but-missing\"; 별도(OFS) has expected_type (or expected_type_note).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"year":{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward). Accepts a single year OR an array (e.g. [2024, 2025], max 10) for a multi-year query — rows then carry their own bsns_year and `coverage` returns a per-year breakdown (coverage.years[]).","anyOf":[{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward).","type":"integer","minimum":2015},{"minItems":1,"maxItems":10,"type":"array","items":{"description":"결산 사업연도 (회계연도, fiscal year) — the number you pass IS the 사업연도=회계연도=결산연도. Do NOT subtract it; pass it as-is. Only tools where year is optional auto-select the latest published year when omitted (if year is required in the tool you are calling, it cannot be omitted — confirm the year actually used via the response `year` field).e.g. 'FY2025'·'2025년 재무제표'·'2025 사업보고서'·'2025 회계연도' → all 2025 (결산일 2025-12-31). Convert ONLY when the user explicitly names the 공시(제출)연도, as in '○○년에 공시된 보고서': a 12월 결산법인 files by the end of March of the following year.(e.g. '2026년에 공시된 사업보고서' → 2025). Otherwise the input is ALWAYS on a 사업연도=회계연도=결산연도 basis. Relative expressions ('최근 N개년'·'작년' and the like) count back from the most recent PUBLISHED 사업연도 as of today: a 사업보고서 is filed within about 90 days after 결산 (12월 결산 법인 → March of the following year), so from April the latest is last year, and in Jan~Mar it is the year before last. e.g. if today is 2026-06 the latest is FY2025 → '최근 5개년'=2021~2025 (NOT 2020~2024). Supported floor is FY2015 (the range OpenDART's structured APIs cover) — 2014 and earlier are rejected. A 비12월 결산 (3·6·9월) 법인 may have its latest 사업연도 equal to the calendar year (e.g. a 3월 결산 company from July onward).","type":"integer","minimum":2015}}]},"market":{"description":"시장구분. Default all = every 상장사 (유가 kospi·코스닥 kosdaq·코넥스 konex are all loaded). Uppercase (KOSDAQ) and 한글 (코스닥/유가증권/코넥스/전체) aliases accepted.","type":"string","enum":["kospi","kosdaq","konex","all"]},"fs_div":{"description":"재무제표 구분. CFS=연결, OFS=별도 (aliases consolidated/separate·연결/별도 also accepted). 별도 and 연결 are SEPARATE rows (의견·강조·KAM·ICFR are all held per 별도/연결). both = both (up to 2 rows per company), so row count ≠ company count — dedupe by corp_code when counting companies.","type":"string","enum":["both","CFS","OFS"]},"opinion":{"description":"감사의견 filter. unqualified=적정, qualified=한정, adverse=부적정, disclaimer=의견거절, modified=변형의견 (everything other than 적정: 한정/부적정/의견거절). 한글 values (적정·의견거절 etc.) also accepted.","type":"string","enum":["unqualified","qualified","adverse","disclaimer","modified"]},"emphasis":{"description":"Presence of 강조사항(EoM)","type":"boolean"},"other_matter":{"description":"Presence of 기타사항(OM)","type":"boolean"},"kam":{"description":"Whether 핵심감사사항(KAM) are present","type":"boolean"},"kam_required":{"description":"Whether KAM disclosure was mandatory by 규모·연도·시장 (적용시기 rules). kam=false & kam_required=true & kam_none_declared=false = suspected omission","type":"boolean"},"kam_none_declared":{"description":"Whether the 감사보고서 explicitly declares '보고할 핵심감사사항 없음'. true=declared (kam_count=0 is then normal), false=undeclared or unknown. Combine with kam_count=0 to separate a genuine suspected omission from a declared absence","type":"boolean"},"asset_bucket":{"description":"Size bucket by 전기말 자산총액(별도). gte_2tn=2조이상, gte_500bn=5천억이상, gte_100bn=1천억이상, lt_100bn=1천억미만. 한글 values also accepted.","type":"string","enum":["gte_2tn","gte_500bn","gte_100bn","lt_100bn"]},"industry":{"description":"업종 — financial=금융 (KSIC 64~66: 은행·보험·금융지주 etc.), non_financial=비금융. The 주석 XBRL and ICFR 운영의무 thresholds differ between them. 한글 values (금융·비금융) also accepted.","type":"string","enum":["financial","non_financial"]},"xbrl_required":{"description":"Whether 재무제표 주석 XBRL was mandatory for that year (적용시기 rules). Populated only after the backfill","type":"boolean"},"going_concern":{"description":"계속기업 불확실성 mentioned in the 감사보고서","type":"boolean"},"icfr_opinion":{"description":"내부회계관리제도 의견. adverse=부적정, disclaimer=의견거절 (covers both 감사 의견거절 and 검토 검토결론 불표명 — use icfr_type to tell 감사 from 검토), modified=변형 (everything other than 적정). 한글 values also accepted.","type":"string","enum":["adverse","disclaimer","modified"]},"icfr_material_weakness":{"description":"A 내부회계관리제도 중요한 취약점 exists","type":"boolean"},"auditor":{"description":"Partial match on 감사인명 (e.g. 삼정/한영/안진/삼일)","type":"string"},"limit":{"default":200,"description":"Cap on **rows** returned (SQL LIMIT applies to rows, not companies — with the default fs_div=both a company can occupy 2 rows, so the number of distinct companies shown is smaller than this cap). When the list is cut here, truncated=true while count still reports the full row count. To count companies, dedupe companies[] by corp_code — and if truncated=true that count is a floor, not the answer: narrow the scope (market·fs_div·asset_bucket) until truncated=false.","type":"integer","minimum":1,"maximum":500},"fields":{"default":"full","description":"Field width of each company row. full(default)=every field, incl. the 본문 산문 (의견근거·강조·기타·계속기업 text, KAM 제목 배열, ICFR 근거·취약점, applicability) — averages ~3,957 bytes/row. brief=list axis only, the same set as the 뷰어 스크리너 표: 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 (~318 bytes/row, 12x smaller — a whole 목록 fits in one response). Use brief for list/count asks and switch to full (or get_audit_report/get_internal_control) once a company is picked. coverage·breakdown·count·truncated are identical in both.","type":"string","enum":["full","brief"]},"include_reference":{"default":false,"description":"Whether to include the 적용시기 참조표 (full phase-in schedule for KAM·ICFR·XBRL 주석·자금부정통제, about 4.8KB). Each company row already carries its own verdict in the applicability field, so set true ONLY when you need the 법령 근거 text behind that verdict.","type":"boolean"}},"required":["year"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"search_disclosures","description":"MyDART MCP의 search_disclosures 도구는 DART 공시 목록에서 접수번호(rcept_no)를 찾습니다 — download_document·get_attachments 진입점.\n\n[Purpose]\n- 사업보고서 섹션 데이터는 get_periodic_report, 동명 회사는 find_corp_code 로 corp_code 확정.\n\n[Usage]\n1. \"삼성전자 최근 한 달 공시\" → corp=\"삼성전자\", days=30\n2. \"작년 유상증자 결정 전부\" → preset=\"rights_offering\", start=\"2025-01-01\", end=\"2025-12-31\"\n\n[Response]\n- corp_cls: Y=코스피, K=코스닥, N=코넥스, E=기타(비상장).\n- report_nm [기재정정]/[첨부정정]/[첨부추가] prefix = 정정공시.\n\n[Rules]\n- **Always pass corp when a company is named** — corp-less searches (page mode too) split into 90-day chunks, batch request budget 60; with corp: 1 request.\n- 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.\n- early_stopped:true = limit filled, rest unfetched — matched is a **lower bound**.\n- Preset batch drops 정정공시; page mode·bare all_pages keep them.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"corp":{"description":"회사명/종목코드/corp_code. Omit for all companies — but a batch without corp splits the period into 90-day chunks and sweeps every company, spending up to the per-call request budget (default 60, env SEARCH_MAX_REQUESTS) and taking tens of seconds; on reaching it collection is truncated and flagged incomplete=true. With corp the split disappears and the same query finishes in 1 request and a few hundred ms.","type":"string"},"start":{"description":"Start date YYYY-MM-DD. When omitted, `days` back from today (and when that is unset, the preset default: 사업·감사 460 / 반기 280 / 분기 180 / 수시·일반 90) — set it explicitly for older filings. (The old parameter name begin is still accepted — unified with start/end in get_corporate_event.)","type":"string"},"end":{"description":"End date (defaults to today)","type":"string"},"days":{"description":"Trailing N days from today instead of start (1~730; out-of-range values are clamped to the bound). When unset, the preset default applies: 사업·감사 460 / 반기 280 / 분기 180 / 수시·일반 90. For windows longer than 730 days use start/end","type":"integer","minimum":1,"maximum":730},"kind":{"description":"공시유형: periodic/major/issuance/holdings/audit/other/fund/abs/exchange/ftc","type":"string","enum":["periodic","major","issuance","holdings","other","audit","fund","abs","exchange","ftc"]},"preset":{"description":"22 presets: treasury_buy/sell/trust · cb/bw/eb_issue · rights_offering/bonus_issue/capital_reduction · merger/split/stock_exchange · business_transfer/acquisition · large_holding_5pct · annual_report/half_report/quarterly_report · audit_report · correction_all · insolvency · litigation. Setting one applies kind and a keyword filter automatically and collects every page in parallel.","type":"string","enum":["treasury_buy","treasury_sell","treasury_trust","cb_issue","bw_issue","eb_issue","rights_offering","bonus_issue","capital_reduction","merger","split","stock_exchange","business_transfer","business_acquisition","large_holding_5pct","annual_report","half_report","quarterly_report","audit_report","correction_all","insolvency","litigation"]},"final_only":{"default":false,"description":"One latest version per event — where a 정정 exists the 구본(원본) is dropped and the latest 정정본 is taken (this does NOT exclude 정정공시 themselves). Use when you need one duplicate-free set.","type":"boolean"},"include_corrections":{"default":false,"description":"Whether to include 정정공시 ([기재정정] etc.) — preset batch mode ONLY (default false, to avoid double-counting 원본+정정 of the same event; correction_all forces true; ignored when final_only=true since that already removes duplicates). Bare all_pages and page mode ALWAYS include them (raw DART) — for latest-only without duplicates use final_only.","type":"boolean"},"all_pages":{"default":false,"description":"Collect the whole period in parallel even without a preset (정정공시 included — the same set as page mode). When true, limit applies instead of page/size.","type":"boolean"},"page":{"default":1,"description":"Page number (page mode — the default when neither preset nor all_pages is set). Row shape differs by mode: page mode items are raw DART list rows, batch mode items a 7-key projection (rcept_no·rcept_dt·corp_name·corp_code·corp_cls·report_nm·flr_nm), so any field outside those 7 is only in page mode.","type":"integer","minimum":1},"size":{"default":20,"description":"Page size (page mode)","type":"integer","minimum":1,"maximum":100},"limit":{"default":500,"description":"Cap on rows finally returned in batch mode (preset given or all_pages=true)","type":"integer","minimum":1,"maximum":3000},"concurrency":{"default":5,"description":"Collector workers in batch mode (1~10, default 5). **Effective concurrency is set by a server-wide cap, so raising this usually does NOT make it faster** — to cut latency, set corp (which removes the period split, leaving a single request), narrow the period, or lower limit. The response's dart_requests/cached_chunks report how many DART requests this call spent and how many chunks came from cache — read them when it feels slow.","type":"integer","minimum":1,"maximum":10}},"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":67,"grade":"C","scanned_at":"2026-09-20T16:17:12.797Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T16:17:12.756Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1287ms"]},"poisoning":{"score":15,"max":15,"notes":["16 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://mydart.eocpa.kr/mcp","reachable":true,"authRequired":false,"latencyMs":1287,"serverInfo":{"name":"mydart-mcp","version":"0.36.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://mydart.eocpa.kr/favicon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}