Skip to main content
Glama
yjhann33-design

Korea Stock Insight MCP

Korea Stock Insight MCP

mcp-name: io.github.yjhann33-design/korea-stock-insight-mcp

PyPI License: MIT

English-first MCP — built for global LLM analysts, not Korean fluency speakers.

Drop-in for Claude Desktop, Cursor, Cline, and any MCP-compatible client. Ask in English, get Korean filings, financials, and KOSPI/KOSDAQ prices in one tool call chain — DART corp_code lookup, disclosures, XBRL statements, daily OHLCV.

What you get

Tool

What it does

get_today_date

Today in KST/UTC (YYYYMMDD) — call before any date-range query

get_corp_code

Resolve Korean company name or 6-digit ticker → DART corp_code

get_disclosure_list

Recent DART filings (date, title, type, receipt no.)

get_disclosure

Filing metadata + canonical viewer URL

get_financial_statement

Full XBRL financial statements (consolidated/separate, quarterly/annual)

get_stock_quote

Daily OHLCV from KOSPI/KOSDAQ (via yfinance, no key required)

DART (전자공시시스템) is South Korea's electronic disclosure system — the SEC EDGAR equivalent, operated by the Financial Supervisory Service (FSS).

Related MCP server: opendart-mcp-server

Why English-first matters

Korean public filings are written in Korean, ticker codes are 6-digit numerics with no global mnemonic, and the disclosure system (DART) has no English equivalent of EDGAR's full-text search. For a non-Korean analyst, that's three friction layers before any actual research.

This server collapses them. Tool descriptions, parameter names, and examples are all written for an LLM that doesn't read Korean — company resolution accepts English names ("Samsung Electronics", "Naver"), responses include English context where useful, and the workflow is one Claude/Cursor turn instead of three browser tabs.

  • English-first tool descriptions — names, params, examples all in English

  • DART + KRX in one place — disclosures, financials, daily prices through a single MCP

  • One-line install, no accountuvx korea-stock-insight-mcp and you're done (only a free DART key needed)

  • Local stdio, MIT, no telemetry — your queries don't leave your machine

Quick start (Claude Desktop)

1. Get a free DART API key

Register at opendart.fss.or.kr and grab your API key from the user page. Instant, free, no credit card.

2. Add to your Claude Desktop config

Edit claude_desktop_config.json (location: macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\):

{
  "mcpServers": {
    "korea-stock-insight": {
      "command": "uvx",
      "args": ["korea-stock-insight-mcp"],
      "env": {
        "DART_API_KEY": "YOUR_DART_KEY_HERE"
      }
    }
  }
}

If you don't have uvx, install uv first (one-liner on macOS/Linux/Windows), or use pipx:

{
  "mcpServers": {
    "korea-stock-insight": {
      "command": "pipx",
      "args": ["run", "korea-stock-insight-mcp"],
      "env": {"DART_API_KEY": "YOUR_DART_KEY_HERE"}
    }
  }
}

3. Restart Claude Desktop and try

"What were Samsung Electronics' most recent disclosures? Pull their last quarter's revenue and operating profit."

Claude will chain get_corp_code("Samsung Electronics")get_disclosure_list("005930")get_financial_statement(corp_code, 2025, "FY") automatically.

Sample queries (30 seconds, copy-paste into Claude)

Three workflows global analysts actually run on Korean equities. Each one chains 2–4 tool calls automatically.

1. Memory-cycle peer comparison

"Compare Samsung Electronics and SK Hynix on revenue, operating margin, and capex for the most recent annual filing. Highlight where they diverge."

Resolves both names to corp_codes → pulls latest XBRL → returns a side-by-side. Useful for tracking the HBM/DRAM cycle.

2. Disclosure radar before a catalyst

"Show me Naver's last 30 days of DART filings. Flag anything about earnings, M&A, share buybacks, or executive changes."

