Skip to main content
Glama

Track Korean DART filings

track_korean_filings
Read-onlyIdempotent

Track Korean DART (전자공시) stock filings in English — real-time corporate disclosures for KOSPI / KOSDAQ / KONEX / KRX listed companies: 5%-rule shareholding disclosures, M&A, periodic reports, capital issuance, insider trading, audit reports. Free tier.

Use this tool when the user asks about: recent Korean stock filings, DART disclosures, Korean market data, KOSPI/KOSDAQ regulatory events, "track Korean DART filings", "what did Samsung / Hyundai / SK / LG / NAVER / Kakao / 셀트리온 file", company-specific filing history, periodic / major-event / issuance / shareholding / audit filings on Korean equities.

Free tier — no license required. Returns raw DART filings exactly as the regulator surfaces them (filer name in Korean, filing type code, receipt number, optional EN translation of the title).

Important for LLM clients — read this before retrying after a paid- tool license error. This tool returns raw filings only. It does NOT classify the filer. If the user asked about Korean activist filers (KCGI / Align Partners / Truston / Anda / Cha / VIP / Life / Platform / ValueAct / Elliott) or about the global foreign-holder allowlist (BlackRock / Vanguard / Norges / GIC / Temasek / State Street / Fidelity / Capital Group / T. Rowe Price / Wellington / Goldman / JPMorgan / Morgan Stanley / Citadel / Millennium / Bridgewater + others), the matching work happens in monitor_activist_investors and monitor_foreign_holders — both require a license_key argument. A response from this free tool to a "are activists filing on X?" or "is BlackRock holding X?" question is raw filing data, not a classification answer — say so to the user and surface the paid tool's license-required notice instead of pretending you've answered.

