Skip to main content
Glama
dragon1086

kospi-kosdaq

by dragon1086

kospi-kosdaq-stock-server

PyPI version

An MCP server that provides KOSPI/KOSDAQ stock data from KRX Data Marketplace.

What's New in v0.3.0

Since December 27, 2024, KRX Data Marketplace requires Kakao/Naver login for data access. This version implements:

  • Direct KRX API integration with Kakao OAuth login

  • Playwright-based headless browser for authentication

  • Automatic session management with 4-hour timeout and auto re-login

  • No more pykrx dependency for core functionality

Related MCP server: kookmin-stock

Features

  • Lookup KOSPI/KOSDAQ ticker symbols and names

  • Retrieve OHLCV (Open/High/Low/Close/Volume) data for stocks

  • Retrieve market capitalization data

  • Retrieve fundamental data (PER/PBR/Dividend Yield)

  • Retrieve trading volume by investor type (institutional, foreign, individual)

  • Retrieve index OHLCV data (KOSPI, KOSDAQ indices)

Requirements

  • Python 3.10+

  • Kakao account (2FA must be disabled)

  • Playwright Chromium browser

Environment Variables

# Required: Kakao login credentials
KAKAO_ID=your_kakao_id
KAKAO_PW=your_kakao_password

Important: Your Kakao account must have 2-step verification (2FA) disabled. On first login, you may need to approve the login request via KakaoTalk.

Installation

Prerequisites

# Install Playwright and Chromium browser
pip install playwright
playwright install chromium

Installing via Smithery

npx -y @smithery/cli install @dragon1086/kospi-kosdaq-stock-server --client claude

Manual Installation

# Create and activate a virtual environment
uv venv .venv
source .venv/bin/activate  # On Unix/macOS
# .venv\Scripts\activate   # On Windows

# Install the package
uv pip install kospi-kosdaq-stock-server

# Install Playwright browser
playwright install chromium

Configuration for Claude Desktop

macOS

  1. Open the config file:

code ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. Add the server configuration:

{
  "mcpServers": {
    "kospi-kosdaq": {
      "command": "uvx",
      "args": ["kospi_kosdaq_stock_server"],
      "env": {
        "KAKAO_ID": "your_kakao_id",
        "KAKAO_PW": "your_kakao_password"
      }
    }
  }
}

Windows

  1. Open the config file at %APPDATA%/Claude/claude_desktop_config.json

  2. Add the same configuration as above

  3. Restart Claude Desktop

Available Tools

load_all_tickers

Loads all ticker symbols and names for KOSPI and KOSDAQ.

  • No arguments required

  • Returns: Dictionary mapping ticker codes to stock names

get_stock_ohlcv

Retrieves OHLCV (Open/High/Low/Close/Volume) data for a specific stock.

  • fromdate (string, required): Start date (YYYYMMDD)

  • todate (string, required): End date (YYYYMMDD)

  • ticker (string, required): Stock ticker symbol (e.g., "005930")

  • adjusted (boolean, optional): Use adjusted prices (default: True)

get_stock_market_cap

Retrieves market capitalization data for a specific stock.

  • fromdate (string, required): Start date (YYYYMMDD)

  • todate (string, required): End date (YYYYMMDD)

  • ticker (string, required): Stock ticker symbol

get_stock_fundamental

Retrieves fundamental data (PER/PBR/Dividend Yield) for a specific stock.

  • fromdate (string, required): Start date (YYYYMMDD)

  • todate (string, required): End date (YYYYMMDD)

  • ticker (string, required): Stock ticker symbol

get_stock_trading_volume

Retrieves trading volume by investor type for a specific stock.

  • fromdate (string, required): Start date (YYYYMMDD)

  • todate (string, required): End date (YYYYMMDD)

  • ticker (string, required): Stock ticker symbol

  • detail (boolean, optional): If true, returns 12 investor types; if false (default), returns 5 aggregated types

get_index_ohlcv

Retrieves OHLCV data for market indices.

  • fromdate (string, required): Start date (YYYYMMDD)

  • todate (string, required): End date (YYYYMMDD)

  • ticker (string, required): Index ticker (e.g., "1001" for KOSPI, "2001" for KOSDAQ)

  • freq (string, optional): Frequency - "d" (daily), "m" (monthly), "y" (yearly). Default: "d"

Available Resources

stock://tickers

Returns all KOSPI/KOSDAQ ticker symbols and names.