get_disclosure_list with date range, then Claude triages titles. No Korean reading required — the tool description tells Claude what filing types to look for.

3. Price + filing context in one turn

"What did Kakao file most recently, and how has the stock moved on KOSPI over the past 90 days?"

Combines get_disclosure_list + get_stock_quote so you get the news and the price reaction in the same answer.

Other examples

  • "Pull LG Energy Solution's last annual report and summarize the management discussion."

  • "What's the KODEX 200 ETF's 6-month trend?" (works with ETFs too)

  • "For Hyundai Motor, list every disclosure tagged as a major decision (주요사항보고서) in 2025."

Roadmap

  • v0.2 — Full disclosure body extraction (zipped XBRL → plain text)

  • v0.3 — Multi-company batch queries, sector aggregations

  • Future — Optional hosted tier with English-summarized disclosures and webhook push (no ETA; track progress in GitHub Issues)

Feedback & contributions

This is solo-maintained, and stdio mode means I can't see who's using it. The only signals I get are PyPI downloads, GitHub stars, and what you tell me.

If this helps you, please let me know:

  • 🐛 Open an issue — bugs, missing tools, broken queries

  • 💬 Discussions — "anyone analyzed [ticker]?", "is this the right tool for X?", general questions

  • ⭐ Star the repo — easiest way to signal demand and shape the roadmap

If you actually analyze Korean stocks with Claude/Cursor, I'd genuinely love to hear what queries you run and what's missing.

License

MIT. See LICENSE.

Acknowledgments

Available Tools

6 tools
get_corp_codeA

Resolve Korean company name or stock code to DART corp_code (8-digit).

DART corp_code is the unique identifier needed for financial-statement and detailed-disclosure lookups. Accepts either a 6-digit stock code (exact match) or a Korean company name (partial, case-insensitive).

For non-Korean speakers: search the company's English name first via web search, then pass the official Korean name to this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries burden. Describes as a resolution/lookup tool, implicitly non-destructive. Adds context about input format and case-insensitivity. No contradictions.

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

Conciseness3/5

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

Reasonably concise two-paragraph structure, but second paragraph could be more compact. First sentence clearly states purpose. Some redundancy in explaining it is an 8-digit identifier.

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?

Complete for a simple tool with one parameter and no output schema. Covers input format, behavior, and provides guidance for non-Korean speakers. No missing details for the agent to use it correctly.

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?

With 0% schema coverage, description compensates by explaining the 'query' parameter accepts either a 6-digit stock code or Korean company name, and is partial and case-insensitive. Adds significant meaning beyond the schema.

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?

Clearly states it resolves Korean company name or stock code to DART corp_code, specifying the unique identifier's role. Distinguishes from sibling tools like get_disclosure which likely require corp_code as input.

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

Usage Guidelines4/5

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

Provides explicit guidance: accepts stock code (exact) or Korean name (partial, case-insensitive). Includes a workflow hint for non-Korean speakers. However, does not explicitly state when not to use or list alternatives.

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

get_disclosureB

Fetch metadata + viewer URL for a specific DART filing.

v0.1 returns the canonical dart.fss.or.kr viewer URL. v0.2 will add in-process body extraction (DART filings are zipped XBRL).

ParametersJSON Schema
NameRequiredDescriptionDefault
rcept_noYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It mentions versioning and the nature of filings (zipped XBRL) but does not state read-only nature, auth needs, or error handling.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, version details in subsequent sentences. No fluff; every sentence earns its place.

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

Completeness3/5

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

With only one parameter, no output schema, and no annotations, the description is adequate but misses details about return value structure and prerequisites (e.g., needing a disclosure list first).

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

Parameters2/5

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

Schema coverage is 0% because the description does not explain the required parameter 'rcept_no' (format, example, or source). It fails to add meaning beyond the schema.

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 clearly states the action 'fetch' and the resource: metadata + viewer URL for a specific DART filing. It distinguishes from siblings like get_disclosure_list, which retrieves multiple filings.

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

