Conservative, data-honest Korean equity analysis MCP server (DART + KRX)
Korea Stock MCP demonstrates strong fundamentals with clear action-verb naming (get_*, search_*), well-structured descriptions for most tools (150-250 chars, balancing specificity with brevity), and comprehensive input schemas with proper types and parameter descriptions. Tool annotations (readOnlyHint, idempotentHint, destructiveHint) are correctly applied to the ping tool. However, output schemas are not explicitly documented in the tool definitions themselves, the descriptions mention what is returned (e.g., 'ticker, name, market and sector' for search_company) but formal schema documentation is absent. Risk handling is exceptional: ratio computation logic explicitly prevents fabricated values via null-safe functions (src/app/analysis/ratios.py), and the get_risk_flags tool documents that unavailable checks are listed separately. The codebase shows mature error handling philosophy (mask_error_details=True, ToolError/DartError passed through). Naming could be slightly more specific, search_company does not distinguish between ticker-code search vs. name search, though the description clarifies this. No security issues detected in tool parameters (no credentials exposed). Per-tool analysis reveals strong consistency across the 6 tools: all follow READ_ONLY pattern, all have verb-noun names, all include meaningful parameters with type and description constraints.
Retrieves audited annual financial statements (revenue, operating income, net income, balance sheet, cash flows) and profitability/stability/growth ratios for a Korean listed company from DART(전자공시) filings, via Korea Stock MCP(한국주식 분석). Consolidated statements preferred; missing items are null, never estimated.
Retrieves the latest quote snapshot for a Korean stock — price, market cap, 52-week high/low, volume — with a market-cap consistency check, via Korea Stock MCP(한국주식 분석). Every value carries its as-of date; missing data is returned as null, never fabricated.
Detects financial red flags for a Korean listed company — high debt ratio, low interest coverage, negative operating cash flow streaks, revenue decline, capital impairment, earnings-cash divergence — plus recent DART(전자공시) disclosures highlighted by risk keywords, via Korea Stock MCP(한국주식 분석). Checks that could not run are listed separately, never silently passed.
Computes a conservative valuation for a Korean stock — PER/PBR multiples from filed EPS/BPS and a three-scenario (pessimistic/neutral/optimistic) value range with all assumptions disclosed — via Korea Stock MCP(한국주식 분석). Provides a range, not a price target; no buy/sell recommendations.
Output schemas not explicitly documented in tool definitions. Descriptions mention returned fields (e.g., 'ticker, name, market and sector') but lack formal JSON Schema response type documentation. This forces LLMs to infer structure from prose rather than parsing machine-readable schema.
No pagination parameters visible for search_company despite description stating 'Returns up to 20 matches'. If results exceed 20, there is no mechanism for LLMs to fetch additional pages. Per Arcade baseline, discovery tools should support limit/offset and return total_count.
search_company parameter 'query' uses free-form string without documented format constraints or examples of valid ticker formats (6-digit code clarified in description, but not in schema). Description says '6-digit ticker code' but no regex pattern or enum alternatives provided in schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 74 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Health check for Korea Stock MCP(한국주식 분석 서버). Returns 'pong'.
Searches Korean listed companies (KOSPI/KOSDAQ) by company name or 6-digit ticker code via Korea Stock MCP(한국주식 분석). Returns up to 20 matches with ticker, name, market and sector.
get_financials 'years' parameter defaults to 5 and accepts range 2-10, but max constraint is only documented in prose description ('range: 2-10'). LLMs cannot parse natural language constraints reliably; should use JSON Schema minimum/maximum fields.
get_risk_flags 'disclosure_days' parameter similarly lacks JSON Schema minimum/maximum encoding. Range constraint '7-365 days' is documented in description only, not in schema properties.