# ๐ฉธ T1D Manager (1ํ ๋น๋จ ๊ด๋ฆฌ MCP)
<p align="center">
<img src="./t1d_mcp_icon.png" alt="T1D Manager Icon" width="200"/>
</p>
**์นด์นด์ค MCP Develop Competition (MCP Player 10) ์ถํ์**
1ํ ๋น๋จ ํ์์ ๋ณดํธ์๋ฅผ ์ํ **AI ์์ด์ ํธ ์๋ฒ**์
๋๋ค.
๋ณต์กํ ์ค์ ์์ด๋ ์ค์๊ฐ ํ๋น ๊ด๋ฆฌ์ ์ํ ๋ (Sick Day) ์ผ์ด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
---
## ๐ PlayMCP ๋ฑ๋ก ์ ๋ณด
### ๐ฏ Lite ๋ฒ์ (๊ฒฝ์ฐ์ฉ - OAuth ๋ถํ์)
| ํญ๋ชฉ | ๊ฐ |
|------|-----|
| **MCP ์ด๋ฆ** | T1D Manager Lite |
| **MCP Endpoint** | `https://t1d-mcp-lite.fly.dev/mcp` |
| **๋๊ตฌ ๊ฐ์** | 3๊ฐ |
**MCP ์ค๋ช
(๋ณต์ฌ์ฉ)**:
> 1ํ ๋น๋จ ํ์์ ๋ณดํธ์๋ฅผ ์ํ AI ํ๋น ๊ด๋ฆฌ ๋์ฐ๋ฏธ์
๋๋ค. ์ธ์๋ฆฐ ์ฉ๋ ๊ณ์ฐ(ISF/ICR ๊ธฐ๋ฐ), ISPAD/ADA ์์ ๊ฐ์ด๋๋ผ์ธ ๊ธฐ๋ฐ ์ํ ๋ (Sick Day) ์ผ์ด, ๋ค์ด๋ฒ/๋ค์ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์ผ๋ก ๋น๋จ ์ปค๋ฎค๋ํฐ ๊ฟํ์ ์ ๊ณตํฉ๋๋ค. OAuth ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
---
### ๐ Full ๋ฒ์ (Dexcom OAuth ํฌํจ)
| ํญ๋ชฉ | ๊ฐ |
|------|-----|
| **MCP ์ด๋ฆ** | T1D Manager |
| **MCP Endpoint** | `https://t1d-mcp.fly.dev/mcp` |
| **๋๊ตฌ ๊ฐ์** | 6๊ฐ |
**MCP ์ค๋ช
(๋ณต์ฌ์ฉ)**:
> 1ํ ๋น๋จ ํ์์ ๋ณดํธ์๋ฅผ ์ํ AI ํ๋น ๊ด๋ฆฌ ๋์ฐ๋ฏธ์
๋๋ค. Dexcom CGM ์ค์๊ฐ ์ฐ๋(OAuth 2.0)์ผ๋ก ํ์ฌ ํ๋น๊ณผ ์ถ์ธ๋ฅผ ํ์ธํ๊ณ , ISPAD/ADA ์์ ๊ฐ์ด๋๋ผ์ธ ๊ธฐ๋ฐ ์ํ ๋ (Sick Day) ์ผ์ด ๋ฐ ์ธ์๋ฆฐ ๊ณ์ฐ์ ์ง์ํฉ๋๋ค. ๋ค์ด๋ฒ/๋ค์ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์ผ๋ก ๋น๋จ ์ปค๋ฎค๋ํฐ ๊ฟํ๋ ์ ๊ณตํฉ๋๋ค.
---
## ๐ ๏ธ ๋๊ตฌ ๋ชฉ๋ก
### ํต์ฌ ๋๊ตฌ (Lite/Full ๊ณตํต)
| ๋๊ตฌ | ์ค๋ช
|
|------|------|
| `calculate_insulin_dosage` | ํ๋น/ํ์ํ๋ฌผ ๊ธฐ๋ฐ ์ธ์๋ฆฐ ์ฉ๋ ๊ณ์ฐ |
| `search_diabetes_community` | ๋ค์ด๋ฒ/๋ค์ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ (ํ์ ๊ฒฝํ๋ด, ๊ฟํ) |
| `analyze_sick_day_guidelines` | ISPAD/ADA ๊ธฐ๋ฐ ์ํ ๋ ์ผ์ด ๊ฐ์ด๋๋ผ์ธ |
### Dexcom ๋๊ตฌ (Full ๋ฒ์ ๋ง)
| ๋๊ตฌ | ์ค๋ช
|
|------|------|
| `get_dexcom_auth_url` | Dexcom OAuth ์ธ์ฆ URL ์์ฑ |
| `get_cgm_sandbox` | Authorization Code๋ก CGM ๋ฐ์ดํฐ ์กฐํ |
| `get_cgm_with_token` | Access Token์ผ๋ก CGM ๋ฐ์ดํฐ ์กฐํ |
---
## ๐ฌ ๋ํ ์์
| ๋ฒํธ | ์์ |
|------|------|
| 1 | ๋ฐฅ ๋จน์ผ๋ ค๋๋ฐ ํ์ํ๋ฌผ 60g์ด์ผ. ์ธ์๋ฆฐ ์ผ๋ง๋ ๋ง์์ผ ํด? |
| 2 | ๋ ์ด๋๊ณ ํ ํ์ด. ์ด๋ป๊ฒ ํด์ผ ํด? |
| 3 | ์ ํ๋น ๊ฐ์ ์ถ์ฒํด์ค |
| 4 | Dexcom ๋ก๊ทธ์ธ ํ ๋ (Full ๋ฒ์ ) |
---
## โจ ํต์ฌ ๊ธฐ๋ฅ
### 1. ๐ฝ๏ธ ์ค๋งํธ ์ธ์๋ฆฐ ๊ณ์ฐ
- **๊ธฐ๋ฅ**: ํ๋น/ํ์ํ๋ฌผ ์
๋ ฅ ์ ์ ํํ ์ธ์๋ฆฐ ์ฉ๋๊ณผ ๊ต์ก ์๋ฃ๋ฅผ **๊ตฌ์กฐํ๋ JSON**์ผ๋ก ๋ฐํํฉ๋๋ค.
- ํ ๋ฃจ์๋ค์ด์
์๋ ์ ํํ ๊ณ์ฐ์ ๋ณด์ฅํฉ๋๋ค.
### 2. ๐ฅ ์ํ ๋ (Sick Day) ์ผ์ด
- **๊ธฐ๋ฅ**: \"๋ ์ด ๋๊ณ ํ ํ์ด\" โ ISPAD/ADA ๊ฐ์ด๋๋ผ์ธ ๊ธฐ๋ฐ ์ํ๋ ๋ถ์ ๋ฐ ํ๋ ์ง์นจ ์ ๊ณต.
- **๋ฐ์ดํฐ**: ์๋ถ ์ญ์ทจ, ์ผํค ์ธก์ , ์๊ธ์ค ๋ฐฉ๋ฌธ ๊ธฐ์ค ๋ฑ ์์ ํ ์๋ฃ ์ง์นจ์ ์๋ดํฉ๋๋ค.
### 3. ๐ ํ์ด๋ธ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ ๊ฒ์
- **๊ธฐ๋ฅ**: ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ(ํ์ ๊ฒฝํ๋ด)์ ๋ค์ ์น(์ ๋ณด)์ ๋์์ ๊ฒ์ํ์ฌ ์ค์ง์ ์ธ ๊ฟํ์ ์ ๊ณตํฉ๋๋ค.
### 4. ๐ Dexcom CGM ์ค์๊ฐ ์ฐ๋ (Full ๋ฒ์ )
- **๊ธฐ๋ฅ**: Dexcom ๊ณต์ Developer API (OAuth 2.0) ์ง์์ผ๋ก ์ค์๊ฐ ํ๋น ๋ฐ ์ถ์ธ ํ์ธ.
---
## ๐ ๏ธ ๊ธฐ์ ์คํ & ๊ตฌ์กฐ
- **Core**: Python 3.12, `mcp` (Model Context Protocol), `FastMCP`
- **Transport**: **Streamable HTTP** (MCP ํ์ค ์ค์)
- **Integrations**: Dexcom Developer API (OAuth), Naver/Kakao Search
- **Infra**: Docker, Fly.io
```
t1d-mcp/
โโโ src/
โ โโโ server.py # Streamable HTTP Server Entrypoint
โ โโโ main.py # FastMCP Tool Definitions
โ โโโ tools/
โ โ โโโ dexcom_tools.py # Dexcom OAuth Tools (์กฐ๊ฑด๋ถ ๋ก๋)
โ โโโ cgm/ # Dexcom Official API Client
โ โโโ treatment/ # Sick Day Logic, Insulin Calc
โ โโโ community/ # Hybrid Search
โโโ tests/ # ๋จ์ ํ
์คํธ
```
---
## ๐ ์์ํ๊ธฐ
### 1. ๋ก์ปฌ ์คํ
```bash
# ์์กด์ฑ ์ค์น (uv ์ฌ์ฉ ๊ถ์ฅ)
uv sync
# ์๋ฒ ์คํ (Streamable HTTP on port 8080)
uv run uvicorn src.server:app --host 0.0.0.0 --port 8080
```
### 2. MCP Inspector๋ก ํ
์คํธ
```bash
# Lite ๋ฒ์ (OAuth ์์)
npx @modelcontextprotocol/inspector --transport http --server-url https://t1d-mcp-lite.fly.dev/mcp
# Full ๋ฒ์ (Dexcom ํฌํจ)
npx @modelcontextprotocol/inspector --transport http --server-url https://t1d-mcp.fly.dev/mcp
```
---
## ๐ง ํ๊ฒฝ ์ค์
### Lite ๋ฒ์ (๊ธฐ๋ณธ)
Dexcom ๋๊ตฌ ์์ด ํต์ฌ 3๊ฐ ๋๊ตฌ๋ง ํ์ฑํ๋ฉ๋๋ค.
```bash
# fly.lite.toml
ENABLE_DEXCOM = "false"
```
### Full ๋ฒ์
Dexcom OAuth ๋๊ตฌ๊น์ง ๋ชจ๋ ํ์ฑํ๋ฉ๋๋ค.
```bash
# fly.toml (๊ธฐ๋ณธ๊ฐ)
ENABLE_DEXCOM = "true" # ๋๋ ๋ฏธ์ค์
```
---
## ๐
To-Do / Roadmap
### ์๋ฃ๋จ
- [x] SSE โ Streamable HTTP ๋ง์ด๊ทธ๋ ์ด์
- [x] Sick Day ๊ฐ์ด๋๋ผ์ธ ๋๊ตฌ ๊ฐ์ (JSON ๊ตฌ์กฐํ, ์ํ์ ๊ทผ๊ฑฐ ๋ณด๊ฐ)
- [x] Fly.io ๋ฐฐํฌ ์๋ฃ
- [x] Dexcom Developer Portal ์ฑ ๋ฑ๋ก (Sandbox)
- [x] Legacy ID/PW ๋๊ตฌ ์ ๊ฑฐ (์ฌ์ฌ ๊ธฐ์ค ์ค์)
- [x] ๋๊ตฌ ์ต์ ํ (9๊ฐ โ 6๊ฐ)
- [x] Lite/Full ๋ฒ์ ๋ถ๋ฆฌ (ํ๊ฒฝ๋ณ์ ๊ธฐ๋ฐ)
### ์์
- [ ] Dexcom Production ํ๊ฒฝ ํ
์คํธ
- [ ] ์์์ ๋ณด API ์ฐ๋ (FoodSafetyKorea ๋ฑ ์ธ๋ถ API)
---
## โ ๏ธ ๋ฉด์ฑ
์กฐํญ (Medical Disclaimer)
> ๋ณธ ์๋น์ค๋ ์๋ฃ ๊ธฐ๊ธฐ๊ฐ ์๋๋ฉฐ, ์ ๊ณต๋๋ ์ ๋ณด๋ ์ฐธ๊ณ ์ฉ์
๋๋ค.
> ์ํ์ ๊ฒฐ์ ์ ๋ฐ๋์ ๋ด๋น ์๋ฃ์ง๊ณผ ์์ํด์ผ ํฉ๋๋ค.
> ์ธ์๋ฆฐ ์ฉ๋ ๊ณ์ฐ์ด๋ Sick Day ๊ด๋ฆฌ๋ ํ์์ ๊ฐ๋ณ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
### ๐ ๊ด๋ จ ๋ฌธ์
- [DEPLOYMENT.md](./DEPLOYMENT.md): Fly.io ๋ฐฐํฌ ๊ฐ์ด๋
- [GUIDELINE.md](./GUIDELINE.md): MCP ์๋ฒ ์์ฑ ๊ฐ์ด๋ ๋ฐ ์ฌ์ฌ ์ ์ฑ