Skip to main content
Glama
Dayoooun

OpenDART MCP Server

by Dayoooun
README.md
# OpenDART MCP Server ๐Ÿ‡ฐ๐Ÿ‡ท

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![Vercel](https://img.shields.io/badge/Vercel-Deployable-black.svg)](https://vercel.com)

ํ•œ๊ตญ ๊ธˆ์œต๊ฐ๋…์› ์ „์ž๊ณต์‹œ์‹œ์Šคํ…œ(DART) API๋ฅผ MCP(Model Context Protocol)๋กœ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

> **AI ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ํ•œ๊ตญ ์ƒ์žฅ๊ธฐ์—…์˜ ๊ณต์‹œ, ์žฌ๋ฌด์ •๋ณด, ๊ธฐ์—…์ •๋ณด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.**
>
> ๐Ÿ“… **์ง€์› ๋ฐ์ดํ„ฐ**: 2023๋…„ ~ 2025๋…„ ์ตœ์‹  (3๋ถ„๊ธฐ) ๋ชจ๋‘ ์กฐํšŒ ๊ฐ€๋Šฅ!

## ๐ŸŽฌ ์‹œ์—ฐ ์˜์ƒ

[![OpenDART MCP ์‹œ์—ฐ](https://img.youtube.com/vi/7U9Go4PiFxA/0.jpg)](https://www.youtube.com/watch?v=7U9Go4PiFxA)

> ๐ŸŽฅ ํด๋ฆญํ•˜๋ฉด YouTube์—์„œ ์‹œ์—ฐ ์˜์ƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

## โœจ ์ฃผ์š” ๊ธฐ๋Šฅ (14๊ฐœ ๋„๊ตฌ)

### ๐Ÿ” ๊ธฐ์—… ๊ฒ€์ƒ‰
| ๊ธฐ๋Šฅ | ์„ค๋ช… |
|------|------|
| `find_company` | **๊ธฐ์—…๋ช…์œผ๋กœ corp_code ๊ฒ€์ƒ‰** (114,951๊ฐœ ์ „์ฒด ๊ธฐ์—…) |

### ๐Ÿ“‹ ๊ณต์‹œ/๊ธฐ์—…์ •๋ณด
| ๊ธฐ๋Šฅ | ์„ค๋ช… |
|------|------|
| `search_disclosures` | ๊ณต์‹œ ๊ฒ€์ƒ‰ (๊ธฐ๊ฐ„, ๊ธฐ์—…, ์‹œ์žฅ ํ•„ํ„ฐ๋ง) |
| `get_company_info` | ๊ธฐ์—… ๊ธฐ๋ณธ์ •๋ณด (ํšŒ์‚ฌ๋ช…, ๋Œ€ํ‘œ์ž, ์—…์ข… ๋“ฑ) |

### ๐Ÿ’ฐ ์žฌ๋ฌด์ •๋ณด
| ๊ธฐ๋Šฅ | ์„ค๋ช… |
|------|------|
| `get_financial_account` | ์ฃผ์š” ์žฌ๋ฌด๊ณ„์ • (์ž์‚ฐ, ๋ถ€์ฑ„, ๋งค์ถœ, ์˜์—…์ด์ต ๋“ฑ) |
| `get_full_financial_statement` | ์ „์ฒด ์žฌ๋ฌด์ œํ‘œ (BS, IS, CF ๋“ฑ) |
| `get_financial_index` | โญ **์ฃผ์š” ์žฌ๋ฌด์ง€ํ‘œ** (ROE, ROA, ๋ถ€์ฑ„๋น„์œจ, PER, PBR ๋“ฑ) |
| `get_dividend_info` | ๋ฐฐ๋‹น ์ •๋ณด |

### ๐Ÿ‘ฅ ์ธ์ ์ •๋ณด
| ๊ธฐ๋Šฅ | ์„ค๋ช… |
|------|------|
| `get_executives` | ์ž„์› ํ˜„ํ™ฉ |
| `get_employees` | ์ง์› ํ˜„ํ™ฉ (ํ‰๊ท  ๊ธ‰์—ฌ, ๊ทผ์†์—ฐ์ˆ˜ ๋“ฑ) |

### ๐Ÿ“ˆ ์ง€๋ถ„์ •๋ณด
| ๊ธฐ๋Šฅ | ์„ค๋ช… |
|------|------|
| `get_largest_shareholders` | ์ตœ๋Œ€์ฃผ์ฃผ ํ˜„ํ™ฉ |
| `get_major_stock` | โญ **๋Œ€๋Ÿ‰๋ณด์œ  ์ƒํ™ฉ๋ณด๊ณ ** (5%๋ฃฐ - 5% ์ด์ƒ ์ฃผ์ฃผ ๋ณ€๋™) |
| `get_executive_stock` | โญ **์ž„์›ยท์ฃผ์š”์ฃผ์ฃผ ์ง€๋ถ„ ๋ณ€๋™** |

### ๐Ÿ’ต ์ž๋ณธ/์ฃผ์‹์ •๋ณด
| ๊ธฐ๋Šฅ | ์„ค๋ช… |
|------|------|
| `get_capital_change` | โญ **์ฆ์ž/๊ฐ์ž ํ˜„ํ™ฉ** |
| `get_treasury_stock` | โญ **์ž๊ธฐ์ฃผ์‹ ์ทจ๋“/์ฒ˜๋ถ„ ํ˜„ํ™ฉ** |

---

## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

### ๋ฐฉ๋ฒ• 1: ๋ฐฐํฌ๋œ ์„œ๋ฒ„ ์‚ฌ์šฉ (๊ถŒ์žฅ) โšก

**๋ณ„๋„ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!**

```
https://dart-mcp-self.vercel.app/sse
```

MCP ํด๋ผ์ด์–ธํŠธ์— ์œ„ URL๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋!

### ๋ฐฉ๋ฒ• 2: ์ง์ ‘ Vercel ๋ฐฐํฌ

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/Dayoooun/dart-mcp)

Fork ํ›„ Vercel์— ์—ฐ๊ฒฐํ•˜๋ฉด ์ž๋™ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

### ๋ฐฉ๋ฒ• 3: ๋กœ์ปฌ ์‹คํ–‰

```bash
git clone https://github.com/Dayoooun/dart-mcp.git
cd dart-mcp

# ์˜์กด์„ฑ ์„ค์น˜ ๋ฐ ์‹คํ–‰
pip install -e .
opendart-mcp
```

---

## โš™๏ธ MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •

### Cursor IDE

`~/.cursor/mcp.json` ํŒŒ์ผ์— ์ถ”๊ฐ€:

```json
{
  "mcpServers": {
    "opendart": {
      "type": "http",
      "url": "https://dart-mcp-self.vercel.app/sse"
    }
  }
}
```

### Claude Desktop

`claude_desktop_config.json`์— ์ถ”๊ฐ€:

```json
{
  "mcpServers": {
    "opendart": {
      "url": "https://dart-mcp-self.vercel.app/sse"
    }
  }
}
```

### ๋กœ์ปฌ ์‹คํ–‰ ์‹œ (stdio)

```json
{
  "mcpServers": {
    "opendart": {
      "command": "opendart-mcp"
    }
  }
}
```

---

## ๐Ÿ“– ์‚ฌ์šฉ ์˜ˆ์‹œ

### ๐Ÿ’ก ํ•ต์‹ฌ: ๊ธฐ์—…๋ช…์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

**corp_code๋ฅผ ๋ชฐ๋ผ๋„ ๋ฉ๋‹ˆ๋‹ค!** `find_company`๋กœ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”:

> "์ธ์‚ฐ๊ฐ€๋ผ๋Š” ํšŒ์‚ฌ ์žฌ๋ฌด์ œํ‘œ ๋ณด์—ฌ์ค˜"

AI๊ฐ€ ์ž๋™์œผ๋กœ:
1. `find_company("์ธ์‚ฐ๊ฐ€")` โ†’ corp_code ํš๋“
2. `get_financial_account(corp_code=...)` โ†’ ์žฌ๋ฌด์ •๋ณด ์กฐํšŒ

### ๊ธฐ๋ณธ ์‚ฌ์šฉ

```
"์‚ผ์„ฑ์ „์ž ๊ธฐ์—… ์ •๋ณด ์•Œ๋ ค์ค˜"
"๋„ค์ด๋ฒ„์˜ 2023๋…„ ์—ฐ๊ฐ„ ์žฌ๋ฌด์ œํ‘œ ๋ณด์—ฌ์ค˜"
"์นด์นด์˜ค ์ง์› ํ˜„ํ™ฉ๊ณผ ํ‰๊ท  ๊ธ‰์—ฌ ์•Œ๋ ค์ค˜"
```

### ์ž˜ ๋ชจ๋ฅด๋Š” ๊ธฐ์—… ์กฐํšŒ

```
"์˜ค๋ฅด๋น„ํ…์ด๋ผ๋Š” ํšŒ์‚ฌ์˜ ์ง์› ํ˜„ํ™ฉ ์•Œ๋ ค์ค˜"
"๋‚˜๋…ธ์”จ์— ์—์Šค ์ž„์› ํ˜„ํ™ฉ ๋ณด์—ฌ์ค˜"
"๋‘์‚ฐ๋กœ๋ณดํ‹ฑ์Šค ์žฌ๋ฌด์ •๋ณด ์กฐํšŒํ•ด์ค˜"
```

### ์˜๋ฌธ/ํ•œ๊ธ€ ๋™์‹œ ๊ฒ€์ƒ‰ ์ง€์›

```
"NAVER ์žฌ๋ฌด์ •๋ณด" โ†’ ๋„ค์ด๋ฒ„ ์ฐพ์Œ
"๋„ค์ด๋ฒ„ ์žฌ๋ฌด์ •๋ณด" โ†’ NAVER ์ฐพ์Œ
"LG ๊ณ„์—ด์‚ฌ ๋ชฉ๋ก" โ†’ LG์ „์ž, LGํ™”ํ•™, LG์—๋„ˆ์ง€์†”๋ฃจ์…˜ ๋“ฑ ์ฐพ์Œ
```

---

## ๐Ÿข ์ฃผ์š” ๊ธฐ์—… ๊ณ ์œ ๋ฒˆํ˜ธ

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๊ธฐ์—…์€ corp_code๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค:

| ๊ธฐ์—…๋ช… | corp_code | ์ข…๋ชฉ์ฝ”๋“œ |
|--------|-----------|----------|
| ์‚ผ์„ฑ์ „์ž | 00126380 | 005930 |
| SKํ•˜์ด๋‹‰์Šค | 00164779 | 000660 |
| LG์ „์ž | 00401731 | 066570 |
| ํ˜„๋Œ€์ž๋™์ฐจ | 00164742 | 005380 |
| ๋„ค์ด๋ฒ„ | 00266961 | 035420 |
| ์นด์นด์˜ค | 00258801 | 035720 |
| ์‚ผ์„ฑSDI | 00126371 | 006400 |
| LGํ™”ํ•™ | 00356361 | 051910 |
| ์…€ํŠธ๋ฆฌ์˜จ | 00421045 | 068270 |
| ํฌ์Šค์ฝ”ํ™€๋”ฉ์Šค | 00126186 | 005490 |

**๊ทธ ์™ธ ๊ธฐ์—…**: `find_company`๋กœ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”! (114,951๊ฐœ ๊ธฐ์—… ์ง€์›)

---

## ๐Ÿ“‹ API ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ€์ด๋“œ

### ๋ณด๊ณ ์„œ ์ฝ”๋“œ (reprt_code)

| ์ฝ”๋“œ | ์„ค๋ช… | ํŠน์ง• |
|------|------|------|
| 11011 | ์‚ฌ์—…๋ณด๊ณ ์„œ (์—ฐ๊ฐ„) | ๊ฐ€์žฅ ์ƒ์„ธ, ์ง์›ํ˜„ํ™ฉ ํฌํ•จ |
| 11012 | ๋ฐ˜๊ธฐ๋ณด๊ณ ์„œ | 6๊ฐœ์›” ์‹ค์  |
| 11013 | 1๋ถ„๊ธฐ๋ณด๊ณ ์„œ | 3๊ฐœ์›” ์‹ค์  |
| 11014 | 3๋ถ„๊ธฐ๋ณด๊ณ ์„œ | 9๊ฐœ์›” ์‹ค์  |

### ์žฌ๋ฌด์ œํ‘œ ๊ตฌ๋ถ„ (fs_div)

| ๊ฐ’ | ์„ค๋ช… |
|----|------|
| CFS | ์—ฐ๊ฒฐ์žฌ๋ฌด์ œํ‘œ (์žํšŒ์‚ฌ ํฌํ•จ, ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ) |
| OFS | ๊ฐœ๋ณ„์žฌ๋ฌด์ œํ‘œ (ํ•ด๋‹น ๋ฒ•์ธ๋งŒ) |

### ์‹œ์žฅ ๊ตฌ๋ถ„ (corp_cls)

| ๊ฐ’ | ์„ค๋ช… |
|----|------|
| Y | ์œ ๊ฐ€์ฆ๊ถŒ์‹œ์žฅ (์ฝ”์Šคํ”ผ) |
| K | ์ฝ”์Šค๋‹ฅ์‹œ์žฅ |
| N | ์ฝ”๋„ฅ์Šค์‹œ์žฅ |
| E | ๊ธฐํƒ€ (๋น„์ƒ์žฅ ๋“ฑ) |

### ์žฌ๋ฌด์ง€ํ‘œ ๋ถ„๋ฅ˜์ฝ”๋“œ (idx_cl_code)

`get_financial_index` API์—์„œ ์‚ฌ์šฉ **(ํ•„์ˆ˜)**:

| ์ฝ”๋“œ | ์„ค๋ช… | ํฌํ•จ ์ง€ํ‘œ |
|------|------|----------|
| M210000 | ์ˆ˜์ต์„ฑ์ง€ํ‘œ | ROE, ROA, ์˜์—…์ด์ต๋ฅ , ์ˆœ์ด์ต๋ฅ  ๋“ฑ |
| M220000 | ์•ˆ์ •์„ฑ์ง€ํ‘œ | ๋ถ€์ฑ„๋น„์œจ, ์œ ๋™๋น„์œจ, ๋‹น์ขŒ๋น„์œจ ๋“ฑ |
| M230000 | ์„ฑ์žฅ์„ฑ์ง€ํ‘œ | ๋งค์ถœ์ฆ๊ฐ€์œจ, ์˜์—…์ด์ต์ฆ๊ฐ€์œจ ๋“ฑ |
| M240000 | ํ™œ๋™์„ฑ์ง€ํ‘œ | ์ด์ž์‚ฐํšŒ์ „์œจ, ์žฌ๊ณ ์ž์‚ฐํšŒ์ „์œจ ๋“ฑ |

---

## ๐Ÿ”ง find_company ์ƒ์„ธ

๊ธฐ์—…๋ช…์œผ๋กœ corp_code๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. **114,951๊ฐœ ์ „์ฒด ๊ธฐ์—…** ๋ฐ์ดํ„ฐ์—์„œ ์ฆ‰์‹œ ๊ฒ€์ƒ‰!

**ํŠน์ง•:**
- ๐Ÿš€ ๋น ๋ฅธ ๊ฒ€์ƒ‰ (~50ms) - ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ
- ๐Ÿ”„ ํ•œ๊ธ€/์˜๋ฌธ ๋™์‹œ ๊ฒ€์ƒ‰ - "๋„ค์ด๋ฒ„" ๊ฒ€์ƒ‰ ์‹œ "NAVER"๋„ ์ฐพ์Œ
- โญ ์ƒ์žฅ๊ธฐ์—… ์šฐ์„  ์ •๋ ฌ

**์š”์ฒญ:**
```json
{
  "query": "๋„ค์ด๋ฒ„"
}
```

**์‘๋‹ต:**
```json
{
  "status": "000",
  "companies": [
    {
      "corp_code": "00266961",
      "corp_name": "NAVER",
      "stock_code": "035420"
    },
    {
      "corp_code": "01246715",
      "corp_name": "๋„ค์ด๋ฒ„๋žฉ์Šค",
      "stock_code": ""
    }
  ]
}
```

---

## ๐Ÿ› ๏ธ ๊ฐœ๋ฐœ

### ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

```
dart-mcp/
โ”œโ”€โ”€ api/
โ”‚   โ”œโ”€โ”€ index.py          # Vercel ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ (SSE)
โ”‚   โ””โ”€โ”€ companies.json    # ๊ธฐ์—… ๋ฐ์ดํ„ฐ (114,951๊ฐœ)
โ”œโ”€โ”€ scripts/
โ”‚   โ””โ”€โ”€ update_companies.py  # ๊ธฐ์—… ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ src/opendart_mcp/
โ”‚   โ”œโ”€โ”€ server.py         # MCP ์„œ๋ฒ„ ํ•ต์‹ฌ ๋กœ์ง
โ”‚   โ”œโ”€โ”€ api/              # API ๋ชจ๋“ˆ
โ”‚   โ””โ”€โ”€ models/           # Pydantic ๋ชจ๋ธ
โ”œโ”€โ”€ vercel.json           # Vercel ์„ค์ •
โ””โ”€โ”€ pyproject.toml        # ํŒจํ‚ค์ง€ ์„ค์ •
```

### ๋กœ์ปฌ ๊ฐœ๋ฐœ

```bash
# uv ์‚ฌ์šฉ (๊ถŒ์žฅ)
uv sync
uv run opendart-mcp

# ๋˜๋Š” pip ์‚ฌ์šฉ
pip install -e ".[dev]"
opendart-mcp
```

### ๊ธฐ์—… ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

`find_company`๋Š” `api/companies.json` ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ์—…์ด ๋“ฑ๋ก๋˜๋ฉด ์›” 1ํšŒ ์ •๋„ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค:

```bash
# ๊ธฐ์—… ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ (114,000+ ๊ธฐ์—…)
python scripts/update_companies.py

# ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐฐํฌ
git add api/companies.json
git commit -m "Update companies data"
git push
```

---

## ๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! 

1. Fork
2. Feature branch ์ƒ์„ฑ (`git checkout -b feature/amazing-feature`)
3. Commit (`git commit -m 'Add amazing feature'`)
4. Push (`git push origin feature/amazing-feature`)
5. Pull Request

---

## ๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License - ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ, ์ˆ˜์ •, ๋ฐฐํฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

---

## ๐Ÿ”— ๊ด€๋ จ ๋งํฌ

- [OpenDART ๊ณต์‹ ์‚ฌ์ดํŠธ](https://opendart.fss.or.kr/)
- [OpenDART API ๋ฌธ์„œ](https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001)
- [MCP (Model Context Protocol)](https://modelcontextprotocol.io/)

---

## โญ Star History

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด โญ Star๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!