Batch scan for agents (experimental). To check MULTIPLE companies for material disclosures since your last checkpoint in ONE call — instead of N separate calls — pass company_corp_codes (a list, ≤10) plus a since timestamp. This is the portfolio-monitoring / scan-since-checkpoint workflow: give it your watchlist's corp codes and the ISO timestamp of your previous check, optionally with material_only=True, and it returns every filing across those companies newer than that timestamp, merged and sorted newest-first. DART has no batch endpoint, so this fans out one cache-backed call per corp code — the ≤10 cap keeps a single call from blowing past DART's daily quota.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
daysNohow many days back from today (1–30). Ignored when `since` is provided.
limitNomax filings to return (≤100). DART returns most-recent first, so on a busy window the older end of the range is dropped first. Narrow `days` or `filing_type` if you need older items. In batch mode (`company_corp_codes`) `limit` applies PER COMPANY, not to the merged set, so a heavy filer can never crowd a quieter company out of the results: an empty result for a company means that company genuinely filed nothing in the window. A batch call can therefore return up to `limit × len(company_corp_codes)` rows.
sinceNoOPTIONAL ISO-8601 date or datetime (e.g. '2026-05-01' or '2026-05-01T09:00:00'). When provided it is the cutoff instead of `days` — only filings with `filed_at >= since` are returned. Use it to fetch only what is new since your last checkpoint. `filed_at` is date-granular (KST), so a time component filters at day boundaries. A malformed value raises a validation error. When omitted, the `days` window is used exactly as before.
summarizeNoTrue to fill `summary_en` (≤200 words). Costs more — use sparingly. Long-form analysis should be done by the client LLM.
translateNoTrue to fill `title_en` via server-side LLM (cached).
filing_typeNooptional one-letter code: A=periodic, B=major event, C=issuance, D=shareholding, E=other, F=audit, G=fund, H=ABS, I=exchange, J=FTC.
license_keyNosubscription key. Required when KOREANPULSE_REQUIRE_LICENSE=1.
material_onlyNoOPTIONAL. When True, return only filings whose `red_flags` list is non-empty (governance/distress-tagged — see the red_flags catalog below). Applies to both single and batch queries. Reuses the existing red-flag tagging; adds no new classification.
company_corp_codeNo8-digit DART corp code (single company). Use `lookup_corp_code` first to resolve a company name. Omit to query all companies. Ignored when `company_corp_codes` (plural) is provided non-empty — the plural list takes precedence.
company_corp_codesNoOPTIONAL list of up to 10 corp codes for batch mode. When provided non-empty, the tool queries each corp code concurrently (one cache-backed DART call each), merges the results, and sorts newest-first — use this to scan a whole watchlist in one call. More than 10 codes raises a validation error (DART has no batch endpoint; this is N calls, so the cap protects the daily quota). Takes precedence over `company_corp_code` (singular) when both are given.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / company_corp_code / description
      Previous value: -"8-digit DART corp code. Use `lookup_corp_code` first\nto resolve a company name. Omit to query all companies."New value: +"8-digit DART corp code (single company). Use\n`lookup_corp_code` first to resolve a company name. Omit to query\nall companies. Ignored when `company_corp_codes` (plural) is\nprovided non-empty — the plural list takes precedence."
    • addedInput schema / properties / company_corp_codes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "OPTIONAL list of up to 10 corp codes for batch\nmode. When provided non-empty, the tool queries each corp code\nconcurrently (one cache-backed DART call each), merges the\nresults, and sorts newest-first — use this to scan a whole\nwatchlist in one call. More than 10 codes raises a validation\nerror (DART has no batch endpoint; this is N calls, so the cap\nprotects the daily quota). Takes precedence over\n`company_corp_code` (singular) when both are given."
      +}
    • changedInput schema / properties / days / description
      Previous value: -"how many days back from today (1–30)."New value: +"how many days back from today (1–30). Ignored when `since` is\nprovided."
    • changedInput schema / properties / limit / description
      Previous value: -"max filings to return (≤100). DART returns most-recent first,\nso on a busy window the older end of the range is dropped first.\nNarrow `days` or `filing_type` if you need older items."New value: +"max filings to return (≤100). DART returns most-recent first,\nso on a busy window the older end of the range is dropped first.\nNarrow `days` or `filing_type` if you need older items.\nIn batch mode (`company_corp_codes`) `limit` applies PER COMPANY,\nnot to the merged set, so a heavy filer can never crowd a quieter\ncompany out of the results: an empty result for a company means\nthat company genuinely filed nothing in the window. A batch call\ncan therefore return up to `limit × len(company_corp_codes)` rows."
    • addedInput schema / properties / material_only
      Added value: +{
      +  "default": false,
      +  "description": "OPTIONAL. When True, return only filings whose\n`red_flags` list is non-empty (governance/distress-tagged — see\nthe red_flags catalog below). Applies to both single and batch\nqueries. Reuses the existing red-flag tagging; adds no new\nclassification.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / since
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "OPTIONAL ISO-8601 date or datetime (e.g. '2026-05-01' or\n'2026-05-01T09:00:00'). When provided it is the cutoff instead of\n`days` — only filings with `filed_at >= since` are returned. Use\nit to fetch only what is new since your last checkpoint.\n`filed_at` is date-granular (KST), so a time component filters at\nday boundaries. A malformed value raises a validation error.\nWhen omitted, the `days` window is used exactly as before."
      +}
    • addedOutput schema / properties / result / items / properties / is_correction
      Added value: +{
      +  "default": false,
      +  "description": "True when this filing is a DART correction re-filing — its title carries a leading correction tag ([기재정정] content correction or [첨부정정] attachment correction). False for original filings.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / result / items / properties / previous_receipt_no
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "receipt_no of the earlier filing this correction amends, resolved only when that original is present in the same fetched window (matched by corp_code + exact normalized report name + earlier receipt number). None when this is not a correction, when the original fell outside the fetched window, or when no confident match was found — a wrong link is worse than no link."
      +}
  2. Changed6 schema fields changed
    • addedOutput schema / properties / result / items / properties / data_fetched_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "UTC timestamp this filing was live-fetched from DART (as-of time for the data). None for rows served from a cache entry written before this field existed."
      +}
    • addedOutput schema / properties / result / items / properties / holder_reporter_ko
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "DART majorstock reporter name (`repror`) matched to this filing's filer. Same paid-tier enrichment as `holding_pct`."
      +}
    • addedOutput schema / properties / result / items / properties / holding_pct
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Reporter's current holding percentage from DART majorstock.json (대량보유상황보고, `stkrt`). Paid-tier enrichment on monitor_activist_investors / monitor_foreign_holders rows only; None when not looked up or no reporter match was found."
      +}
    • addedOutput schema / properties / result / items / properties / holding_pct_change
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Change in holding percentage versus the prior majorstock report (`stkrt_irds`). Same paid-tier enrichment as `holding_pct`."
      +}
    • addedOutput schema / properties / result / items / properties / query_total_count
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "DART's reported total_count for the query that produced this filing — the full match count before `limit`/`page_count` truncation, not the number of rows returned. None on cached rows written before this field existed."
      +}
    • changedOutput schema / properties / result / items / properties / red_flags / description
      Previous value: -"Governance/distress tags inferred from the filing title, e.g. 'cb_issuance', 'controlling_shareholder_change', 'rehabilitation', 'audit_opinion', 'disclosure_violation', 'rights_issue', 'capital_reduction'. Empty when no keyword matched."New value: +"Governance/distress tags inferred from the filing title, e.g. 'cb_issuance', 'controlling_shareholder_change', 'rehabilitation', 'audit_opinion', 'disclosure_violation', 'rights_issue', 'capital_reduction', 'management_designation', 'delisting_risk', 'trading_halt', 'reverse_split', 'short_term_borrowing', 'going_concern'. Empty when no keyword matched."
  3. Changed2 schema fields changed
    • addedOutput schema / properties / result / items / properties / market
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Listing market from DART corp_cls: 'KOSPI', 'KOSDAQ', 'KONEX', or 'OTHER'. None when DART omits corp_cls."
      +}
    • addedOutput schema / properties / result / items / properties / red_flags
      Added value: +{
      +  "description": "Governance/distress tags inferred from the filing title, e.g. 'cb_issuance', 'controlling_shareholder_change', 'rehabilitation', 'audit_opinion', 'disclosure_violation', 'rights_issue', 'capital_reduction'. Empty when no keyword matched.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that results are raw, unclassified, and that filer names are in Korean; it warns LLM clients against pretending to answer activist/holder questions and explains the batch fan-out quota. This is rich behavioral context with no contradiction to annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with bolded sections (Free tier, Important for LLM clients, Batch scan). Each section carries essential caveats and use-case guidance, so it earns its length. Slight redundancy with the schema parameter descriptions, but overall it is organized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity — free vs paid tier, raw vs classified output, batch quotas — the description covers all critical aspects: return format, licensing, sibling-tool boundaries, and batch semantics. The presence of an output schema further fills any gap, making this complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with detailed descriptions for all 10 parameters, so baseline is 3. The description adds a workflow narrative for batch scanning (company_corp_codes + since) and explains the per-company limit behavior, reinforcing but not significantly extending the schema. I give a 4 for the added workflow clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — 'Track Korean DART stock filings in English' — and enumerates covered filing types (5%-rule, M&A, periodic reports). It clearly distinguishes from sibling tools by stating this tool returns raw filings and does not classify activist/foreign-holder entities, which belong to monitor_activist_investors and monitor_foreign_holders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use criteria ('Use this tool when the user asks about…') and explicitly names alternatives for activist investors and foreign holders, with the caveat about license_key. This is model guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.