Usage Guidelines3/5

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

The description implies usage through version info but does not explicitly state when to use this tool versus alternatives (e.g., get_disclosure_list for lists). No when-not or exclusion guidance.

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

get_disclosure_listA

List recent DART disclosures for a Korean-listed company.

Returns filing metadata (date, title, type, receipt number) for the last days calendar days. Use rcept_no with get_disclosure to open a specific filing.

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes
daysNo

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided. The description does not mention side effects, permissions, or limitations. While it implies a read-only listing, it lacks explicit confirmation or details on pagination, ordering, or return limits.

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

Conciseness5/5

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

The description is three sentences, front-loaded with purpose, and contains no redundant information. Every sentence adds value.

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

Completeness4/5

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

With no output schema, the description covers returned fields (metadata). However, it could mention whether results are a list, any default ordering, or maximum items. Still sufficient for a simple listing tool.

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

Parameters3/5

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

Schema description coverage is 0%. The description explains the 'days' parameter (lookback period) but does not detail 'stock_code' format or constraints. Given only two parameters, the description adds partial value but not enough to fully compensate.

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 clearly states the tool lists recent DART disclosures for a Korean-listed company and specifies the returned metadata (date, title, type, receipt number). It distinguishes from sibling 'get_disclosure' by mentioning how to use the returned receipt number.

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

Usage Guidelines4/5

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

It provides guidance on using the result with 'get_disclosure', but does not explicitly state when to avoid this tool or contrast with other siblings like 'get_corp_code' or 'get_financial_statement'. However, the implicit differentiation is clear.

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

get_financial_statementA

Full XBRL financial statements for a Korean company.

Returns every account line from the periodic report. Use get_corp_code first to resolve a name/ticker to the 8-digit corp_code.

Args: corp_code: 8-digit DART code. year: Business year (e.g. 2025). quarter: "Q1" / "H1" / "Q3" / "FY" (default "FY" = annual report). fs_div: "CFS" (consolidated, default) or "OFS" (separate).

ParametersJSON Schema
NameRequiredDescriptionDefault
corp_codeYes
yearYes
quarterNoFY
fs_divNoCFS

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the tool returns every account line, implying a read operation, but does not mention authorization needs, rate limits, or any side effects. This is adequate for a straightforward data retrieval tool but lacks deeper context.

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

Conciseness5/5

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

The description is concise: a one-line summary followed by a bulleted list of parameters with defaults. Every sentence is necessary and contributes to understanding the tool without redundancy.

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

Completeness4/5

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

For a tool with 4 parameters (2 required) and no output schema, the description covers the purpose, parameters, and a prerequisite step. It could mention the format or structure of the returned data more explicitly, but 'Full XBRL financial statements' gives adequate context. Overall, it is nearly complete.

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

Parameters5/5

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

The input schema has 0% description coverage (no parameter descriptions), but the tool description fully compensates by explaining each parameter: corp_code as '8-digit DART code', year as 'Business year (e.g. 2025)', quarter with default 'FY' and valid values, and fs_div with defaults and meaning ('CFS' vs 'OFS'). This adds significant meaning beyond the schema.

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 clearly states it returns 'Full XBRL financial statements for a Korean company' and 'every account line from the periodic report', which is a specific verb-resource combination. It distinguishes itself from siblings by referencing `get_corp_code` as a prerequisite, setting it apart from other disclosure or quote tools.

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

Usage Guidelines4/5

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

The description explicitly instructs to 'Use `get_corp_code` first to resolve a name/ticker to the 8-digit corp_code', providing clear context for when to use the tool. However, it does not discuss when not to use it or mention alternative tools beyond this prerequisite.

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

get_stock_quoteA

Daily OHLCV bars for a Korean-listed stock (KOSPI/KOSDAQ).

