Skip to main content
Glama

K-Stock MCP

한국어 README

A read-only Model Context Protocol server that plugs the Korean stock market into Claude and other MCP agents: quotes and charts from the KIS Open API, disclosures and financials from OpenDART, and an IPO (공모주) schedule with an equal-allocation (균등배정) calculator.

  • Token handling for KIS is automatic: issued once, cached on disk (24 h validity), paper (mock) and real environments kept apart, paper is the default.

  • Data and calculations only. No order tools. No buy/sell recommendations.

  • stdio transport, runs with uvx, no hosted service: your keys never leave your machine.

Disclaimer. Everything this server returns is informational data, not investment advice. It is not an investment advisory or discretionary service, and it does not recommend securities. Investment decisions and their consequences are entirely your own responsibility. Data may be delayed, incomplete or wrong. Not affiliated with Korea Investment & Securities or the Financial Supervisory Service.

Tools (v0.1, all read-only)

Tool

What it does

Source

search_stock

Company name or code to code, market and type

KIS public symbol master files

get_quote

Price, day range, volume, PER/PBR/EPS/BPS, 10-level order book

KIS inquire-price, inquire-asking-price-exp-ccn

get_ohlcv

Daily/weekly/monthly/yearly candles, optionally adjusted

KIS inquire-daily-itemchartprice

get_balance

Holdings and account summary (paper by default)

KIS inquire-balance

get_ipo_schedule

Upcoming/ongoing IPOs: subscription dates, price, underwriters, optional equal-allocation estimate

OpenDART equity registration statements

get_disclosure

Recent filings for a company, with DART viewer links

OpenDART list.json

get_financials

Key accounts (assets, liabilities, equity, revenue, operating income, net income)

OpenDART fnlttSinglAcnt.json

Every response carries a short notice field with the disclaimer, and the server instructions tell the model not to present output as advice.

Related MCP server: krx-cli

Install in 3 steps

1. Get keys (both free)

2. Install uv and check the server starts:

uvx kstock-mcp --version

3. Add it to your client

Claude Code:

claude mcp add kstock \
  --env KIS_ENV=paper \
  --env KIS_APP_KEY=your-kis-app-key \
  --env KIS_APP_SECRET=your-kis-app-secret \
  --env KIS_ACCOUNT_NO=12345678-01 \
  --env DART_API_KEY=your-dart-api-key \
  -- uvx kstock-mcp

Claude Desktop (claude_desktop_config.json; use the full path to uvx if the app cannot find it):

{
  "mcpServers": {
    "kstock": {
      "command": "uvx",
      "args": ["kstock-mcp"],
      "env": {
        "KIS_ENV": "paper",
        "KIS_APP_KEY": "your-kis-app-key",
        "KIS_APP_SECRET": "your-kis-app-secret",
        "KIS_ACCOUNT_NO": "12345678-01",
        "DART_API_KEY": "your-dart-api-key"
      }
    }
  }
}

You only need the keys for the tools you use: DART tools need DART_API_KEY; KIS tools need the KIS variables; get_balance also needs the account number; search_stock needs no key.

Alternative: pre-PyPI or development version. To run straight from GitHub instead of PyPI, replace uvx kstock-mcp with uvx --from git+https://github.com/ez2sarang/kstock-mcp kstock-mcp (in Claude Desktop: "args": ["--from", "git+https://github.com/ez2sarang/kstock-mcp", "kstock-mcp"]).

Configuration

Variable

Meaning

KIS_ENV

paper (default) or real. Anything else is rejected rather than silently treated as real

KIS_APP_KEY, KIS_APP_SECRET

KIS credentials for the chosen environment

KIS_ACCOUNT_NO

12345678-01, 1234567801 or 12345678 (product code defaults to 01). Or use KIS_CANO + KIS_ACNT_PRDT_CD

DART_API_KEY

OpenDART key

KSTOCK_MCP_CACHE_DIR

Cache directory (default ~/.cache/kstock-mcp): KIS token (mode 0600), symbol master (1 day), DART company codes (7 days)

IPO schedule and equal allocation

Source choice: get_ipo_schedule uses OpenDART equity registration statements (증권신고서, 지분증권) because it is the official, documented, keyed API, so there is no scraping and no robots.txt/terms question. Pre-listing issuers that filed one are treated as IPO candidates. Dates, price text and underwriters come from the latest filing or amendment and can still change before book-building ends. The filing does not contain retail allocation ratios or subscriber counts.

Pass expected_subscribers (and optionally general_ratio_pct, equal_ratio_pct, min_subscription_shares, deposit_rate_pct) to get an equal_allocation_estimate per IPO. The calculation is a pure function (kstock_mcp.allocation.estimate_equal_allocation) and the response lists its formula and assumptions:

