Skip to main content
Glama
Juuuuuuni

Stock MCP Server

by Juuuuuuni
README.md
# ๐Ÿ“ˆ Stock MCP Server

ํ•œ๊ตญ/๋ฏธ๊ตญ ์ฃผ์‹์˜ ๊ธฐ์ˆ ์  ๋ถ„์„๊ณผ ์ „๋žต ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฌ๋‹์„ ์ œ๊ณตํ•˜๋Š” **Model Context Protocol (MCP) ์„œ๋ฒ„**์ž…๋‹ˆ๋‹ค.
Claude Desktop, Claude Code ๋“ฑ MCP ํ˜ธํ™˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž์—ฐ์–ด๋กœ ์ฐจํŠธ ๋ถ„์„ยท์ข…๋ชฉ ์Šคํฌ๋ฆฌ๋‹์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## โœจ Features

- ๐Ÿ‡ฐ๐Ÿ‡ท **ํ•œ๊ตญ ์ฃผ์‹ ๋ถ„์„** โ€” `pykrx` ๊ธฐ๋ฐ˜ KOSPI/KOSDAQ ์ „ ์ข…๋ชฉ OHLCV + ๊ธฐ์ˆ ์  ์ง€ํ‘œ
- ๐Ÿ‡บ๐Ÿ‡ธ **๋ฏธ๊ตญ ์ฃผ์‹ ๋ถ„์„** โ€” `yfinance` ๊ธฐ๋ฐ˜ NYSE/NASDAQ ์ข…๋ชฉ + ์‹œ๊ฐ€์ด์•ก/PER/52์ฃผ ๊ณ ์ €๊ฐ€
- ๐Ÿ” **์ข…๋ชฉ ๊ฒ€์ƒ‰** โ€” ์ข…๋ชฉ๋ช…์œผ๋กœ ์ข…๋ชฉ์ฝ”๋“œ ์ฐพ๊ธฐ (ํ•œ๊ตญ ์ข…๋ชฉ)
- ๐Ÿ“Š **10๊ฐ€์ง€ Momentum ์ „๋žต + 7๊ฐ€์ง€ Breakout ์ „๋žต** โ€” ๊ณจ๋“ ํฌ๋กœ์Šค๋ถ€ํ„ฐ VCP๊นŒ์ง€
- ๐ŸŽฏ **๋‘ ๊ฐ€์ง€ ์Šคํฌ๋ฆฌ๋‹ ์ฒ ํ•™** โ€” ๐ŸŽ ๋‹ฌ๋ฆฌ๋Š” ๋ง ์žก์•„ํƒ€๊ธฐ vs ๐ŸŒฑ ๊ณง ๋‹ฌ๋ฆด ๋ง ์ฐพ๊ธฐ
- ๐Ÿ”Ž **๋‹ค๋‹จ ์‚ฌ์ „ํ•„ํ„ฐ** โ€” ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆยทTrend TemplateยทRSยท52์ฃผ ๋ฐด๋“œ ๋“ฑ

## ๐Ÿ› ๏ธ Tools

| Tool | ์„ค๋ช… | ์ž…๋ ฅ ์˜ˆ์‹œ |
|------|------|-----------|
| `get_stock_analysis` | ํ•œ๊ตญ ์ข…๋ชฉ ๊ธฐ์ˆ ์  ๋ถ„์„ | `ticker="005930"` (์‚ผ์„ฑ์ „์ž) |
| `get_us_stock_analysis` | ๋ฏธ๊ตญ ์ข…๋ชฉ ๊ธฐ์ˆ ์  ๋ถ„์„ | `symbol="NVDA"` |
| `search_stock` | ์ข…๋ชฉ๋ช… โ†’ ์ข…๋ชฉ์ฝ”๋“œ ๊ฒ€์ƒ‰ | `keyword="์•Œ์ฒด๋ผ"` |
| `screen_kr_momentum` | ๐ŸŽ ํ•œ๊ตญ **๋‹ฌ๋ฆฌ๋Š” ๋ง ์žก์•„ํƒ€๊ธฐ** (Stage 2 ์ถ”์„ธ) | `market="ALL"` |
| `screen_us_momentum` | ๐ŸŽ ๋ฏธ๊ตญ **๋‹ฌ๋ฆฌ๋Š” ๋ง ์žก์•„ํƒ€๊ธฐ** | `symbols=None` (Yahoo ์ž๋™ ์‹œ๋“œ) |
| `screen_kr_breakout` | ๐ŸŒฑ ํ•œ๊ตญ **๊ณง ๋‹ฌ๋ฆด ๋ง ์ฐพ๊ธฐ** (VCPยท๋งค์ง‘ยทStage 1 ๋ง๊ธฐ) | `market="ALL"` |
| `screen_us_breakout` | ๐ŸŒฑ ๋ฏธ๊ตญ **๊ณง ๋‹ฌ๋ฆด ๋ง ์ฐพ๊ธฐ** | `symbols=None` |
| `diagnose_stock` | ํŠน์ • ์ข…๋ชฉ ์ „๋žต ์ง„๋‹จ | `ticker="005930", market="KR"` |

