OpenDART 83개 API → 15개 MCP 도구. 금융감독원 전자공시(DART)를 AI로 검색·조회·분석
Strong tool design with comprehensive Korean financial disclosure APIs. All 18 tools have clear names starting with action verbs (get_, search_, resolve_), well-structured input schemas with proper type definitions, and Korean-language descriptions that convey purpose. Output schemas are implicitly documented via structured tool handlers. However, descriptions are consistently in Korean (limiting LLM-agnostic clarity), several tools have high-complexity parameter surfaces with undocumented dependencies (e.g., search_disclosures combines preset + date range logic), and no visible error handling guidance for common failure modes (API rate limits, invalid corp codes, malformed XBRL). The dart_raw passthrough tool (18) intentionally exposes raw API parameters with minimal validation, trading safety for coverage. Overall, the set demonstrates solid engineering discipline but falls short of production A-grade due to missing error recovery patterns and implicit output schemas.
버핏식 퀄리티 스냅샷 (단일/비교 모드, ROE/D-E/CAGR, 랭킹)
범용 OpenDART 85개 API 패스스루 (operation 이름, params, binary 파일 옵션)
회계·거버넌스 이상 징후 스코어 (score/100, verdict, 정정공시비, 감사인 변동)
공시 원문 다운로드 (format: markdown/raw/text, truncate)
공시 첨부파일 조회·추출 (mode: list/extract, PDF→markdown, kordoc, ZIP 재귀)
기업 개황 조회 (기본정보, 주가정보, 등록정보)
자본이벤트 조회 (mode: single/timeline, 36개 event_type enum)
Descriptions are written entirely in Korean, reducing accessibility for multilingual LLMs and limiting applicability to non-Korean-speaking users. English descriptions are standard for production tools.
search_disclosures combines multiple orthogonal concerns (preset selection, date range filtering, pagination, concurrency control). Parameter dependencies (days vs begin/end, size vs limit, all_pages interaction) are undocumented. Agents cannot infer mutual exclusivity or precedence.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
임원 보수 통합 조회 (보수내역, 퇴직급여, 임원현황 등)
재무지표 조회 (DS003 fnlttCmpnyIndx, 범주 필터: stability/profitability/all)
재무제표 조회 (scope: summary/full, 단일/다중 기업, sj_div 필터)
지분공시 통합 조회 (5%룰, 임원·주요주주 지분, 제한 기간/수량)
정기보고서 섹션 조회 (29개 보고타입: 최대주주, 배당, 임원, 등)
증권신고서 조회 (DS006, filing_type: equity/debt/depositary_receipt/merger 등)
지배구조 통합 조회 (최대주주, 임원지분, 자기주식, 기타)
XBRL 재무정보 추출 (format: json/markdown/markdown_full, 계산 검증)
내부자 거래 신호 분석 (cluster_threshold, reporters_topn, 요약 텍스트)
기업명, 종목코드, alias 등으로 DART 법인코드 검색
기업 공시 검색 (기간, preset, 페이지 모드, all_pages, 자동 90일 분할)
No documented output schemas for any tool. While tool handlers return JSON, the structure of response fields is not formally specified. LLMs cannot predict what fields are available, forcing exploration calls or assumptions that may be wrong.
No error handling guidance. If corp code resolution fails, DART rate limits are hit, or XBRL parsing errors occur, tools return raw exceptions. LLM has no instructions to retry, call alternative tools, or guide the user to fixes.
dart_raw exposes raw OpenDART API parameters (operation, params dict) with minimal description and no validation. This is a dangerous passthrough that invites malformed calls and makes LLM behavior unpredictable. Parameter 'params' is an untyped object with no schema.
buffett_quality_snapshot uses an overloaded 'corps' parameter (array) where semantics change based on length (1 item = snapshot, 2+ = comparison). This implicit mode switching is not documented in the parameter description and violates single-responsibility principle.
Multiple tools accept both 'corp' (string) and 'corps' (array) parameters with overlapping semantics (single company lookup vs batch). Tool naming and parameter naming do not distinguish single vs batch operations (missing _batch suffix convention).
No pagination limit enforcement documented. search_disclosures accepts 'limit' but no max cap is specified. Without explicit limits, agents may request thousands of disclosures, exhausting context windows and DART API quota.
Tool names 'get_periodic_report' and 'get_shareholders' + 'get_executive_compensation' + 'get_major_holdings' overlap in semantic scope. All retrieve governance/disclosure info, but naming does not distinguish their data domains. LLM may pick the wrong tool.