general_shares     = floor(total_shares * general_ratio_pct / 100)
equal_shares       = floor(general_shares * equal_ratio_pct / 100)
guaranteed_each    = floor(equal_shares / expected_subscribers)
leftover (lottery) = equal_shares mod expected_subscribers

Real allocations are decided per underwriter, so treat the output as a rough estimate.

Privacy

The server runs locally over stdio. It sends your KIS key/secret to the KIS Open API, your DART key to OpenDART, and downloads KIS's public symbol master files. It has no telemetry and no server of its own. Keys are read from environment variables only, are never written to logs, and error messages never include request URLs.

Development

git clone https://github.com/ez2sarang/kstock-mcp && cd kstock-mcp
uv sync
uv run pytest        # all HTTP is mocked; no network, no keys needed

Dependencies are pinned to exact versions in pyproject.toml and uv.lock. The server uses mcp 2.x, where the former FastMCP class is MCPServer.

Roadmap

v0.2 and later: condition search, portfolio report, IPO alerts. This server stays read-only: order placement is not planned.

License

MIT

Available Tools

7 tools
get_balanceA
Read-onlyIdempotent

Holdings and account summary for the configured KIS account (paper by default). Read-only.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the trailing 'Read-only' adds no credit-bearing information. The genuinely additive piece is '(paper by default)', which tells the agent which trading environment the balances come from and is not present in the 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?

Two short sentences, front-loaded with the payload (holdings and account summary). The final 'Read-only.' is redundant with the annotations and could be cut, keeping it from a perfect score.

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?

An output schema exists, so return structure need not be described, and the annotations carry the safety profile. The description covers scope and environment adequately, though it omits latency/pagination-type behavior (likely irrelevant for a single account summary).

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 tool takes zero parameters, so there are no parameter semantics to document; the baseline for a no-arg tool is 4. The description correctly implies no filtering input is required.

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

Purpose4/5

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

States a specific verb-derived outcome (holdings and account summary) for a specific resource (the configured KIS account), which clearly distinguishes it from the market-data siblings (get_quote, get_ohlcv, get_financials). It does not explicitly name or contrast an alternative, so it falls just short of a 5.

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 (account-level aggregate data for the configured account) but never says when to call this versus the sibling lookups, nor states prerequisites. The 'paper by default' remark gives useful context but is not a when/when-not guideline.

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

get_disclosureA
Read-onlyIdempotent

Recent DART disclosures for a company, newest first, with links to the DART viewer.

NameRequiredDescriptionDefault
daysNoLook-back window in days
kindNoOptional type: A periodic, B major matters, C issuance, D ownership, E other, F audit, I exchange
limitNoMaximum filings (1-100)
symbolYes6-character stock code (preferred) or exact company name

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description usefully adds ordering ('newest first') and return content ('links to the DART viewer'), but says nothing about the limit/window behavior or what happens when no filings exist.

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?

A single front-loaded sentence with no filler: resource, scope, ordering, and return shape are all packed in without repetition of the schema.

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 a full output schema and rich annotations, the description only needs to frame the result set, which it does. A brief note that DART is the Korean regulatory disclosure system would help agents unfamiliar with the acronym, but the essentials are present.

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 100%, so all four parameters (days, kind, limit, symbol) are already documented with defaults and bounds. The description adds no format or syntax detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description gives a specific verb (retrieves/lists), a precise resource (recent DART disclosures), and the ordering (newest first). The resource is clearly distinct from siblings like get_quote or get_financials, though it never explicitly contrasts itself with them, so it falls short of a 5.

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?

Usage is only implied: 'for a company' signals the retrieval context, but there is no explicit when-to-use statement, no prerequisites, and no routing away from siblings such as get_financials or get_ipo_schedule for related corporate-event queries.

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

get_financialsC
Read-onlyIdempotent

Key financial statement accounts (assets, liabilities, equity, revenue, operating income, net income) from DART.

NameRequiredDescriptionDefault
yearNoFiscal year (2015+). Default: last year
reportNoannual, q1, half, or q3annual
symbolYes6-character stock code (preferred) or exact company name
consolidatedNoPrefer consolidated statements (falls back to separate)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, openWorld, so the safety profile is covered. The description adds only the data source 'DART'; it says nothing about fallback behavior (consolidated vs separate, hinted only in the schema), rate limits, coverage limits, or how missing years/periods behave.

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?

A single, front-loaded sentence with no padding or repetition. It is efficient, though it spends its entire budget on return values rather than on usage or behavior.

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 an output schema present and rich annotations, the description does not need to explain return shape, but it also never explains the interaction between report period (q1/half/q3 vs annual) and the returned accounts, which is the main ambiguity an agent faces. Adequate but with a clear gap.

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 100%, so year, report, symbol, and consolidated are all documented in the schema itself. The description contributes nothing to parameter meaning; the enumerated accounts are return-value content, not parameters, so baseline 3 applies.

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