stock://index-tickers

Returns index ticker information:

  • KOSPI: 1001, KOSPI 200: 1028, KOSPI 100: 1034, KOSPI 50: 1035

  • KOSDAQ: 2001, KOSDAQ 150: 2203

stock://data-sources

Returns current data source status.

Docker Support

Using Docker Compose

# Build and run
docker-compose up -d

# View logs
docker-compose logs -f

Environment Variables for Docker

Create a .env file:

KAKAO_ID=your_kakao_id
KAKAO_PW=your_kakao_password

Troubleshooting

"KakaoTalk login notification" popup

On first login, Kakao may require approval via KakaoTalk:

  1. Run with headless=False to see the browser

  2. Approve the login in KakaoTalk

  3. Cookies will be saved for future sessions

401 Unauthorized / Session Expired

Session expires after ~4 hours. The server auto-renews, but if it fails:

  1. Delete ~/.krx_session.json

  2. Restart the server

Linux Headless Environment

# Install required packages on Ubuntu/Debian
apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
    libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2

Architecture

┌─────────────────────────────────────────────────────┐
│                MCP Server (FastMCP)                 │
│              kospi_kosdaq_stock_server.py           │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│               KRXDataClient                         │
│  - get_market_ohlcv()                               │
│  - get_market_cap()                                 │
│  - get_market_fundamental()                         │
│  - get_market_trading_volume_by_date()              │
│  - get_index_ohlcv()                                │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│             KakaoAuthManager                        │
│  - Playwright headless browser                      │
│  - Kakao OAuth login                                │
│  - Session cookie management                        │
│  - Auto re-login on session expiry (4h)             │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│           KRX Data Marketplace                      │
│             data.krx.co.kr                          │
└─────────────────────────────────────────────────────┘

Known Limitations

  • Kakao accounts with 2FA enabled are not supported

  • First login may require KakaoTalk approval

  • Session validity: ~4 hours (auto-renewal supported)

  • Naver login is not yet implemented

Usage Example

Human: Please load all available stock tickers.
Assistant: I'll load all KOSPI and KOSDAQ stock tickers.

> Using tool 'load_all_tickers'...
Successfully loaded 2,738 stock tickers.
Human: Show me Samsung Electronics' stock data for December 2024.
Assistant: I'll retrieve Samsung Electronics' (005930) OHLCV data.

> Using tool 'get_stock_ohlcv'...
Date        Open      High      Low       Close     Volume
2024-12-20  53,800    54,200    53,500    53,900    8,234,521
2024-12-19  54,000    54,300    53,700    53,800    7,123,456
...

License

MIT License

Contributing

Issues and pull requests are welcome!

Changelog

v0.3.0 (2025-01-04)

  • Breaking: Removed pykrx dependency for core functionality

  • Added KRX Data Marketplace direct integration with Kakao OAuth

  • Added Playwright-based headless authentication

  • Added automatic session management

  • Added index OHLCV support

v0.2.x

  • pykrx-based implementation (deprecated due to KRX login requirement)

Available Tools

6 tools
get_index_ohlcvA

Retrieves OHLCV data for a specific index.

Args:
    fromdate (str): Start date for retrieval (YYYYMMDD)
    todate   (str): End date for retrieval (YYYYMMDD)
    ticker   (str): Index ticker symbol (e.g., 1001 for KOSPI, 2001 for KOSDAQ)
    freq     (str, optional): d - daily / m - monthly / y - yearly. Defaults to 'd'.

Returns:
    DataFrame:
        >> get_index_ohlcv("20210101", "20210130", "1001")
                       Open     High      Low    Close       Volume    Trading Value
        Date
        2021-01-04  2874.50  2946.54  2869.11  2944.45  1026510465  25011393960858
        2021-01-05  2943.67  2990.57  2921.84  2990.57  1519911750  26548380179493
        2021-01-06  2993.34  3027.16  2961.37  2968.21  1793418534  29909396443430
        2021-01-07  2980.75  3055.28  2980.75  3031.68  1524654500  27182807334912
        2021-01-08  3040.11  3161.11  3040.11  3152.18  1297903388  40909490005818
ParametersJSON Schema
NameRequiredDescriptionDefault
fromdateYes
todateYes
tickerYes
freqNod

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by specifying the return format (DataFrame), showing example output structure, and explaining parameter formats. However, it doesn't mention potential limitations like rate limits, authentication needs, or data availability constraints.

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?