## ๐ŸŽฏ Screening: ๋‘ ๊ฐ€์ง€ ์ฒ ํ•™

### ๐ŸŽ Momentum โ€” ๋‹ฌ๋ฆฌ๋Š” ๋ง ์žก์•„ํƒ€๊ธฐ

์ด๋ฏธ ์ƒ์Šน ์ถ”์„ธ์— ์ง„์ž…ํ•œ ์ข…๋ชฉ์˜ **์ถ”์„ธ ์ง€์†(Stage 2 continuation)** ์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.
O'Neil์˜ CANSLIM, Minervini์˜ Trend Template ์ด๋ก  ๊ธฐ๋ฐ˜.

**ํŒŒ์ดํ”„๋ผ์ธ**
```
์‹œ๋“œ (๋„ค์ด๋ฒ„ ๊ฑฐ๋ž˜๋Ÿ‰/์ƒ์Šน๋ฅ /๊ธ‰๋“ฑ  |  Yahoo most_actives/day_gainers/small_cap_gainers)
  โ†“
โ‘  min_trade_value         โ€” ์œ ๋™์„ฑ
โ‘ก ๋‹น์ผ ๊ณผ์—ด ์ œ์™ธ +10% ์ด์ƒ  โ€” ์ถ”๊ฒฉ๋งค์ˆ˜ ๋ฐฉ์ง€
โ‘ข 20์ผ ๋‚ด ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ โ‰ฅ 3x  โ€” ์ž๊ธˆ ์œ ์ž… ์‹œ๊ทธ๋„
โ‘ฃ Minervini Trend Template โ€” Stage 2 6์กฐ๊ฑด (ON)
โ‘ค 52์ฃผ ๊ณ ์  ๊ทผ์ ‘            โ€” OFF (Trend Template๊ณผ ์ค‘๋ณต)
โ‘ฅ RS vs ์ง€์ˆ˜               โ€” OFF (opt-in, ๊ฐ•ํ•œ ์ข…๋ชฉ๋งŒ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ)
  โ†“
10๊ฐ€์ง€ Momentum ์ „๋žต ์ ์šฉ
```

**์ ์šฉ ์ „๋žต (10)**
- ๊ธฐ์กด 4: ๊ณจ๋“ ํฌ๋กœ์Šค+๊ฑฐ๋ž˜๋Ÿ‰, ๋ˆŒ๋ฆผ๋ชฉ ๋งค์ˆ˜, ๋ชจ๋ฉ˜ํ…€ ๋ŒํŒŒ, ๊ฑฐ๋ž˜๋Ÿ‰ ํญ๋ฐœ
- ์‹ ๊ทœ 6: RSI ๋‹ค์ด๋ฒ„์ „์Šค, MACD ๋‹ค์ด๋ฒ„์ „์Šค, ์Šคํ† ์บ์Šคํ‹ฑ, BB ์Šคํ€ด์ฆˆ, ์ผ๋ชฉ๊ท ํ˜•ํ‘œ ๋ŒํŒŒ, 3์„  ์ •๋ฐฐ์—ด

### ๐ŸŒฑ Breakout โ€” ๊ณง ๋‹ฌ๋ฆด ๋ง ์ฐพ๊ธฐ

