README.mdโข15 kB
# ๐ข ํ๊ตญ ๊ธฐ์
์ ๋ณด ์กฐํ MCP ์๋ฒ
**DART API**๋ฅผ ํ์ฉํ ๊ณ ์ฑ๋ฅ MCP (Model Context Protocol) ์๋ฒ์
๋๋ค.
AI ์์ด์ ํธ(Claude Desktop, Cursor ๋ฑ)๊ฐ ์ค์๊ฐ์ผ๋ก ํ๊ตญ ์์ฅ๊ธฐ์
์ ์ฌ๋ฌด์ ํ, ๊ณต์์ ๋ณด, ์์์ ๋ณด, ์ง๋ถ๊ตฌ์กฐ ๋ฑ์ ์กฐํํ๊ณ ๋ถ์ํ ์ ์๋๋ก ํฉ๋๋ค.
---
## โจ ์ฃผ์ ๊ธฐ๋ฅ
### ๐ ๊ธฐ์
์ ๋ณด ์กฐํ (DART API)
| ๊ธฐ๋ฅ | ์ค๋ช
|
|------|------|
| **๊ธฐ์
๊ฒ์** | ํ์ฌ๋ช
์ผ๋ก ๊ธฐ์
๊ฒ์ ๋ฐ ๊ธฐ๋ณธ์ ๋ณด ์กฐํ |
| **๊ธฐ์
๊ธฐ๋ณธ์ ๋ณด** | ํ์ฌ๋ช
, ๋ํ์๋ช
, ์ค๋ฆฝ์ผ, ๋ณธ์ฌ์ฃผ์ ๋ฑ ๊ธฐ๋ณธ์ ๋ณด ์กฐํ |
| **์ฌ๋ฌด์ ํ ์กฐํ** | ์์ต๊ณ์ฐ์, ์ฌ๋ฌด์ํํ, ํ๊ธํ๋ฆํ |
| **์ฌ๋ฌด ์ถ์ด ๋ถ์** | ์ต๊ทผ 5-10๋
์ฌ๋ฌด์ ํ ์ถ์ด ๋ถ์ |
| **๊ณต์์ ๋ณด ์กฐํ** | ์ต๊ทผ ๊ณต์ ๋ชฉ๋ก ๋ฐ ์์ธ ๋ด์ฉ |
| **์ฃผ์์ฌํญ๋ณด๊ณ ์** | ์์๋ณ๊ฒฝ, ์๋ณธ๊ธ๋ณ๊ฒฝ ๋ฑ ์ฃผ์์ฌํญ ์กฐํ |
| **์์์ ๋ณด ์กฐํ** | ์์๋ช
, ์ง์ฑ
, ๋ณด์ ๋ฑ ์์์ ๋ณด ์กฐํ |
| **์ง๋ถ๋ณด๊ณ ์** | ์ฃผ์ฃผ๋ช
, ๋ณด์ ์ง๋ถ, ๋น์จ ๋ฑ ์ง๋ถ๊ตฌ์กฐ ์กฐํ |
| **๊ณต์์๋ฌธ ๋ค์ด๋ก๋** | ๊ณต์๋ณด๊ณ ์ ์๋ฌธ XML/PDF ๋ค์ด๋ก๋ ๋ฐ ํ์ฑ |
### ๐ ์ฑ๋ฅ ์ต์ ํ
- **์ ๋ต์ ์บ์ฑ**: ๊ธฐ์
์ ๋ณด ๋ฐ์ดํฐ๋ฅผ 24์๊ฐ ์บ์ฑํ์ฌ API ํธ์ถ ์ต์ํ
- **๋น ๋ฅธ ์๋ต ์๋**: ์บ์ ๊ธฐ๋ฐ ์ฆ์ ์๋ต
- **์์ ์ ์ธ ์ด์**: ์๋ฌ ํธ๋ค๋ง ๋ฐ ๋ก๊น
์์คํ
- **API ํค ์ฐ์ ์์**: ๋ฉ์ธ ์๋ฒ์์ ๋ฐ์ ํค โ .env ํ์ผ (๋ก์ปฌ ๊ฐ๋ฐ์ฉ)
---
## ๐ฏ ํ์ฉ ์ฌ๋ก
### ํฌ์์ฌ/VC
- **ํฌ์ ๊ฒํ **: ์คํํธ์
์ฌ๋ฌด์ ํ ๋ถ์ ๋ฐ ์ฑ์ฅ์ฑ ํ๊ฐ
- **๊ธฐ์
๊ฐ์น ํ๊ฐ**: ์ฌ๋ฌด ์ถ์ด ๋ถ์์ ํตํ ๊ฐ์น ์ฐ์
- **๊ฒฝ์์ฌ ๋ถ์**: ์ฌ๋ฌ ๊ธฐ์
์ ์ฌ๋ฌด์ ํ ๋น๊ต ๋ถ์
### B2B ์์
ํ
- **๊ณ ๊ฐ์ฌ ๋ถ์**: ์ ์ฌ ๊ณ ๊ฐ์ ์ฌ๋ฌด ์ํ ํ์
- **์์
์ ๋ต ์๋ฆฝ**: ๊ธฐ์
์ ๋ณด ๊ธฐ๋ฐ ๋ง์ถคํ ์์
์ ๋ต
- **์ ์ฉ๋ ํ์ธ**: ๊ฑฐ๋ ์ ์ฌ๋ฌด ๊ฑด์ ์ฑ ํ์ธ
### ์ปจ์คํ
ํ์ฌ
- **๊ธฐ์
๋ถ์ ๋ฆฌํฌํธ**: ์ฌ๋ฌด์ ํ, ๊ณต์์ ๋ณด ์๋ ์์ง ๋ฐ ๋ถ์
- **๊ฒฝ์์ฌ ๋น๊ต**: ์ฌ๋ฌ ๊ธฐ์
์ ์ฌ๋ฌด ์งํ ๋น๊ต
- **์์ฅ ๋ถ์**: ์
์ข
๋ณ ๊ธฐ์
์ฌ๋ฌด ํํฉ ๋ถ์
### ์คํํธ์
/๊ฐ๋ฐ์
- **๊ฒฝ์์ฌ ๋ชจ๋ํฐ๋ง**: ๊ฒฝ์์ฌ์ ์ฌ๋ฌด ํํฉ ์ถ์
- **ํฌ์ ์ ์น ์ค๋น**: ์ฌ๋ฌด์ ํ ๋ถ์์ ํตํ ํฌ์ ์๋ฃ ์ค๋น
- **๊ธฐ์
๋ฆฌ์์น**: ์ ์ฌ ํํธ๋์ฌ ์ ๋ณด ์์ง
---
## ๐ ๏ธ ๊ธฐ์ ์คํ
- **MCP Framework**: FastMCP
- **Data Validation**: Pydantic
- **HTTP Client**: Requests
- **Caching**: cachetools (TTL ์บ์)
- **Async Processing**: asyncio
- **Environment**: Python-dotenv
---
## ๐ฆ ์ค์น ๋ฐ ์ค์
### 1) ์์กด์ฑ ์ค์น
```bash
pip install -r requirements.txt
```
> ๐ก `uv`๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: `uv sync`
### 2) DART API ํค ๋ฐ๊ธ (๋ฌด๋ฃ, ์ฆ์)
1. [์ ์๊ณต์์์คํ
Open DART](https://opendart.fss.or.kr/) ๋ฐฉ๋ฌธ
2. ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ
3. **์ธ์ฆํค ์ ์ฒญ/๊ด๋ฆฌ** ๋ฉ๋ด์์ ์ธ์ฆํค ๋ฐ๊ธ
4. **์ฆ์ ๋ฐ๊ธ** (๋ฌด๋ฃ)
> ๐ก **๋ฌด๋ฃ**์ด๋ฉฐ, ์ผ์ผ API ํธ์ถ ์ ํ์ด ์ถฉ๋ถํ ๋๋ํฉ๋๋ค!
### 3) ํ๊ฒฝ ๋ณ์ ์ค์
ํ๋ก์ ํธ ๋ฃจํธ์ `.env` ํ์ผ์ ์์ฑํ๊ณ API ํค๋ฅผ ์ค์ ํฉ๋๋ค:
```bash
cp env.example .env
```
`.env` ํ์ผ ๋ด์ฉ:
```env
DART_API_KEY=your_dart_api_key_here
LOG_LEVEL=INFO
PORT=8097
```
### 4) ์๋ฒ ์คํ
#### MCP ์๋ฒ ๋ชจ๋ (stdio)
```bash
python -m src.main
```
#### HTTP ์๋ฒ ๋ชจ๋
```bash
HTTP_MODE=1 python src/main.py
```
๋๋
```bash
export HTTP_MODE=1
python src/main.py
```
HTTP ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก `http://localhost:8097`์์ ์คํ๋ฉ๋๋ค.
---
## ๐ณ Docker ์คํ
```bash
# ์ด๋ฏธ์ง ๋น๋
docker build -t company-info-mcp:latest .
# ์ปจํ
์ด๋ ์คํ
docker run --rm \
-e DART_API_KEY=your_dart_api_key_here \
-p 8097:8097 \
company-info-mcp:latest
```
---
## ๐ Claude Desktop ์ฐ๋
### ์ค์ ํ์ผ ์์น
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **Mac**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
### ์ค์ ์์
```json
{
"mcpServers": {
"company-info": {
"command": "python",
"args": ["-m", "src.main"],
"cwd": "C:/Users/์ฌ์ฉ์๋ช
/Desktop/company-info-mcp",
"env": {
"DART_API_KEY": "your_dart_api_key_here"
}
}
}
}
```
> โ ๏ธ **์ค์**: `cwd` ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ก์ ํธ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝํ์ธ์!
### ์ฌ์ฉ ๋ฐฉ๋ฒ
Claude Desktop ์ฌ์์ ํ Claude์๊ฒ ์ง๋ฌธ:
- "์ผ์ฑ์ ์ ์ฌ๋ฌด์ ํ ๋ถ์ํด์ค"
- "๋ค์ด๋ฒ ์ต๊ทผ ๊ณต์ ํ์ธํด์ค"
- "์นด์นด์ค๋ฑ
ํฌ ํฌ์ ๊ฒํ ํด์ค"
- "๋ค์ด๋ฒ, ์นด์นด์ค, ๋ผ์ธ ์ฌ๋ฌด ๋น๊ตํด์ค"
---
## ๐งฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ (Tools)
### 1. `health`
์๋น์ค ์ํ ๋ฐ API ํค ์ค์ ํ์ธ
**ํ๋ผ๋ฏธํฐ**: ์์ (๋๋ `arguments.env.DART_API_KEY`)
**๋ฐํ ์์**:
```json
{
"status": "ok",
"message": "์ ์",
"service": "Korean Company Information MCP Server (Free Version)",
"environment": {
"dart_api_key": "์ค์ ๋จ",
"dart_key_preview": "abc123...",
"key_source": "arguments.env"
}
}
```
---
### 2. `search_company_tool`
๊ธฐ์
์ ํ์ฌ๋ช
์ผ๋ก ๊ฒ์
**ํ๋ผ๋ฏธํฐ**:
- `query` (string, ํ์): ๊ฒ์ํ ํ์ฌ๋ช
(์: '์ผ์ฑ์ ์', '๋ค์ด๋ฒ')
**๋ฐํ**: ๊ฒ์๋ ๊ธฐ์
๋ชฉ๋ก (๊ธฐ์
๊ณ ์ ๋ฒํธ ํฌํจ)
---
### 3. `get_financial_statement_tool`
๊ธฐ์
์ ์ฌ๋ฌด์ ํ ์กฐํ
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ์ ํ): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `company_name` (string, ์ ํ): ํ์ฌ๋ช
(corp_code ๋๋ company_name ์ค ํ๋ ํ์)
- `bsns_year` (string, ์ ํ): ์ฌ์
์ฐ๋ (YYYY ํ์, ๊ธฐ๋ณธ๊ฐ: ์ต๊ทผ ์ฐ๋)
- `reprt_code` (string, ์ ํ): ๋ณด๊ณ ์ ์ฝ๋ (11011: ์ฌ์
๋ณด๊ณ ์, 11013: ๋ถ๊ธฐ๋ณด๊ณ ์, ๊ธฐ๋ณธ๊ฐ: 11011)
**๋ฐํ**: ์ฌ๋ฌด์ ํ ์ ๋ณด (์์ต๊ณ์ฐ์, ์ฌ๋ฌด์ํํ, ํ๊ธํ๋ฆํ)
---
### 4. `analyze_financial_trend_tool`
๊ธฐ์
์ ์ฌ๋ฌด ์ถ์ด ๋ถ์ (์ต๊ทผ N๋
)
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ํ์): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `years` (integer, ์ ํ): ๋ถ์ํ ์ฐ์ (๊ธฐ๋ณธ๊ฐ: 5, ์ต๋: 10)
**๋ฐํ**: ์ฌ๋ฌด ์ถ์ด ๋ถ์ ๊ฒฐ๊ณผ (์ต๊ทผ N๋
์ฌ๋ฌด์ ํ ๋ฐ์ดํฐ)
---
### 5. `get_public_disclosure_tool`
๊ธฐ์
์ ๊ณต์์ ๋ณด ์กฐํ
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ํ์): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `bgn_de` (string, ์ ํ): ์์์ผ (YYYYMMDD ํ์, ๊ธฐ๋ณธ๊ฐ: ์ต๊ทผ 1๊ฐ์)
- `end_de` (string, ์ ํ): ์ข
๋ฃ์ผ (YYYYMMDD ํ์, ๊ธฐ๋ณธ๊ฐ: ์ค๋)
- `page_no` (integer, ์ ํ): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)
- `page_count` (integer, ์ ํ): ํ์ด์ง๋น ๊ฑด์ (๊ธฐ๋ณธ๊ฐ: 10, ์ต๋: 100)
**๋ฐํ**: ๊ณต์์ ๋ณด ๋ชฉ๋ก
---
### 6. `get_company_overview_tool`
๊ธฐ์
์ ๊ธฐ๋ณธ์ ๋ณด ์กฐํ
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ์ ํ): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `company_name` (string, ์ ํ): ํ์ฌ๋ช
(corp_code ๋๋ company_name ์ค ํ๋ ํ์)
**๋ฐํ**: ๊ธฐ์
๊ธฐ๋ณธ์ ๋ณด (ํ์ฌ๋ช
, ๋ํ์๋ช
, ์ค๋ฆฝ์ผ, ๋ณธ์ฌ์ฃผ์ ๋ฑ)
---
### 7. `get_major_report_tool`
์ฃผ์์ฌํญ๋ณด๊ณ ์ ์กฐํ
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ์ ํ): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `company_name` (string, ์ ํ): ํ์ฌ๋ช
- `bgn_de` (string, ์ ํ): ์์์ผ (YYYYMMDD ํ์, ๊ธฐ๋ณธ๊ฐ: ์ต๊ทผ 1๊ฐ์)
- `end_de` (string, ์ ํ): ์ข
๋ฃ์ผ (YYYYMMDD ํ์, ๊ธฐ๋ณธ๊ฐ: ์ค๋)
**๋ฐํ**: ์ฃผ์์ฌํญ๋ณด๊ณ ์ ๋ชฉ๋ก (์์๋ณ๊ฒฝ, ์๋ณธ๊ธ๋ณ๊ฒฝ ๋ฑ)
---
### 8. `download_disclosure_document_tool`
๊ณต์์๋ฌธ ๋ค์ด๋ก๋
**ํ๋ผ๋ฏธํฐ**:
- `rcept_no` (string, ํ์): ์ ์๋ฒํธ (๊ณต์์ ๋ณด์์ ์ป์ ์ ์์)
- `file_format` (string, ์ ํ): ํ์ผ ํ์ ("xml" ๋๋ "pdf", ๊ธฐ๋ณธ๊ฐ: "xml")
**๋ฐํ**: ๊ณต์์๋ฌธ ๋ฐ์ดํฐ (XML์ ํ์ฑ๋ ๋ฐ์ดํฐ ํฌํจ, PDF๋ base64 ์ธ์ฝ๋ฉ)
---
### 9. `get_executives_tool`
๊ธฐ์
์ ์์์ ๋ณด ์กฐํ
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ์ ํ): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `company_name` (string, ์ ํ): ํ์ฌ๋ช
(corp_code ๋๋ company_name ์ค ํ๋ ํ์)
**๋ฐํ**: ์์์ ๋ณด ๋ชฉ๋ก (์์๋ช
, ์ง์ฑ
, ๋ณด์ ๋ฑ)
---
### 10. `get_shareholders_tool`
์ง๋ถ๋ณด๊ณ ์ ์กฐํ
**ํ๋ผ๋ฏธํฐ**:
- `corp_code` (string, ์ ํ): ๊ธฐ์
๊ณ ์ ๋ฒํธ
- `company_name` (string, ์ ํ): ํ์ฌ๋ช
- `bsns_year` (string, ์ ํ): ์ฌ์
์ฐ๋ (YYYY ํ์, ๊ธฐ๋ณธ๊ฐ: ์ต๊ทผ ์ฐ๋)
- `reprt_code` (string, ์ ํ): ๋ณด๊ณ ์ ์ฝ๋ (11011: ์ฌ์
๋ณด๊ณ ์, 11013: ๋ถ๊ธฐ๋ณด๊ณ ์, ๊ธฐ๋ณธ๊ฐ: 11011)
**๋ฐํ**: ์ง๋ถ๋ณด๊ณ ์ (์ฃผ์ฃผ๋ช
, ๋ณด์ ์ง๋ถ, ๋น์จ ๋ฑ)
---
## ๐ก ์ฌ์ฉ ์์
### ์์ 1: ๊ธฐ์
์ฌ๋ฌด์ ํ ๋ถ์
**์ฌ์ฉ์**: "์ผ์ฑ์ ์ ์ฌ๋ฌด์ ํ ๋ถ์ํด์ค"
**AI ์์ด์ ํธ๊ฐ ์ํํ๋ ์์
**:
1. `search_company_tool(query="์ผ์ฑ์ ์")` ํธ์ถ โ corp_code ํ์ธ
2. `get_financial_statement_tool(company_name="์ผ์ฑ์ ์", bsns_year="2024")` ํธ์ถ
3. ์ฌ๋ฌด์ ํ ๋ถ์ ๋ฐ ์์ฝ ์ ๊ณต
---
### ์์ 2: ์ฌ๋ฌด ์ถ์ด ๋ถ์
**์ฌ์ฉ์**: "๋ค์ด๋ฒ ์ต๊ทผ 5๋
์ฌ๋ฌด ์ถ์ด ๋ถ์ํด์ค"
**AI ์์ด์ ํธ๊ฐ ์ํํ๋ ์์
**:
1. ๊ธฐ์
๊ฒ์ โ corp_code ํ์ธ
2. `analyze_financial_trend_tool(corp_code="...", years=5)` ํธ์ถ
3. ์ต๊ทผ 5๋
๋งค์ถ, ์์
์ด์ต, ์์ด์ต ์ถ์ด ๋ถ์
4. ์ฑ์ฅ์ฑ ํ๊ฐ ๋ฐ ๊ทธ๋ํ ์์ฑ
---
### ์์ 3: ํฌ์ ๊ฒํ
**์ฌ์ฉ์**: "์นด์นด์ค๋ฑ
ํฌ ํฌ์ ๊ฒํ ํด์ค"
**AI ์์ด์ ํธ๊ฐ ์ํํ๋ ์์
**:
1. `search_company_tool(query="์นด์นด์ค๋ฑ
ํฌ")` - ํ์ฌ ๊ฒ์
2. `get_company_overview_tool(company_name="์นด์นด์ค๋ฑ
ํฌ")` - ๊ธฐ๋ณธ์ ๋ณด ํ์ธ
3. `analyze_financial_trend_tool(corp_code="...", years=3)` - ์ต๊ทผ 3๋
์ฌ๋ฌด ์ถ์ด
4. `get_executives_tool(company_name="์นด์นด์ค๋ฑ
ํฌ")` - ์์์ง ํ์ธ
5. `get_shareholders_tool(company_name="์นด์นด์ค๋ฑ
ํฌ")` - ์ง๋ถ๊ตฌ์กฐ ํ์ธ
6. `get_public_disclosure_tool(corp_code="...")` - ์ต๊ทผ ๊ณต์ ํ์ธ
7. ์ข
ํฉ ํฌ์ ์๊ฒฌ ์ ์
---
### ์์ 4: ๊ฒฝ์์ฌ ๋น๊ต
**์ฌ์ฉ์**: "๋ค์ด๋ฒ, ์นด์นด์ค, ๋ผ์ธ ์ฌ๋ฌด ๋น๊ตํด์ค"
**AI ์์ด์ ํธ๊ฐ ์ํํ๋ ์์
**:
1. ๊ฐ ํ์ฌ๋ณ๋ก `analyze_financial_trend_tool` ํธ์ถ
2. ๋งค์ถ, ์์
์ด์ต, ์์ด์ต ์ถ์ด ๋น๊ต
3. ์ฑ์ฅ๋ฅ ๊ณ์ฐ ๋ฐ ๋น๊ตํ ์์ฑ
4. `get_shareholders_tool`๋ก ์ง๋ถ๊ตฌ์กฐ ๋น๊ต
---
### ์์ 5: ๊ณต์ ์๋ฌธ ์์ธ ๋ถ์
**์ฌ์ฉ์**: "์ผ์ฑ์ ์ ์ต๊ทผ ๊ณต์ ์ค ์ค์ํ ๊ฒ ํ๋ ์์ธ ๋ถ์ํด์ค"
**AI ์์ด์ ํธ๊ฐ ์ํํ๋ ์์
**:
1. `get_public_disclosure_tool(company_name="์ผ์ฑ์ ์", page_count=10)` - ์ต๊ทผ ๊ณต์ ๋ชฉ๋ก
2. ๊ณต์ ์ ๋ชฉ ๋ถ์ํ์ฌ ์ค์ ๊ณต์ ์ ํ
3. `download_disclosure_document_tool(rcept_no="...", file_format="xml")` - ๊ณต์์๋ฌธ ๋ค์ด๋ก๋
4. XML ํ์ฑ๋ ๋ฐ์ดํฐ ๋ถ์
5. ํต์ฌ ๋ด์ฉ ์์ฝ ๋ฐ ์๊ฒฌ ์ ์
---
## ๐ HTTP API ์๋ํฌ์ธํธ
HTTP ์๋ฒ ๋ชจ๋๋ก ์คํ ์ ๋ค์ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
### `GET /health`
์๋น์ค ์ํ ํ์ธ
**์๋ต ์์**:
```json
{
"status": "ok",
"message": "์ ์",
"service": "Korean Company Information MCP Server (Free Version)",
"environment": {
"dart_api_key": "์ค์ ๋จ",
"key_source": ".env file"
}
}
```
### `POST /health`
์๋น์ค ์ํ ํ์ธ (env ํฌํจ ๊ฐ๋ฅ)
**์์ฒญ ๋ณธ๋ฌธ**:
```json
{
"env": {
"DART_API_KEY": "your_api_key_here"
}
}
```
### `GET /tools`
์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ ๋ชฉ๋ก ์กฐํ
**์๋ต**: ๋๊ตฌ ๋ชฉ๋ก ๋ฐฐ์ด
### `POST /tools/{tool_name}`
๋๊ตฌ ํธ์ถ
**์์ฒญ ์์**:
```json
{
"query": "์ผ์ฑ์ ์",
"env": {
"DART_API_KEY": "your_api_key_here"
}
}
```
---
## ๐ API ํค ์ฐ์ ์์
MCP ์๋ฒ๋ ๋ค์ ์์๋ก API ํค๋ฅผ ์ฐพ์ต๋๋ค:
1. **์ฐ์ ์์ 1**: `arguments.env.DART_API_KEY` (๋ฉ์ธ ์๋ฒ์์ ๋ฐ์ ํค)
2. **์ฐ์ ์์ 2**: `.env` ํ์ผ์ `DART_API_KEY` (๋ก์ปฌ ๊ฐ๋ฐ์ฉ)
3. **๋ ๋ค ์์ผ๋ฉด**: Health ์ฒดํฌ์์ "๋ฑ๋ก๋ ํค๊ฐ ์์ต๋๋ค" ๋ฐํ
์ด๋ฅผ ํตํด:
- **ํ๋ก๋์
**: ๋ฉ์ธ ์๋ฒ์์ ๊ฐ ์ฌ์ฉ์๋ณ ํค๋ฅผ ์ ๋ฌ๋ฐ์ ์ฌ์ฉ
- **๋ก์ปฌ ๊ฐ๋ฐ**: `.env` ํ์ผ์ ํค๋ฅผ ์ค์ ํ์ฌ ๊ฐ๋ฐ
---
## ๐ ํ๋ก์ ํธ ๊ตฌ์กฐ
```
company-info-mcp/
โโโ src/
โ โโโ __init__.py
โ โโโ main.py # MCP ์๋ฒ ๋ฉ์ธ ํ์ผ
โ โโโ tools.py # ๊ธฐ์
์ ๋ณด API ํธ์ถ ๋๊ตฌ
โโโ .env # ํ๊ฒฝ ๋ณ์ ํ์ผ (API ํค ๋ฑ) - .gitignore์ ํฌํจ
โโโ env.example # ํ๊ฒฝ ๋ณ์ ์์ ํ์ผ
โโโ requirements.txt # Python ์์กด์ฑ
โโโ pyproject.toml # ํ๋ก์ ํธ ์ค์
โโโ Dockerfile # Docker ์ด๋ฏธ์ง ๋น๋ ํ์ผ
โโโ DEVELOPMENT_GUIDE.md # ๊ฐ๋ฐ ๊ฐ์ด๋ (DART API ๊ทธ๋ฃน๋ณ ๊ธฐ๋ฅ)
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์ (์ด ํ์ผ)
```
---
## โ ๏ธ ์ ํ์ฌํญ
### ๋ฌด๋ฃ ๋ฒ์ ์ ํ๊ณ
- **์์ฅ๊ธฐ์
๋ง ๊ฐ๋ฅ**: DART API๋ ์์ฅ๊ธฐ์
์ ๋ณด๋ง ์ ๊ณต (๋น์์ฅ ๊ธฐ์
๋ถ๊ฐ)
- **์ฌ์
์๋ฑ๋ก์ ๋ณด ์์**: ๊ธฐ๋ณธ ์ฌ์
์ ์ ๋ณด๋ ์ ๋ฃ API ํ์
- **์ ์ฉ์ ๋ณด ์์**: ์ ์ฉ๋ฑ๊ธ์ ์ ๋ฃ API ํ์
### API ์ฌ์ฉ ์ ํ
- DART API: ์ผ์ผ ํธ์ถ ์ ํ ์์ (๋ณดํต ์ถฉ๋ถํจ)
- API ํค๋ ๋ฌด๋ฃ๋ก ๋ฐ๊ธ ๊ฐ๋ฅ
---
## ๐ ๋ฌธ์ ํด๊ฒฐ
### "API ํค๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค" ์ค๋ฅ
**์์ธ**: DART_API_KEY ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ง ์์
**ํด๊ฒฐ**:
1. `.env` ํ์ผ ํ์ธ
2. `DART_API_KEY=your_key_here` ํ์์ผ๋ก ์ค์ ๋์ด ์๋์ง ํ์ธ
3. ๋๋ ๋ฉ์ธ ์๋ฒ์์ `arguments.env.DART_API_KEY`๋ก ์ ๋ฌ
### "DART API ์ค๋ฅ" ๋ฉ์์ง
**์์ธ**: API ํค๊ฐ ์๋ชป๋์๊ฑฐ๋ ๊ธฐ์
์ ์ฐพ์ ์ ์์
**ํด๊ฒฐ**:
1. API ํค๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธ
2. ์์ฅ๊ธฐ์
์ธ์ง ํ์ธ (๋น์์ฅ ๊ธฐ์
์ ์ง์ ์ ๋จ)
3. ํ์ฌ๋ช
์ ํํ ์
๋ ฅ (์: "์ผ์ฑ์ ์" O, "์ผ์ฑ" X)
### Claude Desktop์์ ๋๊ตฌ๊ฐ ๋ณด์ด์ง ์์
**ํด๊ฒฐ**:
1. `claude_desktop_config.json` ํ์ผ ๊ฒฝ๋ก ํ์ธ
2. JSON ํ์์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ (์ฝค๋ง, ๋ฐ์ดํ ๋ฑ)
3. `cwd` ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ก์ ํธ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ
4. Claude Desktop ์์ ์ข
๋ฃ ํ ์ฌ์์
5. ๋ก๊ทธ ํ์ผ ํ์ธ (Windows: `%APPDATA%\Claude\logs`)
---
## ๐ ๊ฐ๋ฐ ๊ฐ์ด๋
DART API์ ๊ฐ ๊ทธ๋ฃน๋ณ ๊ธฐ๋ฅ๊ณผ ์ถ๊ฐ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ [DEVELOPMENT_GUIDE.md](./DEVELOPMENT_GUIDE.md)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
### ๊ตฌํ ์ํ
- **DS001**: ๊ณต์์ ๋ณด ์กฐํ (โ
๊ตฌํ ์๋ฃ)
- **DS002**: ์ฌ๋ฌด์ ๋ณด ์กฐํ (โ
๊ตฌํ ์๋ฃ)
- **DS003**: ๊ธฐ์
๊ฐํฉ ์ ๋ณด (โ
์ฃผ์ ๊ธฐ๋ฅ ๊ตฌํ ์๋ฃ)
- **DS004**: ๊ณต์์๋ฌธ ๋ค์ด๋ก๋ (โ
๊ตฌํ ์๋ฃ)
- **DS005**: ์ฃผ์์ฌํญ๋ณด๊ณ ์ (โ
๊ตฌํ ์๋ฃ)
- **DS006**: ๊ธฐํ ์ ๋ณด (โ
์ฃผ์ ๊ธฐ๋ฅ ๊ตฌํ ์๋ฃ)
---
## ๐ค ๊ธฐ์ฌ ๋ฐ ๋ฌธ์
- **์ด์**: GitHub Issues
- **๋ฌธ์**: company-info-mcp@example.com
- **๋ฌธ์**: https://github.com/your-repo/company-info-mcp
---
## ๐ ๋ผ์ด์ ์ค
MIT License
---
**Made with โค๏ธ for Korean Business Professionals**
DART API๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐ๋์์ต๋๋ค.