Well-structured with purpose statement, parameter documentation, return specification, and concrete example. Every sentence adds value - no redundant information. The example output is appropriately detailed to illustrate the DataFrame structure.

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 data retrieval tool with no annotations and no output schema, the description provides excellent context about parameters and return format. The example DataFrame shows exactly what to expect. Minor deduction because it doesn't address potential error conditions or data source limitations.

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?

Given 0% schema description coverage, the description compensates excellently by explaining all 4 parameters with clear semantics: date formats (YYYYMMDD), ticker examples (1001 for KOSPI), frequency options (d/m/y), and default values. The example call demonstrates proper parameter usage.

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's purpose with specific verb ('Retrieves') and resource ('OHLCV data for a specific index'). It distinguishes from sibling tools like get_stock_ohlcv by specifying it's for indices rather than individual stocks.

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 context through parameter explanations and example, but doesn't explicitly state when to use this tool versus alternatives like get_stock_ohlcv. No explicit guidance on when-not-to-use or comparison with sibling tools is provided.

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

get_stock_fundamentalA

Retrieves fundamental data (PER/PBR/Dividend Yield) for a specific stock.

Args:
    fromdate (str): Start date for retrieval (YYYYMMDD)
    todate   (str): End date for retrieval (YYYYMMDD)
    ticker   (str): Stock ticker symbol

Returns:
    DataFrame:
        >> get_stock_fundamental("20210104", "20210108", "005930")
                          BPS        PER       PBR   EPS       DIV   DPS
            Date
            2021-01-08  37528  28.046875  2.369141  3166  1.589844  1416
            2021-01-07  37528  26.187500  2.210938  3166  1.709961  1416
            2021-01-06  37528  25.953125  2.189453  3166  1.719727  1416
            2021-01-05  37528  26.500000  2.240234  3166  1.690430  1416
            2021-01-04  37528  26.218750  2.210938  3166  1.709961  1416
ParametersJSON Schema
NameRequiredDescriptionDefault
fromdateYes
todateYes
tickerYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It clearly indicates this is a read operation ('retrieves'), shows the return format with a detailed example, and implies date-range functionality. However, it doesn't disclose potential limitations like rate limits, authentication requirements, data freshness, or error conditions that would be important for an agent.

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 well-structured with clear sections (purpose, Args, Returns, example). Every sentence earns its place, though the detailed example DataFrame takes significant space. The core information is front-loaded with the purpose statement first, making it easy to understand quickly.

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 read-only tool with 3 parameters and no output schema, the description provides substantial context. It clearly explains what data is returned (fundamental metrics), shows the exact return format with a realistic example, and documents all parameters. The main gap is lack of behavioral constraints that would normally come from annotations.

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?

With 0% schema description coverage, the description fully compensates by providing clear parameter documentation in the Args section. It explains what each parameter represents (start date, end date, ticker symbol), shows the expected format (YYYYMMDD), and provides a concrete usage example that demonstrates all three parameters in action.

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 clearly states the tool retrieves fundamental data (PER/PBR/Dividend Yield) for a specific stock, providing a specific verb ('retrieves') and resource ('fundamental data'). It distinguishes from siblings like get_stock_market_cap or get_stock_ohlcv by specifying the type of financial data, though it doesn't explicitly contrast with them.

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?

The description provides no guidance on when to use this tool versus alternatives like get_stock_market_cap or get_stock_ohlcv. It states what the tool does but offers no context about when it's appropriate or what problems it solves compared to sibling tools.

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

get_stock_market_capA

Retrieves market capitalization data for a specific stock.

Args:
    fromdate (str): Start date for retrieval (YYYYMMDD)
    todate   (str): End date for retrieval (YYYYMMDD)
    ticker   (str): Stock ticker symbol

Returns:
    DataFrame:
        >> get_stock_market_cap("20150720", "20150724", "005930")
                          Market Cap  Volume      Trading Value  Listed Shares
        Date
        2015-07-24  181030885173000  196584  241383636000  147299337
        2015-07-23  181767381858000  208965  259446564000  147299337
        2015-07-22  184566069261000  268323  333813094000  147299337
        2015-07-21  186039062631000  194055  244129106000  147299337
        2015-07-20  187806654675000  128928  165366199000  147299337
ParametersJSON Schema
NameRequiredDescriptionDefault
fromdateYes
todateYes
tickerYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves data (implying read-only) and shows an example return format, but doesn't mention rate limits, authentication requirements, data freshness, error conditions, or whether the date range is inclusive/exclusive. The example helps but leaves many behavioral aspects unspecified.

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 well-structured with clear sections (Args, Returns) and uses an example effectively. It's appropriately sized for a 3-parameter tool with no annotations. The only minor inefficiency is repeating the tool name in the example call when it's already clear from context.

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 data retrieval tool with 3 parameters and no annotations, the description provides good coverage: clear purpose, full parameter documentation, and example output format. The main gap is lack of usage guidance relative to sibling tools. Without an output schema, the example return format is particularly valuable.

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?

With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation. It clearly explains all three parameters (fromdate, todate, ticker) with their purposes, formats (YYYYMMDD for dates), and includes a concrete example showing valid values. This adds substantial meaning beyond the bare 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 tool's purpose with a specific verb ('Retrieves') and resource ('market capitalization data for a specific stock'), distinguishing it from siblings like get_stock_fundamental or get_stock_ohlcv which retrieve different types of financial data.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like get_stock_fundamental or get_stock_ohlcv, nor does it explain what makes market capitalization data unique or when it's preferred over other financial metrics.

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

get_stock_ohlcvA

Retrieves OHLCV (Open/High/Low/Close/Volume) data for a specific stock.

Args:
    fromdate (str): Start date for retrieval (YYYYMMDD)
    todate   (str): End date for retrieval (YYYYMMDD)
    ticker   (str): Stock ticker symbol
    adjusted (bool, optional): Whether to use adjusted prices (True: adjusted, False: unadjusted). Defaults to True.

Returns:
    DataFrame:
        >> get_stock_ohlcv("20210118", "20210126", "005930")
                        Open     High     Low    Close   Volume
        Date
        2021-01-26  89500  94800  89500  93800  46415214
        2021-01-25  87300  89400  86800  88700  25577517
        2021-01-22  89000  89700  86800  86800  30861661
        2021-01-21  87500  88600  86500  88100  25318011
        2021-01-20  89000  89000  86500  87200  25211127
        2021-01-19  84500  88000  83600  87000  39895044
        2021-01-18  86600  87300  84100  85000  43227951
ParametersJSON Schema
NameRequiredDescriptionDefault
fromdateYes
todateYes
tickerYes
adjustedNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It clearly indicates this is a read operation ('Retrieves'), implies data retrieval from a source, and shows the return format with an example. However, it lacks details on rate limits, authentication needs, data freshness, or error conditions that would be important for an agent.

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?

Well-structured with clear sections (purpose, args, returns, example). The example is detailed but necessary to show the return format. Slightly verbose due to the full example table, but each section adds value. Could be more front-loaded by moving the example after a brief return description.

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 4-parameter tool with no annotations and no output schema, the description does an excellent job explaining parameters and showing the return format through example. It covers the core functionality well but lacks context about data sources, limitations, or error handling that would make it fully 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 description provides comprehensive parameter documentation beyond the schema's 0% coverage. It explains each parameter's purpose, format requirements (YYYYMMDD for dates), and the adjusted parameter's meaning and default value. The example demonstrates proper usage with concrete values.

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 specific action ('Retrieves OHLCV data') and resource ('for a specific stock'), distinguishing it from siblings like get_stock_fundamental or get_stock_trading_volume. It precisely identifies the data type (Open/High/Low/Close/Volume) and target resource (stock).

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 guidance is provided on when to use this tool versus alternatives like get_index_ohlcv or get_stock_trading_volume. The description mentions only what the tool does, not when it's appropriate relative to sibling tools or any prerequisites for use.

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

get_stock_trading_volumeA

Retrieves trading volume by investor type for a specific stock.

Args:
    fromdate (str): Start date for retrieval (YYYYMMDD)
    todate   (str): End date for retrieval (YYYYMMDD)
    ticker   (str): Stock ticker symbol

Returns:
    DataFrame with columns:
    - Volume (Sell/Buy/Net Buy)
    - Trading Value (Sell/Buy/Net Buy)
    Broken down by investor types (Financial Investment, Insurance, Trust, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
fromdateYes
todateYes
tickerYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the retrieval action and output format (DataFrame with specific columns), but omits details like rate limits, authentication needs, error handling, or data freshness. It adds some context (e.g., breakdown by investor types) but lacks comprehensive behavioral traits.

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 well-structured and appropriately sized, with a clear purpose statement followed by parameter and return details. Every sentence adds value, though it could be slightly more front-loaded by emphasizing the investor type breakdown earlier. No wasted text, but minor room for optimization in flow.

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's moderate complexity (3 parameters, no output schema, no annotations), the description is largely complete. It covers purpose, parameters, and return format in detail. However, it lacks information on behavioral aspects like error cases or data limitations, which would enhance completeness for a tool with no annotations.

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 description adds significant meaning beyond the input schema, which has 0% description coverage. It explicitly defines each parameter (fromdate, todate, ticker) with formats (YYYYMMDD for dates, ticker symbol) and clarifies their roles in date range and stock selection, fully compensating for the schema's lack of documentation.

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's purpose with a specific verb ('Retrieves') and resource ('trading volume by investor type for a specific stock'), distinguishing it from siblings like get_stock_ohlcv (price data) or get_stock_fundamental (financial metrics). It precisely identifies what data is fetched and how it's categorized.

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 for obtaining trading volume breakdowns by investor type, but lacks explicit guidance on when to use this tool versus alternatives like get_stock_ohlcv (which might include volume without investor breakdown) or other siblings. No exclusions or prerequisites are mentioned, leaving context somewhat open-ended.

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

load_all_tickersA

Loads all ticker symbols and names for KOSPI and KOSDAQ into memory.

Returns:
    Dict[str, str]: A dictionary mapping tickers to stock names.
    Example: {"005930": "삼성전자", "035720": "카카오", ...}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the operation ('loads into memory') and return format, but lacks details on performance characteristics (e.g., loading time, memory usage), error handling, or data freshness. The description adds basic context but misses deeper behavioral traits.

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 efficiently structured with two sentences: one stating the purpose and scope, and another detailing the return format with a clear example. Every sentence adds essential value without redundancy, making it easy to parse and understand quickly.

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's simplicity (0 parameters, no output schema, no annotations), the description is reasonably complete. It covers purpose, scope, and return format with an example. However, it could benefit from additional context like data source or update frequency to fully compensate for the lack of annotations and output schema.

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 has zero parameters with 100% schema description coverage, so the schema already fully documents the input structure. The description appropriately doesn't add parameter details, maintaining focus on the tool's purpose and output. Baseline 4 is applied as per rules 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 specific action ('Loads all ticker symbols and names') and resource ('for KOSPI and KOSDAQ into memory'), distinguishing it from sibling tools that focus on specific data like OHLCV, fundamentals, or market cap. It explicitly defines the scope as comprehensive ticker loading rather than filtered queries.

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 implies usage context by specifying it loads 'all' tickers for KOSPI and KOSDAQ, suggesting it should be used when a complete reference dataset is needed. However, it doesn't explicitly state when to use alternatives like sibling tools or provide exclusion criteria, leaving some ambiguity about optimal use cases.

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

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap. get_index_ohlcv retrieves index data, get_stock_ohlcv retrieves stock price data, get_stock_fundamental provides fundamental metrics, get_stock_market_cap gives market capitalization, get_stock_trading_volume shows investor breakdowns, and load_all_tickers provides ticker metadata. The separation between index vs. stock tools and different data types is unambiguous.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with 'get_' or 'load_' prefixes. The naming is perfectly uniform: get_index_ohlcv, get_stock_fundamental, get_stock_market_cap, get_stock_ohlcv, get_stock_trading_volume, and load_all_tickers. This consistency makes the tool set predictable and easy to understand.

Tool Count5/5

With 6 tools, this server is well-scoped for financial data retrieval. Each tool serves a specific, necessary function for stock and index analysis without redundancy. The count is ideal for covering core data needs (price, fundamentals, market cap, volume breakdowns, and ticker metadata) without being overwhelming or insufficient.

Completeness4/5

The tool set covers essential data retrieval for Korean stock market analysis comprehensively, including price data, fundamentals, market cap, trading insights, and ticker information. A minor gap exists in lacking tools for real-time data or more advanced analytics like technical indicators, but the core CRUD-like retrieval operations for the domain are well-covered.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    A
    quality
    C
    maintenance
    MCP server wrapping Toss Securities Open API, enabling stock price queries and trading for Korean and US stocks via natural language.
    36
    40
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides Korean stock market data, including DART electronic disclosures and KRX trading information, enabling users to query company profiles, financial statements, and stock trade details via MCP clients.
    9
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dragon1086/kospi-kosdaq-stock-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server