์•„์ง ํฌ๊ฒŒ ์›€์ง์ด์ง€ ์•Š์€ **๋งค์ง‘ ๋‹จ๊ณ„ / ๋ŒํŒŒ ์ง์ „** ์ข…๋ชฉ์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.
Mark Minervini์˜ VCP ํŒจํ„ด, Wyckoff ๋งค์ง‘ ์ด๋ก  ๊ธฐ๋ฐ˜.

**ํŒŒ์ดํ”„๋ผ์ธ**
```
์‹œ๋“œ (Momentum๊ณผ ๋™์ผ โ€” ๋งค์ง‘๋„ ๊ฑฐ๋ž˜๋Ÿ‰์— ๋ฐ˜์˜๋จ)
  โ†“
โ‘  min_trade_value
โ‘ก ๋‹น์ผ ๊ณผ์—ด ์ œ์™ธ +10% ์ด์ƒ
โ‘ข ๋ˆ„์  ์ƒ์Šน ํ•œ๋„: ์ตœ๊ทผ 30์ผ +30% ์ด์ƒ ์ œ์™ธ   โ† Breakout ์ „์šฉ
โ‘ฃ 52์ฃผ ๋ฐด๋“œ: ๊ณ ์  ร— 0.85 ์ดํ•˜ AND ์ €์  ร— 1.20 ์ด์ƒ โ† ์ „์šฉ (์ค‘๊ฐ„๊ถŒ๋งŒ)
โ‘ค 20์ผ ๋‚ด ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ โ‰ฅ 2x                    (momentum์˜ 3x๋ณด๋‹ค ์™„ํ™”)
  โ†“
Breakout 7์ „๋žต ์ ์šฉ  (Trend Template / 52w ๊ทผ์ ‘ / RS ๋ชจ๋‘ off)
```

**์ ์šฉ ์ „๋žต (7)**
- ์žฌ์‚ฌ์šฉ 4: ๋ˆŒ๋ฆผ๋ชฉ ๋งค์ˆ˜, ๊ฑฐ๋ž˜๋Ÿ‰ ํญ๋ฐœ, MACD ๋‹ค์ด๋ฒ„์ „์Šค, BB ์Šคํ€ด์ฆˆ
- ์‹ ๊ทœ 3: **VCP ๋ณ€๋™์„ฑ ์ˆ˜์ถ•**, **์กฐ์šฉํ•œ ๋งค์ง‘**, **Stage 1 ๋ง๊ธฐ ์ „ํ™˜**

## ๐Ÿงช ๋‘ ๋ชจ๋“œ ๋น„๊ต

| | ๐ŸŽ Momentum | ๐ŸŒฑ Breakout |
|---|---|---|
| **์ฒ ํ•™** | ์ถ”์„ธ ์ง€์† | ๋งค์ง‘ โ†’ ๋ŒํŒŒ ์ดˆ๊ธฐ |
| **๋ˆ„์  ์ƒ์Šน๋ฅ ** | ์ œํ•œ ์—†์Œ | **30์ผ +30% ์ด์ƒ ์ œ์™ธ** |
| **52์ฃผ ์œ„์น˜** | ๊ณ ์  ๊ทผ์ ‘ ๊ถŒ์žฅ | **๊ณ ์  85% ์ดํ•˜ + ์ €์  120% ์ด์ƒ ๋ฐด๋“œ** |
| **Trend Template** | ON (MA ์ •๋ฐฐ์—ด ์š”๊ตฌ) | OFF |
| **๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ** | 3.0x | **2.0x** (๋งค์ง‘์€ ๋œ ํญ๋ฐœ์ ) |
| **์ „๋žต ๊ฐœ์ˆ˜** | 10๊ฐœ | 7๊ฐœ (์‹ ๊ทœ 3 ํฌํ•จ) |
| **์ ํ•ฉํ•œ ํƒ€์ด๋ฐ** | ์‹œ์žฅ ๊ฐ•์„ธ๊ธฐ, ์ถ”์„ธ ์ถ”์ข… | ์กฐ์ •๊ธฐ ํ›„ ์žฌ์ง„์ž…, ๋ฐ”๋‹ฅ ๋ฐ˜์ „ |

