README_kr.mdโข21.4 kB
[๐บ๐ธ EN](README.md) | [๐ฐ๐ท **KR**](README_kr.md)
# LexLink MCP ์๋ฒ
๋ฒ์ ์ฒ ๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด ๊ณต๋ํ์ฉ Open API๋ฅผ ์ํ MCP (Model Context Protocol) ์๋ฒ์
๋๋ค.
## ๊ฐ์
์ด MCP ์๋ฒ๋ Claude ๋ฐ ๊ธฐํ LLM ์ด์์คํดํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ํ๊ตญ ๋ฒ๋ น ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ณ ์กฐํํ ์ ์๋๋ก ํฉ๋๋ค:
- **๋ฒ๋ น** (๋ฒ๋ฅ , ๋ํต๋ น๋ น, ๋ถ๋ น ๋ฑ)
- **ํ๋ก** (๋๋ฒ์, ๊ฐ๊ธ ๋ฒ์ ํ๊ฒฐ)
- **๋ฒ๋ นํด์๋ก** (๋ฒ์ ์ฒ ๋ฐ ๊ฐ ๋ถ์ฒ ์ ๊ถํด์)
- **์์น๋ฒ๊ท** (์กฐ๋ก, ๊ท์น ๋ฑ)
## ์ฃผ์ ๊ธฐ๋ฅ
### 7๊ฐ์ MCP ๋๊ตฌ
1. **search_laws** - ๋ฒ๋ น ๊ฒ์
2. **get_law_details** - ํน์ ๋ฒ๋ น์ ์ ๋ฌธ(ๅ
จๆ) ์กฐํ
3. **search_case_law** - ํ๋ก ๊ฒ์
4. **get_case_details** - ํน์ ํ๋ก์ ์ ๋ฌธ ์กฐํ
5. **search_legal_interpretations** - ๋ฒ๋ นํด์๋ก ๊ฒ์
6. **get_legal_interpretation_details** - ํน์ ๋ฒ๋ นํด์๋ก์ ์ ๋ฌธ ์กฐํ
7. **search_local_ordinances** - ์์น๋ฒ๊ท ๊ฒ์
### ๋ด์ฅ ๊ธฐ๋ฅ
- โ
**์ง๋ฅํ ๊ฒ์ ์์ ์๊ณ ๋ฆฌ์ฆ** - ์ ํํ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ ํ์ (์ ํํ ์ผ์นํ๋ ๊ฒฐ๊ณผ ์ฐ์ )
- โ
๋น๋๊ธฐ(Async) ์ฒ๋ฆฌ๋ก ๋น ๋ฅธ ์๋ต ์๋
- โ
์๋ ์์ฒญ ์ ํ (0.5์ด ๊ฐ๊ฒฉ)
- โ
XML ์๋ต ์๋ ํ์ฑ
- โ
์ข
ํฉ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ
- โ
์๋ฒฝํ ํ์
ํํธ
- โ
LLM์ ์ํ ์์ธํ ์ค๋ช
ํฌํจ
#### ๐ฏ ์ค๋งํธ ๊ฒ์ ์์
๊ณต์ API๋ ๋จ์ ๋ฌธ์์ด ๋งค์นญ์ ์ฌ์ฉํ์ฌ '๊ฐ๋๋ค'์์ผ๋ก ์ ๋ ฌ๋ ๋ถ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ์ด๋ฅผ ๊ฐ์ ํ์์ต๋๋ค:
**๋ฌธ์ :** "๋ฏผ๋ฒ" ๊ฒ์ ์ "๋๋ฏผ๋ฒ"์ด ๋จผ์ ๋์ด โ
**ํด๊ฒฐ:** ํด๋ผ์ด์ธํธ ์ธก ์์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ํํ ๊ฒฐ๊ณผ๊ฐ ๋จผ์ ๋์ด โ
```
๊ฒ์์ด: "๋ฏผ๋ฒ"
์์ ์ ์ฉ ์ : ๋๋ฏผ๋ฒ, ๋๋ฏผ๋ฒ ์ํ๋ น, ๋ฏผ๋ฒ...
์์ ์ ์ฉ ํ: ๋ฏผ๋ฒ, ๋ฏผ๋ฒ๋ฒ์ธ๊ท์น, ๋ฏผ๋ฒ์ 312์กฐ...
```
**์๋ ์๋ฆฌ:**
์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํฉ๋๋ค:
1. **์ ํํ ์ผ์น** (์ ์: 1000) - ๊ฒ์์ด์ ๋ฒ๋ น๋ช
์ด ์ ํํ ์ผ์น
2. **๊ฒ์์ด๋ก ์์** (์ ์: 100) - ๋ฒ๋ น๋ช
์ด ๊ฒ์์ด๋ก ์์
3. **๋จ์ด ๊ฒฝ๊ณ ์ผ์น** (์ ์: 10) - ๊ฒ์์ด๊ฐ ์์ ๋ถ๋ถ์ด๋ ๊ณต๋ฐฑ ๋ค์์ ์์น
4. **๋ถ๋ถ ๋ฌธ์์ด ์ผ์น** (์ ์: 1) - ๊ฒ์์ด๊ฐ ์ด๋๋ ํฌํจ
5. **๊ธธ์ด ํจ๋ํฐ** - ๋ ์งง๊ณ ๊ตฌ์ฒด์ ์ธ ๊ฒฐ๊ณผ ์ฐ์
**์ค๋งํธ ํ์นญ:** ์ ์ ์์ ๊ฒฐ๊ณผ๋ฅผ ์์ฒญํ ๋ (display < 20), ์์คํ
์ ์๋์ผ๋ก 5๋ฐฐ ๋ ๋ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ ธ์ ์์๋ฅผ ๋งค๊ธด ํ, ์์ ๊ฒฐ๊ณผ๋ง ๋ฐํํฉ๋๋ค. ์ด๋ฅผ ํตํด ํญ์ ๊ฐ์ฅ ๊ด๋ จ์ฑ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
**์ ์ฉ ๋์:** search_laws, search_case_law, search_legal_interpretations
**ํ์ ์ ๋นํ์ฑํ:** `auto_rank=False` ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ฌ ์๋ณธ API ๊ฒฐ๊ณผ ํ๋
## API ์ปค๋ฒ๋ฆฌ์ง
**๊ณต์ ๋ฒ์ ์ฒ API: 125๊ฐ ์๋ํฌ์ธํธ | ํ์ฌ ๊ตฌํ: 6๊ฐ ์๋ํฌ์ธํธ (5%)**
๋ฒ์ ์ฒ ๊ณต์ API๋ 17๊ฐ ์ด์์ ์นดํ
๊ณ ๋ฆฌ์ ๊ฑธ์ณ 125๊ฐ์ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณธ MCP ์๋ฒ๋ ์ผ๋ฐ์ ์ธ ๋ฒ๋ฅ ๋ฆฌ์์น ์
๋ฌด์ ์ฝ 80%๋ฅผ ์ปค๋ฒํ๋ ๊ฐ์ฅ ํต์ฌ์ ์ธ 6๊ฐ ์๋ํฌ์ธํธ๋ฅผ ๊ตฌํํ์ต๋๋ค.
### โ
ํ์ฌ ๊ตฌํ๋ API (6๊ฐ)
| ์นดํ
๊ณ ๋ฆฌ | API | ์ํ | ํ
์คํธ ๊ฒฐ๊ณผ |
|----------|-----|------|-------------|
| **๋ฒ๋ น** | ๋ฒ๋ น ๊ฒ์ | โ
๊ตฌํ์๋ฃ | "๋ฏผ๋ฒ" ๊ฒ์ ์ 9๊ฑด |
| **๋ฒ๋ น** | ๋ฒ๋ น ์์ธ ์กฐํ | โ
๊ตฌํ์๋ฃ | 57๊ฐ ์กฐ๋ฌธ ์กฐํ |
| **ํ๋ก** | ํ๋ก ๊ฒ์ | โ
๊ตฌํ์๋ฃ | 16,373๊ฑด ๊ฒ์ ๊ฐ๋ฅ |
| **ํ๋ก** | ํ๋ก ์์ธ ์กฐํ | โ
๊ตฌํ์๋ฃ | ์ ๋ฌธ ์กฐํ ์ฑ๊ณต |
| **๋ฒ๋ นํด์๋ก** | ๋ฒ๋ นํด์๋ก ๊ฒ์ | โ
๊ตฌํ์๋ฃ | 257๊ฑด ๊ฒ์ |
| **์์น๋ฒ๊ท** | ์์น๋ฒ๊ท ๊ฒ์ | โ
๊ตฌํ์๋ฃ | 4,551๊ฑด ๊ฒ์ |
### โ ๋ฏธ๊ตฌํ API (119๊ฐ)
๊ณต์ API์์ ์ ๊ณตํ์ง๋ง ์์ง ๊ตฌํ๋์ง ์์ API ๋ชฉ๋ก์
๋๋ค:
#### ๐ ๋ฒ๋ น ๊ด๋ จ - ์ถ๊ฐ 9๊ฐ API
- โ ๋ฒ๋ น ์ฐํ - ๋ฒ ๊ฐ์ ์ด๋ ฅ ์ถ์
- โ ์กฐ๋ฌธ๋ณ ์์ธ์ ๋ณด - ํน์ ์กฐ๋ฌธ ์ฌ์ธต ๋ถ์
- โ ์๋ฌธ๋ฒ๋ น - ํ๊ตญ ๋ฒ๋ น์ ์๋ฌธ ๋ฒ์ญ๋ณธ
- โ ๋ฒ๋ น ์ฒด๊ณ๋ - ๋ฒ๋ น์ ์๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ
- โ ์ ๊ตฌ๋ฒ๋ น๋น๊ต - ๊ฐ์ ์ ํ ๋น๊ต
- โ 3๋จ ๋น๊ต - ์ฌ๋ฌ ๋ฒ์ ๋น๊ต
- โ ๋ฒ๋ น๋ช
์ฝ์นญ - ๊ณต์ ์ฝ์นญ
- โ ์ญ์ ๋ฐ์ดํฐ ๋ชฉ๋ก - ๊ณผ๊ฑฐ ์ญ์ ๋ ์กฐ๋ฌธ
- โ ์ผ๊ด๋ณด๊ธฐ - ์์ฝ ๋ณด๊ธฐ
#### ๐ ํ์ ๊ท์น - 2๊ฐ API
- โ ํ์ ๊ท์น ๊ฒ์ ๋ฐ ์ ๋ฌธ
- โ ํ์ ๊ท์น ์ ๊ตฌ๋น๊ต
#### โ๏ธ ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ก - 2๊ฐ API
- โ ํ์ฌ๊ฒฐ์ ๋ก ๊ฒ์
- โ ํ์ฌ๊ฒฐ์ ๋ก ์์ธ ์กฐํ
**์ค์๋:** ํ๋ฒ์์ก ์ฐ๊ตฌ์ ํ์์
#### ๐ ํ์ ์ฌํ๋ก - 2๊ฐ API
- โ ํ์ ์ฌํ๋ก ๊ฒ์
- โ ํ์ ์ฌํ๋ก ์์ธ ์กฐํ
**์ค์๋:** ํ์ ๋ฒ ์ค๋ฌด์์ ์์ฃผ ์ฐธ์กฐ
#### ๐๏ธ ๊ฐ์ข
์์ํ ๊ฒฐ์ ๋ฌธ - 24๊ฐ API (12๊ฐ ์์ํ ร 2)
12๊ฐ ์ ๋ถ ์์ํ:
1. โ ๊ฐ์ธ์ ๋ณด๋ณดํธ์์ํ
2. โ ๊ณ ์ฉ๋ณดํ์ฌ์ฌ์์ํ
3. โ ๊ณต์ ๊ฑฐ๋์์ํ
4. โ ๊ตญ๋ฏผ๊ถ์ต์์ํ
5. โ ๊ธ์ต์์ํ
6. โ ๋
ธ๋์์ํ
7. โ ๋ฐฉ์กํต์ ์์ํ
8. โ ์ฐ์
์ฌํด๋ณด์๋ณดํ์ฌ์ฌ์์ํ
9. โ ์ค์ํ ์ง์์ฉ์์ํ
10. โ ์ค์ํ๊ฒฝ๋ถ์์กฐ์ ์์ํ
11. โ ์ฆ๊ถ์ ๋ฌผ์์ํ
12. โ ๊ตญ๊ฐ์ธ๊ถ์์ํ
**์ค์๋:** ํน์ ๋ถ์ผ์ ๊ท์ ๋ฐ ๋ถ์ ๊ฒฐ์
#### ๐ ์กฐ์ฝ - 2๊ฐ API
- โ ์กฐ์ฝ ๊ฒ์ - ๊ตญ์ ํ์
- โ ์กฐ์ฝ ์ ๋ฌธ
**์ค์๋:** ๊ตญ์ ๋ฒ ๋ฐ ์์/๋ค์ ํ์
#### ๐ ๋ณํยท์์ - 6๊ฐ API
- โ ๋ฒ๋ น ์์
- โ ํ์ ๊ท์น ์์
- โ ์์น๋ฒ๊ท ์์
**์ค์๋:** ๊ณต์ ์ ๋ถ ์์ ๋ฐ ํ
ํ๋ฆฟ
#### ๐ซ ํ์นยท๊ณต๋จยท๊ณต๊ณต๊ธฐ๊ด ๊ท์ - 2๊ฐ API
- โ ๊ธฐ๊ด๋ณ ๊ท์ ๊ฒ์
- โ ๊ธฐ๊ด๊ท์ ์์ธ ์กฐํ
**์ค์๋:** ๊ณต๊ณต๊ธฐ๊ด์ ๋ด๋ถ ๊ท์
#### ๐ ๋ฒ๋ น์ฉ์ด - 2๊ฐ API
- โ ๋ฒ๋ น์ฉ์ด ๊ฒ์ - ๋ฒ๋ฅ ์ฉ์ด ์ฌ์
- โ ์ฉ์ด ์ ์ ์์ธ
**์ค์๋:** ๋ฒ๋ฅ ์ ๋ฌธ์ฉ์ด ์ดํด์ ํ์
#### ๐ข ์ค์๋ถ์ฒ 1์ฐจ ํด์ - 16๊ฐ API (8๊ฐ ๋ถ์ฒ ร 2)
- โ ๊ฐ ์ค์ ์ ๋ถ ๋ถ์ฒ๋ณ ํด์
**์ค์๋:** ๊ฐ ๋ถ์ฒ์ ๊ณต์ ์ ๊ถํด์
#### โก ํน๋ณํ์ ์ฌํ - 4๊ฐ API (2์ข
๋ฅ ร 2)
- โ ํน๋ณํ์ ์ฌํ ์ ํ๋ณ
#### ๐ฑ ๋ชจ๋ฐ์ผ API - ์ฝ 30๊ฐ
- โ ์ฃผ์ API์ ๋ชจ๋ฐ์ผ ์ต์ ํ ๋ฒ์
**์ฐธ๊ณ :** ํ์ฌ API๋ ๋ชจ๋ฐ์ผ์์ ์๋ํ์ง๋ง, ์ด๋ ์ต์ ํ๋ ๋ฒ์ ์
๋๋ค
#### ๐ฏ ๋ง์ถคํ ์๋น์ค - 6๊ฐ API
- โ ๋ง์ถคํ ๋ฒ๋ น ๊ฒ์
- โ ๋ง์ถคํ ํ์ ๊ท์น
- โ ๋ง์ถคํ ์์น๋ฒ๊ท
### ๊ตฌํ ์ฐ์ ์์
๋ค์ ์์๋ก ๊ตฌํ์ ์งํํ ์์ ์
๋๋ค:
**๐ฅ ์ต์ฐ์ (๋ค์์ ์ถ๊ฐํ 5๊ฐ API):**
1. **ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ก** - ํ๋ฒ ์์ก ์ฐ๊ตฌ์ ํ์
2. **ํ์ ์ฌํ๋ก** - ํ์ ์ฌ๊ฑด์์ ์์ฃผ ์ฐธ์กฐ
3. **์๋ฌธ๋ฒ๋ น** - ๊ตญ์ ์ ์ ๊ทผ์ฑ
4. **๋ฒ๋ น ์ฐํ** - ๋ฒ ๊ฐ์ ์ด๋ ฅ ์ถ์
5. **๋ฒ๋ น์ฉ์ด** - ๋ณต์กํ ๋ฒ๋ฅ ์ฉ์ด ์ ์
**โญ ์ค๊ฐ ์ฐ์ ์์:**
6. ํ์ ๊ท์น (์ ๋ถ ๊ท์ )
7. ๊ณต์ ๊ฑฐ๋์์ํ ๊ฒฐ์ ๋ฌธ
8. ์กฐ์ฝ (๊ตญ์ ํ์ )
9. ๋
ธ๋์์ํ ๊ฒฐ์ ๋ฌธ
10. ๊ธ์ต์์ํ ๊ฒฐ์ ๋ฌธ
**๐ ๋ฎ์ ์ฐ์ ์์:**
- ์์ ๋ฐ ๋ณํ (๋ ์์ฃผ ํ์)
- ๊ธฐ๊ด ๊ท์ (ํน์ํ ์ฌ์ฉ ์ฌ๋ก)
- ๋ชจ๋ฐ์ผ ์ ์ฉ API (ํ์ฌ API๋ก ์ถฉ๋ถ)
- ๋ง์ถคํ ์๋น์ค (๊ณ ๊ธ ๊ธฐ๋ฅ)
### ์ 6๊ฐ๋ง ๊ตฌํํ๋์?
**์ ๋ต์ ์ ํ:**
- 6๊ฐ API๋ก ์ผ๋ฐ์ ์ธ ๋ฒ๋ฅ ๋ฆฌ์์น ์
๋ฌด์ ์ฝ 80%๋ฅผ ์ปค๋ฒ
- ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์นดํ
๊ณ ๋ฆฌ์ ์ง์ค
- ๋ค๋ฅธ API๋ค์ ๊ธฐ๋ฐ์ด ๋๋ ํต์ฌ ๋๊ตฌ
**์ฌ์ฉ ์ฌ๋ก ๋ถ์:**
- **๋ฒ๋ น** โ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฒ๋ฅ ๋ฌธ์
- **ํ๋ก** โ 16,000๊ฑด ์ด์์ ํ๋ก๋ก ๋ฒ ํด์ ์ฐธ์กฐ
- **๋ฒ๋ นํด์๋ก** โ ๊ณต์ ์ ๋ถ ์ ๊ถํด์
- **์์น๋ฒ๊ท** โ ์ง์ญ๋ณ ์กฐ๋ก ๋ฐ ๊ท์น
### ์๋ฒ ํ์ฅ ๋ฐฉ๋ฒ
์๋ก์ด API๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์ ํจํด์ ๋ฐ๋ฅด์ธ์:
```python
# lexlink_client.py์ ์ถ๊ฐ
async def search_constitutional_cases(self, query: str, display: int = 20):
params = {
'OC': self.oc,
'target': 'cnst', # ํ๋ฒ์ฌํ์ ํ๊ฒ
'type': 'XML',
'query': query,
'display': str(display)
}
response = await self.client.get(self.BASE_SEARCH_URL, params=params)
return self._parse_xml(response.text)
# main.py์ ์ถ๊ฐ
@mcp.tool()
async def search_constitutional_cases(query: str, display: int = 20) -> str:
"""ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ก๋ฅผ ๊ฒ์ํฉ๋๋ค."""
result = await client.search_constitutional_cases(query, display)
return json.dumps(result, ensure_ascii=False)
```
API ํด๋ผ์ด์ธํธ๋ฅผ ์ฝ๊ฒ ํ์ฅํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
## ์ค์น ๋ฐฉ๋ฒ
์ด ํ๋ก์ ํธ๋ `uv`๋ฅผ ์ฌ์ฉํ์ฌ ์ข
์์ฑ์ ๊ด๋ฆฌํฉ๋๋ค:
```bash
# ์ข
์์ฑ ์ค์น
uv sync
```
## ์ฌ์ฉ ๋ฐฉ๋ฒ
### MCP ์๋ฒ ์คํ
```bash
# ์๋ฒ ์์ (STDIO ์ ์ก)
uv run python main.py
# ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ ํ์ธ
uv run python main.py inspect
```
### Claude์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
MCP ํด๋ผ์ด์ธํธ์์ ์ค์ ํ ํ Claude์๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์ง๋ฌธํ ์ ์์ต๋๋ค:
```
์ฌ์ฉ์: "๊ทผ๋ก๊ธฐ์ค๋ฒ๊ณผ ๊ด๋ จ๋ ๋ฒ๋ น์ ๊ฒ์ํด์ค"
Claude: [search_laws ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ query="๊ทผ๋ก๊ธฐ์ค๋ฒ"]
Claude: "๊ทผ๋ก๊ธฐ์ค๋ฒ์ ์ฐพ์์ต๋๋ค. ํน์ ์กฐ๋ฌธ์ ๋ณด์ฌ๋๋ฆด๊น์?"
์ฌ์ฉ์: "๋ค, ์ 5์กฐ๋ฅผ ๋ณด์ฌ์ค"
Claude: [MST ๋ฒํธ๋ก get_law_details ๋๊ตฌ ์ฌ์ฉ]
Claude: "๊ทผ๋ก๊ธฐ์ค๋ฒ ์ 5์กฐ ๋ด์ฉ์
๋๋ค..."
```
## API ๋๊ตฌ ์์ธ ์ค๋ช
### 1. search_laws (๋ฒ๋ น ๊ฒ์)
ํค์๋๋ก ํ๊ตญ ๋ฒ๋ น์ ๊ฒ์ํฉ๋๋ค.
**๋งค๊ฐ๋ณ์:**
- `query` (str): ํ๊ธ ๋๋ ์๋ฌธ ๊ฒ์์ด
- `display` (int): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์, ์ต๋ 100 (๊ธฐ๋ณธ๊ฐ: 20)
- `page` (int): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)
**๋ฐํ๊ฐ:** ๋ฒ๋ น๋ช
, MST ๋ฒํธ, ๋ ์ง, ์๊ด๋ถ์ฒ๊ฐ ํฌํจ๋ JSON
**์์:**
```python
result = await search_laws(query="๋ฏผ๋ฒ", display=10)
```
### 2. get_law_details (๋ฒ๋ น ์์ธ ์กฐํ)
ํน์ ๋ฒ๋ น์ ์ ๋ฌธ(๋ชจ๋ ์กฐ๋ฌธ ํฌํจ)์ ์กฐํํฉ๋๋ค.
**๋งค๊ฐ๋ณ์:**
- `mst` (str): ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฒ๋ น์ผ๋ จ๋ฒํธ
- `effective_date` (str, ์ ํ): ์ํ์ผ์ (YYYYMMDD ํ์)
**๋ฐํ๊ฐ:** ์ ์ฒด ๋ฒ๋ น ํ
์คํธ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ JSON
**์์:**
```python
result = await get_law_details(mst="265307")
```
### 3. search_case_law (ํ๋ก ๊ฒ์)
๋ฒ์ ํ๊ฒฐ ๋ฐ ํ๋ก๋ฅผ ๊ฒ์ํฉ๋๋ค.
**๋งค๊ฐ๋ณ์:**
- `query` (str): ๊ฒ์ ํค์๋
- `display` (int): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์, ์ต๋ 100 (๊ธฐ๋ณธ๊ฐ: 20)
- `page` (int): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)
- `search_scope` (int): 1=์ฌ๊ฑด๋ช
๋ง, 2=์ ๋ฌธ ๊ฒ์ (๊ธฐ๋ณธ๊ฐ: 2)
- `court_type` (str, ์ ํ): "400201"=๋๋ฒ์, "400202"=ํ๊ธ๋ฒ์
- `date_range` (str, ์ ํ): "YYYYMMDD~YYYYMMDD" ํ์
**๋ฐํ๊ฐ:** ์ฌ๊ฑด ID, ์ฌ๊ฑด๋ช
, ๋ฒ์, ๋ ์ง๊ฐ ํฌํจ๋ JSON
**์์:**
```python
result = await search_case_law(query="์ํด๋ฐฐ์", search_scope=2, display=20)
```
### 4. get_case_details (ํ๋ก ์์ธ ์กฐํ)
ํน์ ์ฌ๊ฑด์ ์ ์ฒด ํ๊ฒฐ๋ฌธ์ ์กฐํํฉ๋๋ค.
**๋งค๊ฐ๋ณ์:**
- `case_id` (str): ๊ฒ์ ๊ฒฐ๊ณผ์ ํ๋ก์ผ๋ จ๋ฒํธ
**๋ฐํ๊ฐ:** ์์ ํ ํ๊ฒฐ๋ฌธ์ด ํฌํจ๋ JSON
**์์:**
```python
result = await get_case_details(case_id="608121")
```
### 5. search_legal_interpretations (๋ฒ๋ นํด์๋ก ๊ฒ์)
์ ๋ถ ๊ธฐ๊ด์ด ๋ฐํํ ๊ณต์ ๋ฒ๋ น ํด์์ ๊ฒ์ํฉ๋๋ค.
**๋งค๊ฐ๋ณ์:**
- `query` (str): ๊ฒ์ ํค์๋
- `display` (int): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์, ์ต๋ 100 (๊ธฐ๋ณธ๊ฐ: 20)
- `page` (int): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)
- `search_scope` (int): 1=์ ๋ชฉ๋ง, 2=์ ๋ฌธ (๊ธฐ๋ณธ๊ฐ: 1)
- `date_range` (str, ์ ํ): "YYYYMMDD~YYYYMMDD" ํ์
**๋ฐํ๊ฐ:** ํด์๋ก ๋ชฉ๋ก์ด ํฌํจ๋ JSON
**์์:**
```python
result = await search_legal_interpretations(query="๊ณ์ฝ", display=10)
```
### 6. search_local_ordinances (์์น๋ฒ๊ท ๊ฒ์)
์ง๋ฐฉ์์น๋จ์ฒด์ ์กฐ๋ก๋ฅผ ๊ฒ์ํฉ๋๋ค.
**๋งค๊ฐ๋ณ์:**
- `query` (str): ๊ฒ์ ํค์๋
- `display` (int): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์, ์ต๋ 100 (๊ธฐ๋ณธ๊ฐ: 20)
- `page` (int): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)
**๋ฐํ๊ฐ:** ์กฐ๋ก ๋ชฉ๋ก์ด ํฌํจ๋ JSON
**์์:**
```python
result = await search_local_ordinances(query="ํ๊ฒฝ", display=10)
```
## ์ค์
### API ํค
API ํค(OC ๋งค๊ฐ๋ณ์)๋ ํ๊ฒฝ ๋ณ์์์ ๋ก๋๋ฉ๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ์ `.env` ํ์ผ์ ์์ฑํ์ธ์:
```bash
LEXLINK_API_KEY=your_api_key_here
```
API ํค๋ [๋ฒ์ ์ฒ ๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ API ํฌํธ](https://open.law.go.kr/LSO/openApi/guideList.do)์์ ๋ฐ๊ธ๋ฐ์ ์ ์์ต๋๋ค.
**์ฐธ๊ณ :** `.env` ํ์ผ์ `.gitignore`์ ์ํด ๋ฒ์ ๊ด๋ฆฌ์์ ์ ์ธ๋์ด ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณดํธํฉ๋๋ค.
### MCP ํด๋ผ์ด์ธํธ ์ค์
Claude Desktop์์ ์ฌ์ฉํ๋ ค๋ฉด `claude_desktop_config.json`์ ๋ค์์ ์ถ๊ฐํ์ธ์:
```json
{
"mcpServers": {
"lexlink": {
"command": "uv",
"args": ["run", "python", "/path/to/lexlink_mcp/main.py"],
"cwd": "/path/to/lexlink_mcp"
}
}
}
```
## ํ๋ก์ ํธ ๊ตฌ์กฐ
```
lexlink_mcp/
โโโ main.py # 7๊ฐ ๋๊ตฌ๊ฐ ํฌํจ๋ MCP ์๋ฒ
โโโ lexlink_client.py # API ํด๋ผ์ด์ธํธ ๋ํผ
โโโ pyproject.toml # ์ข
์์ฑ
โโโ smithery.yaml # Smithery.ai ์ค์
โโโ .env # API ํค (git์ ๋ฏธํฌํจ)
โโโ README.md # ์๋ฌธ ๋ฌธ์
โโโ README_kr.md # ํ๊ธ ๋ฌธ์
```
## API ์ ๋ณด
- **๊ฒ์ URL:** `http://www.law.go.kr/DRF/lawSearch.do`
- **์์ธ URL:** `http://www.law.go.kr/DRF/lawService.do`
- **์๋ต ํ์:** XML (์๋์ผ๋ก Python ๋์
๋๋ฆฌ๋ก ๋ณํ)
- **์์ฒญ ์ ํ:** ์์ฒญ ๊ฐ 0.5์ด ์ง์ฐ (๋ด์ฅ)
- **์ต๋ ๊ฒฐ๊ณผ:** ํ์ด์ง๋น 100๊ฑด
- **์ด ์ฌ์ฉ ๊ฐ๋ฅ API:** 125๊ฐ ์๋ํฌ์ธํธ
- **ํ์ฌ ๊ตฌํ:** 6๊ฐ ์๋ํฌ์ธํธ (5%)
## ํ
์คํธ
**ํ
์คํธ ๊ฒฐ๊ณผ (์ต์ข
์
๋ฐ์ดํธ: 2025๋
11์ 4์ผ):**
| ํ
์คํธ | ๋๊ตฌ | ์ํ | ์ธ๋ถ์ฌํญ |
|--------|------|------|----------|
| 1 | search_laws | โ
ํต๊ณผ | "๋ฏผ๋ฒ" ๊ฒ์ ์ 9๊ฑด ๋ฐ๊ฒฌ, ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ: ๋ฏผ๋ฒ (์์ ์ ์ฉ ํ) |
| 2 | get_law_details | โ
ํต๊ณผ | ๋ฏผ๋ฒ 1,337๊ฐ ์กฐ๋ฌธ ์กฐํ (MST: 265307) |
| 3 | search_case_law | โ
ํต๊ณผ | "์ํด๋ฐฐ์" ๊ฒ์ ์ 16,373๊ฑด ์ฌ์ฉ ๊ฐ๋ฅ |
| 4 | get_case_details | โ
ํต๊ณผ | ์ ๋ฌธ ์กฐํ ์ฑ๊ณต |
| 5 | search_legal_interpretations | โ
ํต๊ณผ | "๊ณ์ฝ" ๊ฒ์ ์ 257๊ฑด |
| 6 | get_legal_interpretation_details | โ
ํต๊ณผ | ์ง์/ํ๋ต ํฌํจ ์ ๋ฌธ ์กฐํ โจ ์ ๊ท |
| 7 | search_local_ordinances | โ
ํต๊ณผ | "ํ๊ฒฝ" ๊ฒ์ ์ 4,557๊ฑด |
**์ฑ๋ฅ ์งํ:**
- ํ๊ท ์๋ต ์๊ฐ: 0.8-1.5์ด
- ์์ฒญ ์ ํ: 0.5์ด ๊ฐ๊ฒฉ (๋ด์ฅ)
- ๋ชจ๋ ํ๊ธ ๋ฌธ์ ์ ์ ์ธ์ฝ๋ฉ โ
- ๋ชจ๋ ์๋ต์ XML ํ์ฑ ์ฑ๊ณต โ
- ๋ฐ์ดํฐ ์์ ์์ โ
## ๋ฌธ์ ํด๊ฒฐ
### dependencies ๋งค๊ฐ๋ณ์์ ๋ํ DeprecationWarning
FastMCP 2.11.4 ์ด์์ ๊ฒฝ๊ณ ์
๋๋ค. ์๋ฒ๋ ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค. ์์ ํ๋ ค๋ฉด `FastMCP()` ์ด๊ธฐํ์์ `dependencies` ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ฉ๋๋ค.
### ์์ฒญ ์ ํ
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ด์ฅ๋ ์์ฒญ ์ ํ๊ธฐ๊ฐ ์์ฒญ ๊ฐ 0.5์ด ์ง์ฐ์ ์ถ๊ฐํ์ฌ ์๋ฒ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
### ๋น ๊ฒฐ๊ณผ
์ผ๋ถ ์ฟผ๋ฆฌ๋ ์ด ๊ฐ์๊ฐ 0๋ณด๋ค ํฌ๋๋ผ๋ 0๊ฑด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ์ด๋ API ๋์์ด๋ฉฐ ํด๋ผ์ด์ธํธ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค.
## ์ฐธ๊ณ ์๋ฃ
- [๋ฒ์ ์ฒ ๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ API ํฌํธ](https://open.law.go.kr/LSO/openApi/guideList.do) - ๊ณต์ API ๋ฌธ์ (125๊ฐ ์๋ํฌ์ธํธ)
- [๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ](https://www.law.go.kr/) - ๋ฉ์ธ ๋ฒ๋ น์ ๋ณด ํฌํธ
- [FastMCP ๋ฌธ์](https://gofastmcp.com) - MCP ํ๋ ์์ํฌ ๋ฌธ์
## ๊ธฐ์ฌํ๊ธฐ
๋ ๋ง์ API๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ผ์ ๊ฐ์? ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
1. [๊ณต์ API ๊ฐ์ด๋](https://open.law.go.kr/LSO/openApi/guideList.do)์์ ์๋ํฌ์ธํธ ์ธ๋ถ์ ๋ณด ํ์ธ
2. ์ ์ ํ ํ๊ฒ ํ์
์ผ๋ก `lexlink_client.py`์ ๋ฉ์๋ ์ถ๊ฐ
3. `main.py`์ MCP ๋๊ตฌ ๋ฐ์ฝ๋ ์ดํฐ ์ถ๊ฐ
4. ์ด README์ ์ปค๋ฒ๋ฆฌ์ง ์
๋ฐ์ดํธ
**์ฐ์ ์์ ์์ญ:**
1. **์ต์ฐ์ ์์**: ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ก ๋ฐ ํ์ ์ฌํ๋ก API
2. **์ค๊ฐ ์ฐ์ ์์**: ์ถ๊ฐ ์์ํ ๊ฒฐ์ ๋ฌธ
3. **๊ฐ์ ์ฌํญ**: ๋ ๋์ ์์ ์๊ณ ๋ฆฌ์ฆ, ์๋ฏธ ๊ธฐ๋ฐ ๊ฒ์
4. **๋ฌธ์ํ**: ๋ ๋ง์ ์์, ์ฌ์ฉ ์ฌ๋ก
## ๋ผ์ด์ ์ค
๋ณธ ํ๋ก์ ํธ๋ ํ๊ตญ ์ ๋ถ์ ๊ณต๊ฐ ๋ฒ๋ น ์ ๋ณด์ ์ ๊ทผํ๊ธฐ ์ํด ์๋ ๊ทธ๋๋ก ์ ๊ณต๋ฉ๋๋ค.
## ์ ์
Claude Code์ ๋ฒ์ ์ฒ ๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ Open API๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋์์ต๋๋ค.
---
## ์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
### Q: API ํค๋ ์ด๋ป๊ฒ ๋ฐ๊ธ๋ฐ๋์?
A: [๋ฒ์ ์ฒ ๊ณต๋ํ์ฉ](https://open.law.go.kr/) ์ฌ์ดํธ์์ ํ์๊ฐ์
ํ API ์ ์ฒญ์ ํ๋ฉด 1-2์ผ ๋ด์ ์น์ธ๋ฉ๋๋ค.
### Q: ์์
์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋์?
A: ๋ฒ์ ์ฒ ๊ณต๋ํ์ฉ ์ฝ๊ด์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณต๊ณต ๋ฐ์ดํฐ๋ ์ถ์ฒ ํ์ ํ์ ์์ ๋กญ๊ฒ ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
### Q: ์ค์๊ฐ ๋ฐ์ดํฐ์ธ๊ฐ์?
A: ๋ค, ๋ฒ์ ์ฒ ๊ณต์ API์์ ์ต์ ๋ฒ๋ น ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
### Q: ํ๋ก๊ฐ ์ผ๋ง๋ ์๋์?
A: ํ์ฌ ๊ณต๊ฐ๋์ด ์๋ 8๋ง๊ฑด ์ด์์ ํ๋ก๊ฐ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค.
### Q: ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ก๋ ์ธ์ ์ถ๊ฐ๋๋์?
A: ์ฐ์ ์์๊ฐ ๋์ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋ค์ ๋ฒ์ ์์ ์ถ๊ฐ๋ ์์ ์
๋๋ค.
### Q: ์๋ฌธ ๋ฒ๋ น๋ ๊ฒ์ํ ์ ์๋์?
A: ํ์ฌ๋ ํ๊ธ ๋ฒ๋ น๋ง ์ง์ํ์ง๋ง, ์๋ฌธ๋ฒ๋ น API๋ ๊ณต์ API์ ์์ผ๋ฏ๋ก ์ถ๊ฐ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
### Q: ๋ก์ปฌ์์๋ง ์๋ํ๋์?
A: MCP ์๋ฒ๋ STDIO ์ ์ก์ ์ฌ์ฉํ๋ฏ๋ก ๋ก์ปฌ Claude Desktop์์ ์๋ํฉ๋๋ค. ์๊ฒฉ ์ฌ์ฉ์ ์ํ์๋ฉด HTTP ์ ์ก์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค.
### Q: ๊ฐ์ธ์ ๋ณด๊ฐ ์์ง๋๋์?
A: ์๋์. ๋ชจ๋ API ํธ์ถ์ ๋ฒ์ ์ฒ ์๋ฒ๋ก ์ง์ ์ ์ก๋๋ฉฐ, ๋ณธ ์๋ฒ๋ ์ด๋ ํ ๊ฐ์ธ์ ๋ณด๋ ์์งํ๊ฑฐ๋ ์ ์ฅํ์ง ์์ต๋๋ค.
---
## ์ฌ์ฉ ์์
### ์์ 1: ํน์ ๋ฒ๋ น์ ์กฐ๋ฌธ ์ฐพ๊ธฐ
```
์ฌ์ฉ์: ๋ฏผ๋ฒ ์ 750์กฐ ๋ด์ฉ์ ์๋ ค์ค
Claude๊ฐ ์ํํ๋ ์์
:
1. search_laws(query="๋ฏผ๋ฒ")๋ก ๋ฏผ๋ฒ ๊ฒ์
2. MST ๋ฒํธ ํ์ธ
3. get_law_details(mst="265307")๋ก ์ ๋ฌธ ์กฐํ
4. ์ 750์กฐ ๋ด์ฉ ์ถ์ถ ๋ฐ ์ ๊ณต
```
### ์์ 2: ํ๋ก ์ฐพ๊ธฐ
```
์ฌ์ฉ์: ์ํด๋ฐฐ์ ๊ด๋ จ ์ต๊ทผ ๋๋ฒ์ ํ๋ก๋ฅผ ์ฐพ์์ค
Claude๊ฐ ์ํํ๋ ์์
:
1. search_case_law(query="์ํด๋ฐฐ์", court_type="400201")
2. ๊ฒฐ๊ณผ ์ค ์ต๊ทผ ํ๋ก ํํฐ๋ง
3. ์ฌ๊ฑด๋ช
, ์ฌ๊ฑด๋ฒํธ, ์ ๊ณ ์ผ์ ์ ๊ณต
```
### ์์ 3: ๋ฒ๋ น ํด์ ์ฐพ๊ธฐ
```
์ฌ์ฉ์: ๊ณ์ฝ ๊ด๋ จ ๋ฒ์ ์ฒ ์ ๊ถํด์์ด ์์ด?
Claude๊ฐ ์ํํ๋ ์์
:
1. search_legal_interpretations(query="๊ณ์ฝ")
2. ๋ฒ์ ์ฒ ํ์ ๋ด์ฉ ๋ชฉ๋ก ์ ๊ณต
3. ์ฌ์ฉ์๊ฐ ์ํ๋ ํน์ ํด์ ์์ธ ์ ๊ณต
```
---
## ๊ธฐ์ ์คํ
- **์ธ์ด:** Python 3.12+
- **ํ๋ ์์ํฌ:** FastMCP 2.13+
- **HTTP ํด๋ผ์ด์ธํธ:** httpx 0.28+
- **ํจํค์ง ๊ด๋ฆฌ:** uv
- **API ์๋ต:** XML โ Python Dict ์๋ ๋ณํ
- **๋น๋๊ธฐ:** asyncio ๊ธฐ๋ฐ
## ์ฑ๋ฅ
- ํ๊ท ์๋ต ์๊ฐ: 0.8-1.5์ด
- ์์ฒญ ๊ฐ ์ง์ฐ: 0.5์ด (์๋ฒ ๋ณดํธ)
- ๋์ฉ๋ ๋ฒ๋ น (๋ฏผ๋ฒ ๋ฑ): ~2์ด
- ๋์ ์์ฒญ: ์ง์ํ์ง ์์ (์์ฐจ ์ฒ๋ฆฌ)
## ๋ณด์
- API ํค๋ ํ๊ฒฝ ๋ณ์๋ก ๊ด๋ฆฌ ๊ถ์ฅ
- HTTPS ๋ฏธ์ง์ (๋ฒ์ ์ฒ API๊ฐ HTTP๋ง ์ ๊ณต)
- ์
๋ ฅ ๊ฒ์ฆ ํฌํจ
- SQL ์ธ์ ์
๋ถ๊ฐ (API ํธ์ถ๋ง ์ฌ์ฉ)
## ๋ณ๊ฒฝ ์ด๋ ฅ (Changelog)
### ๋ฒ์ 0.1.0 (2025๋
11์ 3์ผ)
#### โจ ์๋ก์ด ๊ธฐ๋ฅ
**์ง๋ฅํ ๊ฒ์ ์์**
- ์ ํํ ์ผ์น ์ฐ์ ์์ ์๊ณ ๋ฆฌ์ฆ
- ์ ๋์ฌ ๋งค์นญ ๋ฐ ๋จ์ด ๊ฒฝ๊ณ ๊ฐ์ง
- ์ค๋งํธ ํ์นญ: display < 20์ผ ๋ ์๋์ผ๋ก 5๋ฐฐ ๋ ๋ง์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ ์์ ๋งค๊น
- search_laws, search_case_law, search_legal_interpretations์ ์ ์ฉ
- `auto_rank=False` ๋งค๊ฐ๋ณ์๋ก ๋นํ์ฑํ ๊ฐ๋ฅ
**๊ฒฐ๊ณผ:**
- ์ด์ : "๋ฏผ๋ฒ" ๊ฒ์ ์ "๋๋ฏผ๋ฒ"์ด ์ฒซ ๋ฒ์งธ๋ก ํ์ โ
- ์ดํ: "๋ฏผ๋ฒ" ๊ฒ์ ์ "๋ฏผ๋ฒ"์ด ์ฒซ ๋ฒ์งธ๋ก ํ์ โ
**ํต์ฌ ๊ตฌํ**
- ํ๊ตญ ๋ฒ๋ น ์ ๋ณด๋ฅผ ์ํ 6๊ฐ์ MCP ๋๊ตฌ
- ์ต์ ์ ์ฑ๋ฅ์ ์ํ ๋น๋๊ธฐ(Async/await) ์ฒ๋ฆฌ
- ์์ฒญ ์ ํ (0.5์ด ๊ฐ๊ฒฉ)
- ํฌ๊ด์ ์ธ XML ํ์ฑ
- ํ์
ํํธ์ ์์ธํ ์ค๋ช
- ๋ชจ๋ ์์
์ ๋ํ ์ค๋ฅ ์ฒ๋ฆฌ
**API ์ปค๋ฒ๋ฆฌ์ง**
- 125๊ฐ ์๋ํฌ์ธํธ ์ค 6๊ฐ ๊ตฌํ
- ์ผ๋ฐ์ ์ธ ๋ฒ๋ฅ ๋ฆฌ์์น ์
๋ฌด์ ์ฝ 80% ์ปค๋ฒ
**ํ
์คํธ**
- 6๊ฐ ๋๊ตฌ ๋ชจ๋ ๊ฒ์ฆ๋ ์ข
ํฉ ํ
์คํธ ์ค์ํธ
- ์ค์ API ๋ฐ์ดํฐ๋ก ๋ชจ๋ ํ
์คํธ ํต๊ณผ
- ์ฑ๋ฅ ์งํ ์ถ์ ๋ฐ ๋ฌธ์ํ
### ๋ก๋๋งต
**v0.2 (๊ณํ)**
- ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ก API
- ํ์ ์ฌํ๋ก API
- ํ๊ฒฝ ๋ณ์๋ฅผ ํตํ API ํค ๊ด๋ฆฌ
- ์์ฃผ ์ก์ธ์ค๋๋ ๋ฒ๋ น์ ๋ํ ์๋ต ์บ์ฑ
**v0.3 (๊ณํ)**
- ์๋ฌธ๋ฒ๋ น ์ง์
- ๋ฒ๋ น ์ฐํ ์ถ์
- ๊ณต์ ๊ฑฐ๋์์ํ ๊ฒฐ์ ๋ฌธ
- ๋
ธ๋์์ํ ๊ฒฐ์ ๋ฌธ
- ๋ฒ๋ น์ฉ์ด ์ฌ์
**v1.0 (๋ชฉํ)**
- ๋ชจ๋ ์ฃผ์ ์์ํ ๊ฒฐ์ ๋ฌธ ์ง์
- ์กฐ์ฝ ๊ฒ์
- ์ฑ๋ฅ ์ต์ ํ
- ๊ณ ๊ธ ํํฐ๋ง ์ต์
## ์ฐ๋ฝ์ฒ
์ด์๋ ์ ์์ฌํญ์ GitHub Issues๋ฅผ ํตํด ๋ฑ๋กํด์ฃผ์ธ์.
---
**๋ง์ง๋ง ์
๋ฐ์ดํธ:** 2025๋
11์ 3์ผ
**๋ฒ์ :** 0.1.0
**์ํ:** ์์ (Stable)