Purpose4/5

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

Names the specific resource (key financial statement accounts) and enumerates the exact line items returned, plus the data source (DART), so an agent knows this is a fundamentals/statements fetch. It does not differentiate itself from close siblings like get_balance or get_disclosure, leaving potential overlap unresolved.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no routing to alternatives such as get_balance or get_disclosure. The agent must infer usage purely from the resource name.

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

get_ipo_scheduleA
Read-onlyIdempotent

Upcoming/ongoing IPO (공모주) schedule from OpenDART equity filings: subscription dates, price text, underwriters, and an optional equal-allocation estimate whose formula and assumptions are in the response.

NameRequiredDescriptionDefault
limitNoMaximum number of IPO candidates (1-30)
days_backNoHow many days of filings to scan (1-90)
equal_ratio_pctNoEqual-allocation share of the general-subscriber shares (%)
deposit_rate_pctNoSubscription deposit rate (%)
general_ratio_pctNoGeneral-subscriber share of the offering (%)
expected_subscribersNoIf set, adds an equal-allocation (균등배정) estimate per IPO using this subscriber count
min_subscription_sharesNoMinimum subscription lot (shares)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds modest value by naming the data source (OpenDART equity filings) and disclosing that the equal-allocation estimate is optional and carries its formula/assumptions in the response, but says nothing about freshness, coverage limits, or failure modes.

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?

A single, front-loaded sentence that names the artifact first and then the returned fields; dense but every clause carries information. The colonic list is slightly packed, keeping it just short of ideal.

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?

An output schema exists, so return-value explanation is not required, and the description covers source, contents, and the optional estimate behavior. Remaining gaps (freshness of filings, interaction between limit and days_back) are minor and largely handled by the schema's own constraints.

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 100%, so all seven parameters (limit, days_back, ratios, expected_subscribers, lot size) are already documented in the schema. The description only lightly ties the equal-allocation estimate to its inputs and does not explain the ratio interplay beyond what the schema states, matching the baseline 3.

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

Purpose4/5

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

States a specific verb+resource: upcoming/ongoing IPO schedule sourced from OpenDART equity filings, and enumerates what it returns (subscription dates, price text, underwriters, optional equal-allocation estimate). This clearly separates it from siblings like get_quote/get_ohlcv (market data) and get_disclosure (generic filings). No explicit sibling comparison, so 4 rather than 5.

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?

Usage is only implied through the temporal scope ("upcoming/ongoing") and the days_back parameter; there is no stated when-to-use/when-not or pointer to an alternative such as get_disclosure for non-IPO filings. An agent can infer the intent but gets no routing guidance.

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

get_ohlcvA
Read-onlyIdempotent

Historical candles (open/high/low/close/volume), oldest first. Up to ~300 rows per call; see 'truncated'.

NameRequiredDescriptionDefault
codeYes6-character stock code, e.g. '005930'
periodNoD daily, W weekly, M monthly, Y yearlyD
adjustedNoUse split/dividend-adjusted prices
end_dateNoYYYYMMDD or YYYY-MM-DD (default: today, KST)
start_dateNoYYYYMMDD or YYYY-MM-DD (default: ~120 days back for daily)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds real behavioral context the annotations lack: rows come oldest-first, are capped at ~300 per call, and truncation is signalled via a 'truncated' field.

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?

Two tight sentences, zero filler, with the resource identified first and the size/truncation caveat second. Every clause carries actionable information.

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 an output schema present and safety annotations supplied, the description need only cover ordering, row cap and truncation — which it does. The remaining gap is that it doesn't say how to retrieve rows beyond the ~300 limit (e.g. by paging with start_date/end_date).

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 100%, so all five parameters including defaults and date formats are already documented in the schema. The description only loosely reinforces the date-range behavior via 'oldest first', adding no syntax beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific resource (historical OHLCV candles) and the ordering, which an agent can distinguish from the quote tool in the sibling list. It never names a sibling explicitly, so differentiation is inferred from the word 'historical' rather than stated.

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

Usage Guidelines2/5

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

Gives no when-to-use, when-not-to-use, or alternative guidance. Nothing tells the agent to prefer get_ohlcv over get_quote, or to fall back to another tool when more than ~300 rows are needed.

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

get_quoteA
Read-onlyIdempotent

Current price, day range, volume, valuation ratios and order book for a stock (KIS, KRX market).

NameRequiredDescriptionDefault
codeYes6-character stock code, e.g. '005930'
include_orderbookNoAlso fetch the 10-level order book (one extra KIS call)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, lowering the burden. The description adds the market scope and the fact that order book data is part of the quote, but says nothing about rate limits, auth requirements, or data freshness beyond the word 'current'.

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?