### ์‹ค์ „ ๊ฒฐ๊ณผ ๋น„๊ต ์˜ˆ์‹œ

๋™์ผ ์‹œ์žฅ(KOSPI) ๊ธฐ์ค€:
- **Momentum**: ํผ์Šคํ…(6์ „๋žต ์ถฉ์กฑ) โ€” ์ด๋ฏธ ๋‹ฌ๋ฆฌ๊ณ  ์žˆ๋Š” ์ข…๋ชฉ
- **Breakout**: ๋Œ€์›์ „์„  30์ผ **-20.32%**, 52์ฃผ๊ณ ์  72% ์ง€์ ์—์„œ ๋ˆŒ๋ฆผ๋ชฉ+VCP โ€” ๋งค์ง‘ ์ „ํ˜•

## ๐Ÿ“Š ์‹ ๊ทœ Breakout ์ „๋žต ์„ค๋ช…

### VCP (Volatility Contraction Pattern)
์ตœ๊ทผ 15์ผ์„ 5์ผ์”ฉ 3๊ตฌ๊ฐ„์œผ๋กœ ๋‚˜๋ˆ  ๊ฐ ๊ตฌ๊ฐ„์˜ ๊ณ ์ € ๋ฒ”์œ„(%)๊ฐ€ **์ˆœ์ฐจ ์ถ•์†Œ**๋˜๋Š”์ง€ ํŒ์ •.
์ฝ”์ผ๋ง ์Šคํ”„๋ง ํ˜•ํƒœ โ†’ ๋ŒํŒŒ ์ž„๋ฐ•. (Mark Minervini)

### ์กฐ์šฉํ•œ ๋งค์ง‘ (Silent Accumulation)
์ตœ๊ทผ 20์ผ ๊ฑฐ๋ž˜๋Ÿ‰ ํ‰๊ท ์ด ์ด์ „ 20์ผ ๋Œ€๋น„ **์ฆ๊ฐ€**ํ•˜๊ณ  ๊ธ‰์ฆ์ผ๋„ ์žˆ์ง€๋งŒ,
๊ฐ™์€ 20์ผ ๊ฐ€๊ฒฉ ๋ณ€๋™ํญ์€ **ยฑ8% ์ด๋‚ด** โ†’ ์‹œ์žฅ์— ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์€ ์„ธ๋ ฅ ๋งค์ง‘.

### Stage 1 ๋ง๊ธฐ ์ „ํ™˜
๋ฐ”๋‹ฅ ๋ฐ•์Šค๊ถŒ(Stage 1)์—์„œ ์™„๋งŒํ•œ ์ƒ์Šน(Stage 2 ์ดˆ์ž…)์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ตฌ๊ฐ„.
- MA60 ๊ธฐ์šธ๊ธฐ 1๊ฐœ์›” ์ „ ๋Œ€๋น„ ์ƒ์Šน
- MA20 > MA60 (๋‹จ๊ธฐ ์ƒํ–ฅ ์ „ํ™˜)
- ์ข…๊ฐ€ > MA60 (์ง€์ง€ ํ™•๋ณด)
- BBํญ โ‰ค 20์ผ ํ‰๊ท  (์•„์ง ๋ณ€๋™์„ฑ ๋ฏธํ™•์žฅ)

## ๐Ÿ”Ž ์‚ฌ์ „ํ•„ํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์น˜ํŠธ์‹œํŠธ

### Momentum ์Šคํฌ๋ฆฌ๋„ˆ ๊ณตํ†ต
| ํŒŒ๋ผ๋ฏธํ„ฐ | ๊ธฐ๋ณธ | ์šฉ๋„ |
|---------|------|------|
| `exclude_if_up_pct` | 10.0 | ์˜ค๋Š˜ +10% ์ด์ƒ ์ œ์™ธ. `None`์ด๋ฉด ๋ฏธ์ ์šฉ |
| `spike_threshold` | 3.0 | ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ ๋ฐฐ์œจ |
| `enable_trend_template` | True | Minervini Trend Template |
| `enable_rs_filter` | False | RS ํ•„ํ„ฐ (๊ฐ•ํ•œ ์ข…๋ชฉ๋งŒ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ on) |
| `min_rs_outperformance` | 0.0 | ๋ฒค์น˜๋งˆํฌ ์ดˆ๊ณผ์ˆ˜์ต(pp) ์ž„๊ณ„๊ฐ’ |

