dart-risk-mcp
# dart-risk-mcp
개인 작업용. DART 공시를 흐름으로 읽어 불공정거래 신호를 사실로 표기하는 MCP 서버.
## 돌리기
```bash
pip install -e .
python -m dart_risk_mcp
```
```json
{
"mcpServers": {
"dart-risk": {
"command": "python",
"args": ["-m", "dart_risk_mcp"],
"env": { "DART_API_KEY": "..." }
}
}
}
```
- `DART_API_KEY` 필수
- `KRX_API_KEY` · `KIS_APP_KEY` + `KIS_APP_SECRET` 선택 — 시세 대조용(KRX 먼저, 빈 날은 KIS)
## 메모
- 설계·실측 근거는 전부 `CLAUDE.md`
- 보류한 판단은 `docs/DEFERRED-DECISIONS.md`
- 뷰어 소스는 `docs/tool/`
- 테스트는 키 없이: `env -u DART_API_KEY python -m pytest tests/ -q`
- 골든 재생성: `python scripts/regen_goldens.py`
- 릴리스 순서: `CLAUDE.md` 「릴리스 정책」
MIT. 일부 로직은 kreports-dart-mcp(Apache 2.0)에서 이식 — `THIRD_PARTY_NOTICES.md`.
TDQS
Scored across 34 tools
Most tools target distinct data domains and the descriptions are unusually explicit about boundaries. However, several close pairs exist (get_disclosure_document vs view_disclosure, get_financial_summary vs get_financial_statements_full, check_disclosure_risk vs check_disclosure_anomaly), so an agent could easily misroute a retrieval.
Nearly all tools follow a snake_case verb_noun pattern, with check_/track_/get_/list_/find_ verbs mapping sensibly to actions. Minor inconsistencies remain, such as get_disclosure_document vs view_disclosure both reading document content, and prepositional names like list_disclosures_by_stock and search_notes_in_report.
34 tools is firmly in the 'too many' range for a single MCP. Document reading is split across three tools, financial statements across three tools, and audit opinions across two tools, creating fragmentation that could be consolidated without losing functionality.
The tool surface covers the full investigative loop: disclosure discovery, document inspection, financial/audit/ownership data, risk signals, actor overlap, watchlists, and market context. The main gap is that market-wide discovery is limited to fixed presets rather than arbitrary keyword search across all filings.