A single front-loaded sentence with the resource and market scope first and the field list second. No boilerplate, no repetition, nothing that could be cut.

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?

An output schema exists, so return values need no prose explanation, and annotations carry the safety profile. The only real gap is routing guidance against sibling tools like get_ohlcv; market scope and coverage are otherwise sufficient for a two-parameter read 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 coverage is 100%, so both parameters (including the code format and the extra KIS call for the 10-level order book) are fully documented in the schema. The description's mention of 'order book' lightly reinforces include_orderbook but adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

It names a specific resource (a stock quote) and enumerates the exact contents returned — current price, day range, volume, valuation ratios, order book — plus the market scope (KIS, KRX). That is enough to separate it from get_ohlcv and get_financials by content, though it never names a sibling or states an explicit verb.

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?

Usage is only implied: the fields listed (current price, day range) signal a live snapshot rather than historical series, which is the natural contrast with get_ohlcv. There is no explicit when-to-use, when-not-to-use, or prerequisite guidance.

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

search_stockA
Read-onlyIdempotent

Find Korean listed securities (KOSPI/KOSDAQ/KONEX) by name or code. Returns code, name, market, type.

NameRequiredDescriptionDefault
limitNoMaximum results (1-50)
queryYesCompany name (Korean) or stock code, e.g. '삼성전자' or '005930'

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description adds the returned field list, but that duplicates the output schema rather than disclosing new behavior such as result ordering, matching semantics, or rate 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?

Two short sentences, zero filler, with the core purpose and scope front-loaded before the return summary. Every clause carries information.

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?

An output schema exists, so the description need not explain return values, and the market scope plus accepted key types make the tool callable as-is. Minor gaps remain around result ordering and whether matching is exact or partial, but nothing essential is missing for a simple search 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 100% — both 'query' (with Korean example and code format) and 'limit' (1-50) are documented in the schema. The description's 'by name or code' merely restates the query parameter and adds no format or matching semantics beyond it, so baseline 3 applies.

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?

States a specific verb (Find) and resource (Korean listed securities) plus the exact market scope (KOSPI/KOSDAQ/KONEX) and the lookup keys (name or code). An agent can immediately distinguish this lookup tool from the data-fetching siblings like get_quote or get_ohlcv that require an already-known symbol.

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?

Usage is implied by the phrasing 'by name or code' — an agent infers this is the resolution step before calling quote/OHLCV tools. However, it never explicitly says when to use this versus the alternatives, nor states any prerequisites or exclusions, so guidance stays at the implied level.

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. 7 tool updatesv0.1.0
    • First observedget_balance
    • First observedget_disclosure
    • First observedget_financials
    • First observedget_ipo_schedule
    • First observedget_ohlcv
    • First observedget_quote
    • First observedsearch_stock

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a clearly distinct data type or resource: account balance, disclosures, financials, IPO schedule, historical candles, current quote, and symbol lookup. The closest pair (get_ohlcv vs get_quote) is well separated by 'historical candles' versus 'current price', so an agent can select correctly without guessing.

Naming Consistency5/5

All names follow a consistent snake_case verb_noun pattern (get_balance, get_disclosure, get_financials, get_ipo_schedule, get_ohlcv, get_quote, search_stock). The single search_ prefix is a meaningful and standard distinction from the get_ lookup family rather than an inconsistency.

Tool Count5/5

Seven tools is well scoped for a read-only Korean market data server. Each tool covers a distinct data need (quote, candles, financials, disclosures, IPO calendar, lookups, account) and none appear redundant or filler.

Completeness4/5

The read-only data surface is broad and coherent: discovery (search_stock), pricing (get_quote, get_ohlcv), fundamentals (get_financials, get_disclosure, get_ipo_schedule), and account state (get_balance). Minor gaps remain, such as order/trade history or watchlist management, but these are plausibly out of scope for a read-only server.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    MCP server that provides Korean stock market data including indices, top gainers, stock quotes, news, fundamentals, and buy recommendations. Enables LLMs to access real-time and historical Korean stock information.
    6
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to query real-time and historical Korean stock market data from KRX (Korea Exchange) including indices, stocks, ETFs, bonds, derivatives, and commodities via MCP tools and resources.
    20 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides Korean stock market data (KOSPI, KOSDAQ, KONEX) including prices, fundamentals, investor trading, short selling, and indices via MCP protocol, enabling natural language queries from AI agents like ChatGPT and Claude.
    73 PyPI
    3
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time Korean stock market data, including stock prices, rankings, investor trends, and derivatives, via the Korea Investment & Securities OpenAPI. Enables AI models to query and analyze Korean financial data through natural language.
    -