Korea Stock Insight MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Korea Stock Insight MCPShow me Samsung Electronics' stock price today."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Korea Stock Insight MCP
mcp-name: io.github.yjhann33-design/korea-stock-insight-mcp
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 |
| Today in KST/UTC (YYYYMMDD) — call before any date-range query |
| Resolve Korean company name or 6-digit ticker → DART corp_code |
| Recent DART filings (date, title, type, receipt no.) |
| Filing metadata + canonical viewer URL |
| Full XBRL financial statements (consolidated/separate, quarterly/annual) |
| 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 account —
uvx korea-stock-insight-mcpand 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
DART OpenAPI by Korea's Financial Supervisory Service
KRX daily prices via yfinance
Model Context Protocol by Anthropic
Available Tools
6 toolsget_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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| rcept_no | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_code | Yes | ||
| days | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| corp_code | Yes | ||
| year | Yes | ||
| quarter | No | FY | |
| fs_div | No | CFS |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_code | Yes | ||
| days | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.3- First observed
get_corp_code - First observed
get_disclosure - First observed
get_disclosure_list - First observed
get_financial_statement - First observed
get_stock_quote - First observed
get_today_date
TDQS
Scored across 6 tools
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.
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.
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.
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
Search company disclosures and financial statements from the Korean market. Retrieve stock profile…
Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Market analyst tools + AI agent: crypto, US equities, options, Korea, fundamentals, macro, backtests
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to query Korean listed companies' financial statements, public disclosures, executive information, and shareholder structures in real-time using the DART API.2-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access Korean corporate disclosure data from DART, allowing natural language queries about companies, financial statements, and disclosures.272MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI-powered analysis of Korean stock market data and corporate disclosures using official DART and KRX APIs.121ISC
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with real-time access to Korean listed companies' disclosures, financial statements, and corporate information via the DART API.4MIT