### Breakout ์Šคํฌ๋ฆฌ๋„ˆ ๊ณตํ†ต
| ํŒŒ๋ผ๋ฏธํ„ฐ | ๊ธฐ๋ณธ | ์šฉ๋„ |
|---------|------|------|
| `max_cumulative_return_pct` | 30.0 | ์ตœ๊ทผ N์ผ ๋ˆ„์  ์ƒ์Šน๋ฅ  ์ƒํ•œ(%) |
| `cumulative_return_days` | 30 | ๋ˆ„์  ๊ณ„์‚ฐ ๊ตฌ๊ฐ„ |
| `high_ceiling` | 0.85 | 52์ฃผ ๊ณ ์  ร— ์ด ๊ฐ’ ์ดํ•˜๋งŒ ํ†ต๊ณผ |
| `low_floor` | 1.20 | 52์ฃผ ์ €์  ร— ์ด ๊ฐ’ ์ด์ƒ๋งŒ ํ†ต๊ณผ |
| `spike_threshold` | 2.0 | ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ (๋งค์ง‘์€ ์™„ํ™”๋œ ๋ฐฐ์œจ) |

## ๐Ÿ“ฆ Installation

### Prerequisites
- Python 3.13+
- [uv](https://github.com/astral-sh/uv) (๊ถŒ์žฅ)

### Setup
```bash
git clone https://github.com/Juuuuuuni/stock-mcp-server.git
cd stock-mcp-server
uv sync
```

## ๐Ÿš€ Usage

### Claude Desktop ์—ฐ๋™

`~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
๋˜๋Š” `%APPDATA%\Claude\claude_desktop_config.json` (Windows)์— ๋‹ค์Œ์„ ์ถ”๊ฐ€:

```json
{
  "mcpServers": {
    "stock-analyzer": {
      "command": "uv",
      "args": [
        "--directory",
        "/์ ˆ๋Œ€/๊ฒฝ๋กœ/stock-mcp-server",
        "run",
        "python",
        "server.py"
      ]
    }
  }
}
```

### ์ง์ ‘ ์‹คํ–‰
```bash
uv run python server.py
```

## ๐Ÿ’ฌ ๋Œ€ํ™” ์˜ˆ์‹œ

### ๊ฐœ๋ณ„ ์ข…๋ชฉ ๋ถ„์„
```
๐Ÿ‘ค ์‚ผ์„ฑ์ „์ž ์ตœ๊ทผ ๋ถ„์„ํ•ด์ค˜
๐Ÿค– [get_stock_analysis("005930")] โ†’ ํ˜„์žฌ๊ฐ€ / RSI / MACD / ์ถ”์„ธ ํ•ด์„

๐Ÿ‘ค NVDA ํ•œ ๋‹ฌ ์ฐจํŠธ ๋ถ„์„
๐Ÿค– [get_us_stock_analysis("NVDA", days=30)]

๐Ÿ‘ค ์•Œ์ฒด๋ผ ์ข…๋ชฉ์ฝ”๋“œ๊ฐ€ ๋ญ์•ผ?
๐Ÿค– [search_stock("์•Œ์ฒด๋ผ")] โ†’ 347860
```

### ์Šคํฌ๋ฆฌ๋‹ (๋‹ฌ๋ฆฌ๋Š” ๋ง)
```
๐Ÿ‘ค ์ง€๊ธˆ ์ฝ”์Šคํ”ผ์—์„œ ๋œจ๋Š” ์ข…๋ชฉ ์ฐพ์•„์ค˜
๐Ÿค– [screen_kr_momentum(market="KOSPI")]
   โ†’ Stage 2 ์ถ”์„ธ + ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ ์ข…๋ชฉ. ํผ์Šคํ…(6์ „๋žต), ๋Œ€์šฐ๊ฑด์„ค(3์ „๋žต) โ€ฆ

๐Ÿ‘ค ๋ฏธ๊ตญ ์ฃผ์‹์—์„œ ๊ฐ•์„ธ ์ข…๋ชฉ๋งŒ (RS 10pp ์ด์ƒ)
๐Ÿค– [screen_us_momentum(enable_rs_filter=True, min_rs_outperformance=10.0)]
```

### ์Šคํฌ๋ฆฌ๋‹ (๊ณง ๋‹ฌ๋ฆด ๋ง)
```
๐Ÿ‘ค ์ฝ”์Šค๋‹ฅ์—์„œ ๋งค์ง‘ ๋‹จ๊ณ„ ์ข…๋ชฉ ์Šคํฌ๋ฆฌ๋‹
๐Ÿค– [screen_kr_breakout(market="KOSDAQ")]
   โ†’ ๋ˆ„์  ์ƒ์Šน 30% ๋ฏธ๋งŒ + 52์ฃผ ์ค‘๊ฐ„๊ถŒ + VCP/๋งค์ง‘ ํŒจํ„ด

๐Ÿ‘ค ์•„์ง ์•ˆ ์˜ค๋ฅธ ๋ฐ”๋‹ฅ ์ข…๋ชฉ๋งŒ (์ตœ๊ทผ 30์ผ +10% ์ด๋‚ด)
๐Ÿค– [screen_kr_breakout(max_cumulative_return_pct=10.0)]
```

### ๊ฐœ๋ณ„ ์ข…๋ชฉ ์ „๋žต ์ง„๋‹จ
```
๐Ÿ‘ค ์•Œ์ฒด๋ผ ์ง€๊ธˆ ์–ด๋–ค ๋‹จ๊ณ„์•ผ?
๐Ÿค– [diagnose_stock(ticker="347860", market="KR")]
   โ†’ 10์ „๋žต ์ค‘ ์–ด๋А ์กฐ๊ฑด ํ†ต๊ณผํ–ˆ๋Š”์ง€ ์ƒ์„ธ ์ง„๋‹จ
```

## ๐Ÿ“‹ ์ถœ๋ ฅ ์˜ˆ์‹œ

### Momentum ์Šคํฌ๋ฆฌ๋‹ ๊ฒฐ๊ณผ (์š”์•ฝ)
```json
{
  "์Šคํฌ๋ฆฌ๋‹์ผ": "20260413",
  "๋Œ€์ƒ์‹œ์žฅ": "KOSPI",
  "์‹œ๋“œํ›„๋ณด์ˆ˜": 80,
  "ํ•„ํ„ฐ๋ง_๋‹จ๊ณ„๋ณ„_ํ†ต๊ณผ": {
    "๋‹น์ผ๊ณผ์—ด์ œ์™ธ": 64,
    "๊ฑฐ๋ž˜๋Ÿ‰๊ธ‰์ฆ": 31,
    "Trend_Template": 8,
    "52์ฃผ๊ณ ์ ๊ทผ์ ‘": 0,
    "RS": 0
  },
  "ํ•„ํ„ฐ๋ง๊ฒฐ๊ณผ์ˆ˜": 26,
  "๊ฒฐ๊ณผ": [
    {
      "์ข…๋ชฉ์ฝ”๋“œ": "010820",
      "์ข…๋ชฉ๋ช…": "ํผ์Šคํ…",
      "์ „๋žต": "๋ชจ๋ฉ˜ํ…€ ๋ŒํŒŒ",
      "์ ์ˆ˜": "5/5",
      "ํ˜„์žฌ๊ฐ€": 2340,
      "๋“ฑ๋ฝ๋ฅ ": "+4.23%",
      "RSI": 68.4,
      "๊ฑฐ๋ž˜๋Ÿ‰๋น„": "2.1x",
      "20์ผ๋‚ด_์ตœ๋Œ€๊ฑฐ๋ž˜๋Ÿ‰๋ฐฐ์œจ": "8.7x",
      "๋ณต์ˆ˜์ „๋žต": true
    }
  ]
}
```

### Breakout ์Šคํฌ๋ฆฌ๋‹ ๊ฒฐ๊ณผ (์š”์•ฝ)
```json
{
  "์Šคํฌ๋ฆฌ๋‹์ผ": "20260413",
  "๋ชจ๋“œ": "Breakout (๊ณง ๋‹ฌ๋ฆด ๋ง)",
  "๋Œ€์ƒ์‹œ์žฅ": "KOSPI",
  "์‹œ๋“œํ›„๋ณด์ˆ˜": 80,
  "ํ•„ํ„ฐ๋ง_๋‹จ๊ณ„๋ณ„_ํ†ต๊ณผ": {
    "๋‹น์ผ๊ณผ์—ด์ œ์™ธ": 64,
    "๋ˆ„์ ์ƒ์Šนํ•œ๋„": 55,
    "52์ฃผ๋ฐด๋“œ": 22,
    "๊ฑฐ๋ž˜๋Ÿ‰๊ธ‰์ฆ": 12
  },
  "ํ•„ํ„ฐ๋ง๊ฒฐ๊ณผ์ˆ˜": 28,
  "๊ฒฐ๊ณผ": [
    {
      "์ข…๋ชฉ์ฝ”๋“œ": "006340",
      "์ข…๋ชฉ๋ช…": "๋Œ€์›์ „์„ ",
      "์ „๋žต": "๋ˆŒ๋ฆผ๋ชฉ ๋งค์ˆ˜",
      "์ ์ˆ˜": "5/5",
      "ํ˜„์žฌ๊ฐ€": 1245,
      "30์ผ๋ˆ„์ ": "-20.32%",
      "52์ฃผ๊ณ ์ ๋Œ€๋น„": "72.2%",
      "52์ฃผ์ €์ ๋Œ€๋น„": "128.4%",
      "๋ณต์ˆ˜์ „๋žต": true
    }
  ]
}
```

## ๐Ÿงฉ Tech Stack

- **[FastMCP](https://github.com/modelcontextprotocol/python-sdk)** โ€” MCP ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ
- **[pykrx](https://github.com/sharebook-kr/pykrx)** โ€” ํ•œ๊ตญ๊ฑฐ๋ž˜์†Œ ๋ฐ์ดํ„ฐ
- **[yfinance](https://github.com/ranaroussi/yfinance)** โ€” Yahoo Finance ๋ฐ์ดํ„ฐ
- **[ta](https://github.com/bukosabino/ta)** โ€” ๊ธฐ์ˆ ์  ๋ถ„์„ ์ง€ํ‘œ
- **BeautifulSoup + lxml** โ€” ๋„ค์ด๋ฒ„ ๊ธˆ์œต / Yahoo ์Šคํฌ๋ฆฌ๋„ˆ HTML ํŒŒ์‹ฑ
- **pandas** โ€” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

## ๐Ÿ“š References

- William J. O'Neil โ€” *How to Make Money in Stocks* (CANSLIM)
- Mark Minervini โ€” *Trade Like a Stock Market Wizard* (Trend Template, VCP)
- Richard Wyckoff โ€” ๊ฐ€๊ฒฉ-๊ฑฐ๋ž˜๋Ÿ‰ ๋งค์ง‘/๋ถ„์‚ฐ ์ด๋ก 
- Stan Weinstein โ€” *Secrets for Profiting in Bull and Bear Markets* (Stage Analysis)

## ๐Ÿ“„ License

MIT

TDQS

A4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: diagnosis, analysis (KR/US), screening by strategy and market, and ticker search. There is no overlap between tools; even the screening tools are differentiated by market and strategy type.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., diagnose_stock, get_stock_analysis, screen_kr_breakout). The naming scheme is predictable and uniform across all tools.

Tool Count5/5

With 8 tools, the server is well-scoped for stock analysis and screening. It covers core functionalities without being overly numerous or too sparse, providing a focused yet comprehensive set.

Completeness4/5

The tool set covers analysis, diagnosis, screening for both markets, and ticker search. Minor gaps exist, such as the absence of a dedicated quote tool, but the analysis tools include OHLCV. Overall, the surface is thorough for its domain.

Maintenance

ActivityInactive
ResponsivenessNo issues