korea-life-mcp
by mongle250129
README.md
# korea-life-mcp ๐ฐ๐ท
**ํ๊ตญ ์ํ ํนํ ์ ํธ๋ฆฌํฐ MCP ์๋ฒ** โ ์นด์นด์ค **PlayMCP** ๊ณต๋ชจ์ (MCP Player 10) ์ ์ถ์ฉ.
์ธ๋ถ API ํคยท๋คํธ์ํฌยท๊ฐ์ธ์ ๋ณด ์กฐํ ์์ด **์์ ํ ์๊ธฐ์๊ฒฐํ**์ผ๋ก ๋์ํ๋ฏ๋ก, MCP Inspector ๊ฒ์ฆ๊ณผ ์ฌ์ฌ๊ฐ ๊ฐ๋จํ๊ณ ์์ ์ ์
๋๋ค.
---
## ์ ๊ณต ๋๊ตฌ (15์ข
)
| ๋๊ตฌ | ์ค๋ช
| ์์ |
|------|------|------|
| `decompose_hangul` | ํ๊ธ์ ์ด/์ค/์ข
์ฑ์ผ๋ก ๋ถํด | `๊ฐ` โ ใฑ, ใ
, ใ
|
| `chosung` | ์ด์ฑ ๊ฒ์์ฉ ๋ฌธ์์ด ์์ฑ | `ํ๊ตญ์ด` โ `ใ
ใฑใ
` |
| `compose_hangul` | ์๋ชจ๋ฅผ ์์ฑํ ํ๊ธ๋ก ์กฐํฉ | ใ
,ใ
,ใด โ `ํ` |
| `romanize` | ๋ก๋ง์ ํ๊ธฐ(์์๋ํ ๋ฐ์) | `์ข
๋ก` โ `jongno` |
| `number_to_korean` | ์ซ์ โ ํ๊ธ (์ฝ๊ธฐ/๊ธ์ก ์ ์์ฒด) | `12345` โ `์ผ๋ง์ด์ฒ์ผ๋ฐฑ์ฌ์ญ์ค` |
| `korean_to_number` | ํ๊ธ ๊ธ์ก โ ์ซ์ | `์ผ๋ง์ด์ฒ์ผ๋ฐฑ์ฌ์ญ์ค` โ `12345` |
| `validate_business_number` | ์ฌ์
์๋ฑ๋ก๋ฒํธ ์ฒดํฌ์ฌ ๊ฒ์ฆ | `220-81-62517` โ valid |
| `validate_rrn` | ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ ํ์/์ฒดํฌ์ฌ + ์๋
์์ผยท์ฑ๋ณ ์ถ์ถ | ํ์ ๊ฒ์ฆ๋ง (์กฐํ X) |
| `korean_holidays` | ์ฐ๋๋ณ ๊ณตํด์ผ ๋ชฉ๋ก | `2026` โ ์ ์ , ์ค๋ โฆ |
| `business_days_between` | ๋ ๋ ์ง ์ฌ์ด ์์
์ผ(์ฃผ๋งยท๊ณตํด์ผ ์ ์ธ) ์ | |
| `d_day` | ๊ธฐ์ค์ผโ๋ชฉํ์ผ D-day ๊ณ์ฐ | `D-6` |
| `format_phone_number` | ์ ํ๋ฒํธ ํฌ๋งท + ์ข
๋ฅ/์ง์ญ ํ๋ณ | `0212345678` โ ์์ธ, `02-1234-5678` |
| `area_convert` | ๋ฉด์ ํโใก ๋ณํ | `34ํ` โ `112.4ใก` |
| `korean_age` | ๋ง ๋์ดยท์ฐ ๋์ดยท์ธ๋๋์ด ๊ณ์ฐ | ์๋
์์ผ+๊ธฐ์ค์ผ |
| `won_format` | ์ํ ์ฒ ๋จ์ ํฌ๋งท | `1234567` โ `โฉ1,234,567` |
> โ ๏ธ **๊ฐ์ธ์ ๋ณด ์์ **: `validate_rrn`์ ์ด๋ค ์ธ๋ถ ์กฐํ๋ ํ์ง ์์ผ๋ฉฐ, ์
๋ ฅ๋ ๋ฒํธ์ **ํ์ยท์ฒดํฌ์ฌ๋ง** ๊ณ์ฐํฉ๋๋ค.
---
## 1. ์ค์น & ๋ก์ปฌ ์คํ
```bash
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt # ๋๋: pip install mcp
# (a) ๋ก์ปฌ ๊ฐ๋ฐ์ฉ stdio ๋ชจ๋ โ Claude Desktop ๋ฑ์์ ์ง์ ์คํ
python server.py
# (b) ์๊ฒฉ(Streamable HTTP) ๋ชจ๋ โ PlayMCP ๋ฐฐํฌ์ ๋์ผํ ํํ
# ์๋ํฌ์ธํธ: http://0.0.0.0:8000/mcp
MCP_TRANSPORT=http python server.py
```
Windows PowerShell์์ HTTP ๋ชจ๋๋ก ๋์ฐ๋ ค๋ฉด:
```powershell
$env:MCP_TRANSPORT="http"; python server.py
```
### ํ๊ฒฝ๋ณ์
| ๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|------|--------|------|
| `MCP_TRANSPORT` | `stdio` | `stdio` / `http`(streamable) / `sse` |
| `HOST` | `0.0.0.0` | HTTP ๋ฐ์ธ๋ ์ฃผ์ |
| `PORT` | `8000` | HTTP ํฌํธ |
---
## 2. ์์ฒด ํ
์คํธ
```bash
python test_tools.py # ์์ ๋ก์ง 21๊ฐ ์ผ์ด์ค ๊ฒ์ฆ (21/21 PASS)
```
---
## 3. MCP Inspector๋ก ๊ฒ์ฆ (PlayMCP ๋ฑ๋ก ์ ํ์)
Inspector๋ ๋ณ๋ ์ค์น ์์ด `npx`๋ก ์คํ๋ฉ๋๋ค.
**HTTP(์๊ฒฉ) ๋ชจ๋ ๊ฒ์ฆ** โ PlayMCP ๋ฑ๋ก ํํ์ ๋์ผํ๋ฏ๋ก ๊ถ์ฅ:
```bash
# ํฐ๋ฏธ๋ 1: ์๋ฒ ์คํ
MCP_TRANSPORT=http python server.py
# ํฐ๋ฏธ๋ 2: Inspector ์คํ ํ ๋ธ๋ผ์ฐ์ ์์ ์ ์
npx @modelcontextprotocol/inspector
# โ Transport: "Streamable HTTP"
# โ URL: http://localhost:8000/mcp
# โ Connect โ Tools ํญ์์ 11๊ฐ ๋๊ตฌ ํธ์ถ ํ
์คํธ
```
**stdio ๋ชจ๋ ๊ฒ์ฆ**:
```bash
npx @modelcontextprotocol/inspector python server.py
```
---
## 4. ์นด์นด์ค ํด๋ผ์ฐ๋ ๋ฐฐํฌ (์๊ฒฉ ์๋ํฌ์ธํธ ๋ง๋ค๊ธฐ)
PlayMCP๋ **๊ณต๊ฐ URL์ ๊ฐ์ง ์๊ฒฉ MCP ์๋ฒ**๋ฅผ ๋ฑ๋กํฉ๋๋ค. ํฌํจ๋ `Dockerfile`๋ก ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ์นด์นด์ค ํด๋ผ์ฐ๋์ ๋ฐฐํฌํ์ธ์.
```bash
# ์ด๋ฏธ์ง ๋น๋
docker build -t korea-life-mcp .
# ๋ก์ปฌ์์ ์ปจํ
์ด๋ ๋์ ํ์ธ (http://localhost:8000/mcp)
docker run -p 8000:8000 korea-life-mcp
```
์นด์นด์ค ํด๋ผ์ฐ๋์ ๋ฐฐํฌํ๋ฉด `https://<๋ฐ๊ธ๋ฐ์-๋๋ฉ์ธ>/mcp` ํํ์ **๊ณต๊ฐ ์๋ํฌ์ธํธ**๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด URL์ ๋ค์ ๋จ๊ณ์์ ๋ฑ๋กํฉ๋๋ค.
> ๐ **๊ฐ์ฅ ์ฌ์ด ๋ฐฐํฌ(VM + Docker + ์๋ HTTPS) ๋จ๊ณ๋ณ ๊ฐ์ด๋**: [`deploy/DEPLOY.md`](deploy/DEPLOY.md)
>
> ๊ณต๋ชจ์ ๊ท์ ์ ์ ์ถ๋ฌผ์ **์นด์นด์ค ํด๋ผ์ฐ๋ MCP ์๋ฒ ์๋ํฌ์ธํธ**์ฌ์ผ ์ฐธ๊ฐ ์๊ฒฉ์ด ์ธ์ ๋ฉ๋๋ค.
---
## 5. PlayMCP ๋ฑ๋ก ์ ์ฐจ
1. [playmcp.kakao.com](https://playmcp.kakao.com/) ์ ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
2. ๊ฐ๋ฐ์ ์ฝ์ โ **์ MCP ์๋ฒ ๋ฑ๋ก**
3. ์ 4๋จ๊ณ์์ ๋ง๋ **์นด์นด์ค ํด๋ผ์ฐ๋ ์๋ํฌ์ธํธ URL**(`.../mcp`) ์
๋ ฅ
4. ์ ๊ณต๋ ํ
ํ๋ฆฟ์ ๋ง์ถฐ ์๋ฒ ์ ๋ณด(์ด๋ฆยท์ค๋ช
ยท๋๊ตฌ ๋ชฉ๋ก) ์์ฑ
5. Inspector ๊ฒ์ฆ ์๋ฃ ํ **๊ณต๊ฐ(Public) ์ ํ**
6. ๊ณต๋ชจ์ ํ์ด์ง์์ ์ ์ถ โ ์ฌ์ฌ ๋๊ธฐ
---
## ์๋ ค์ง ํ๊ณ
- `romanize`: ์๋ชจ ๋งคํ + ์ฐ์ + **์์๋ํ(์ ์ํยท๋น์ํ) ์ฃผ์ ๊ท์น**์ ๋ฐ์ํฉ๋๋ค(`์ข
๋ก`โ`jongno`, `์ ๋ผ`โ`silla`, `ํ๋ ฅ`โ`hyeomnyeok`). ๋ค๋ง **๊ฒน๋ฐ์นจ ์ฐ์ยท๊ตฌ๊ฐ์ํยทใ
์ถ์ฝ** ๋ฑ ์ผ๋ถ ์์ด ๋ณ๋์ ๋จ์ํ๋์ด ์์ต๋๋ค.
- `korean_holidays` / `business_days_between`: **์๋ ฅ ๊ณ ์ ๊ณตํด์ผ**์ ๋ชจ๋ ์ฐ๋ ๊ณ์ฐ ๊ฐ๋ฅํ์ง๋ง, **์๋ ฅ ๊ธฐ๋ฐ(์ค๋ ยท์ถ์ยท๋ถ์ฒ๋์ค์ ๋ ) ๋ฐ ๋์ฒด๊ณตํด์ผ**์ `korea_tools.py`์ `_LUNAR_TABLE`์ ๋ฑ๋ก๋ ์ฐ๋(ํ์ฌ 2025ยท2026)๋ง ์ ํํฉ๋๋ค. ๋ค๋ฅธ ์ฐ๋๋ ๊ฒฐ๊ณผ์ `note` ํ๋๋ก ์๋ด๋๋ฉฐ, ํ๋ฅผ ๊ฐฑ์ ํ๋ฉด ํ์ฅ๋ฉ๋๋ค.
---
## ํ๋ก์ ํธ ๊ตฌ์กฐ
```
korea-life-mcp/
โโโ server.py # FastMCP ์๋ฒ (๋๊ตฌ 11์ข
๋
ธ์ถ, stdio/http ์ ํ)
โโโ korea_tools.py # ์์ ๋ก์ง ํจ์ (ํ
์คํธ ๊ฐ๋ฅ, ๋คํธ์ํฌ ๋ฏธ์ฌ์ฉ)
โโโ test_tools.py # ์์ฒด ๊ฒ์ฆ ์คํฌ๋ฆฝํธ
โโโ requirements.txt # ์์กด์ฑ (mcp)
โโโ pyproject.toml # ํจํค์ง ๋ฉํ๋ฐ์ดํฐ
โโโ Dockerfile # ์นด์นด์ค ํด๋ผ์ฐ๋ ๋ฐฐํฌ์ฉ ์ปจํ
์ด๋
โโโ README.md
```
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues