kospi-kosdaq
This server provides KOSPI/KOSDAQ stock data including:
Lookup of ticker symbols and names
OHLCV (Open/High/Low/Close/Volume) data
Market capitalization data
Fundamental data (PER/PBR/Dividend Yield)
Trading volume by investor type
Available as a PyPI package that can be installed via the Python package manager to enable the KOSPI/KOSDAQ stock data functionality.
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., "@kospi-kosdaq show me Samsung Electronics stock data for the past week"
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.
kospi-kosdaq-stock-server
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_passwordImportant: 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 chromiumInstalling via Smithery
npx -y @smithery/cli install @dragon1086/kospi-kosdaq-stock-server --client claudeManual 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 chromiumConfiguration for Claude Desktop
macOS
Open the config file:
code ~/Library/Application\ Support/Claude/claude_desktop_config.jsonAdd 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
Open the config file at
%APPDATA%/Claude/claude_desktop_config.jsonAdd the same configuration as above
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 symboldetail(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 -fEnvironment Variables for Docker
Create a .env file:
KAKAO_ID=your_kakao_id
KAKAO_PW=your_kakao_passwordTroubleshooting
"KakaoTalk login notification" popup
On first login, Kakao may require approval via KakaoTalk:
Run with
headless=Falseto see the browserApprove the login in KakaoTalk
Cookies will be saved for future sessions
401 Unauthorized / Session Expired
Session expires after ~4 hours. The server auto-renews, but if it fails:
Delete
~/.krx_session.jsonRestart 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 libasound2Architecture
┌─────────────────────────────────────────────────────┐
│ 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 toolsget_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
Inputs: fromdate (required), todate (required), ticker (required), freq.
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
Inputs: fromdate (required), todate (required), ticker (required).
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
Inputs: fromdate (required), todate (required), ticker (required).
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
Inputs: fromdate (required), todate (required), ticker (required), adjusted.
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.)
Inputs: fromdate (required), todate (required), ticker (required).
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": "카카오", ...}
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for real-time China A-share stock quotes, indices and market data.
MCP server for Financial Modeling Prep API with 250+ financial data tools
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
Hosted MCP server for Indian market quotes, option-chain Greeks and multi-broker telemetry.
1
Related MCP Servers
- ISC
- FlicenseAqualityDmaintenanceMCP 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-
- AlicenseAqualityCmaintenanceMCP server wrapping Toss Securities Open API, enabling stock price queries and trading for Korean and US stocks via natural language.36265 npmMIT
- AlicenseAqualityDmaintenanceProvides 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.9MIT