Auto-detects the market by trying .KS then .KQ. Prices in KRW. v0.1 uses yfinance (no API key required); v0.2 may add official KRX OpenAPI for intraday and accurate market cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes
daysNo

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses auto-detection logic (tries .KS then .KQ), data source (yfinance), no API key requirement, version info, and limitations (no intraday yet). This is good transparency for a simple tool, though rate limits and error handling are not mentioned.

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 concise (3 sentences) but includes version history and future plans, which add utility. The key information (market, price, source) is front-loaded. Could be slightly tighter by omitting version details, but still good.

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

Completeness3/5

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

Given the tool's simplicity and lack of output schema, the description covers purpose, data source, and limitations. However, it does not describe the output structure (OHLCV fields) or clarify parameter usage. It is adequate but not complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It does not explain the expected format of 'stock_code' (e.g., 6-digit number) or the meaning of 'days'. The auto-detection mention is indirect. Parameter details are insufficient.

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 clearly states it retrieves daily OHLCV bars for Korean-listed stocks on KOSPI/KOSDAQ, with price in KRW. It specifies the verb 'get' and resource 'stock quote', and distinguishes from sibling tools which handle corporate data, disclosures, and financial statements.

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

Usage Guidelines3/5

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

The description provides context about auto-detecting market and version limitations (v0.1 uses yfinance, v0.2 may add intraday), but does not explicitly state when to use this tool vs alternatives or when not to use it. Usage is implied rather than direct.

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

get_today_dateA

Return today's date in KST and UTC (YYYYMMDD format).

Use before any date-range query — Korean market APIs require YYYYMMDD and KST is the trading-day timezone.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the output includes both KST and UTC dates in YYYYMMDD format. However, it does not specify the exact output structure (e.g., string or object) which is a minor gap. For such a simple tool, this is sufficient.

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

Conciseness5/5

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

The description is two sentences long, front-loading the purpose and then providing usage guidance. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given the tool has no parameters, no output schema, and the description covers purpose and usage, it is mostly complete. However, the phrasing 'Return today's date in KST and UTC' is slightly ambiguous regarding whether it returns two separate values or one. A bit more clarity on the output structure would improve completeness.

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?

The input schema has zero parameters, and schema description coverage is 100% by default. The description does not need to add parameter information. Baseline is 4 for zero-parameter tools.

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 clearly states the tool returns today's date in KST and UTC in YYYYMMDD format. It is distinct from sibling tools which focus on corporate data, disclosures, financials, and stock quotes, making its purpose as a date utility clear.

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?

The description explicitly advises use 'before any date-range query' and explains the rationale: Korean market APIs require YYYYMMDD format and KST is the trading-day timezone. This provides clear context for when to use the tool.

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.

  1. 6 tool updatesv0.1.3
    • First observedget_corp_code
    • First observedget_disclosure
    • First observedget_disclosure_list
    • First observedget_financial_statement
    • First observedget_stock_quote
    • First observedget_today_date

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: company code resolution, filing metadata retrieval, filing listing, financial statements, stock quotes, and date utility. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent 'verb_noun' pattern in snake_case (e.g., get_corp_code, get_disclosure). This makes the tool set predictable and easy to navigate.

Tool Count5/5

With 6 tools, the server is well-scoped for its purpose. Each tool addresses a core aspect of Korean stock data access without unnecessary bloat or missing essentials.

Completeness4/5

The tool set covers key workflows: company lookup, disclosure browsing and retrieval, financial statements, stock quotes, and a date utility. Minor gaps like missing a dedicated search tool are mitigated by existing partial-match capabilities.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to query Korean listed companies' financial statements, public disclosures, executive information, and shareholder structures in real-time using the DART API.
    2
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to access Korean corporate disclosure data from DART, allowing natural language queries about companies, financial statements, and disclosures.
    27
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-powered analysis of Korean stock market data and corporate disclosures using official DART and KRX APIs.
    121
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with real-time access to Korean listed companies' disclosures, financial statements, and corporate information via the DART API.
    4
    MIT