reading-coach
by Woorim-Chun
README.md
# ๐ AI ๋
์ ํ๋ ์ดํฐ & ์ฝ์น (reading-coach MCP)
์นด์นด์ค PlayMCP **AGENTIC PLAYER 10** ์ถํ์ฉ MCP ์๋ฒ.
์์นด๊ณ ํ๋(๊ทธ๋ ์ดํธ๋ถ์ค) **144์ **์ ๊ธฐ๋ฐ์ผ๋ก, ์ฌ์ฉ์๊ฐ ์ฝ์ ์ฑ
์ ๊ธฐ์ตํด **์ปค๋ฆฌํ๋ผ์ ๋จ๊ณ๋ณ๋ก ์์ฃผ**์ํค๋ AI ๋
์ ๋๋ฐ์.
## ์ฐจ๋ณํ (๊ธฐ๋ณธ LLM๊ณผ ์ ๊ฒน์น๋ ๋ ์ถ)
1. **ํ๋ ์ด์
๋ฐ์ดํฐ** โ ํ๊ฐ์ด ์๋ ์ค์ ๋ช
๋ฌธ ์ปค๋ฆฌํ๋ผ(์์นด๊ณ ํ๋ 144์ )์์ ์ถ์ฒ
2. **์ํ(๊ธฐ์ต)** โ ๊ฐ์ธ ํ ํฐ์ผ๋ก ์ฝ์ ์ฑ
์ ๊ธฐ์ต โ "๋งฅ๋ฒ ์ค ์ฝ์์ผ๋ ๋ค์์ ํ๋ฆฟ"์ฒ๋ผ ์ด์ด์ค
> ์ํ ์๋ ๊ธฐ๋ณธ ์ฑ๋ด์ ๋งค๋ฒ ์ถ์ฒ์ ๋ญ๋ฑ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๋ญ ์ฝ์๋์ง ์๋๋ค. ์ด ์๋ฒ๋ ๋ ๋ค ํด๊ฒฐํ๋ค.
## MCP ๋๊ตฌ 4์ข
| ๋๊ตฌ | ์ค๋ช
| ํต์ฌ ์ธ์ |
|------|------|-----------|
| `recommend_books` | ์ปค๋ฆฌํ๋ผ ์์์ ๋ค์ ์ฝ์ ์ฑ
์ถ์ฒ | `token?`, `interest?`, `limit?` |
| `log_book` | ์๋
์ฑ
๊ธฐ๋ก + ์ฐ์์ผ(streak) ๊ฐฑ์ | `token`, `bookId`/`title`, `rating?` |
| `coaching_note` | ์ฑ
๋งฅ๋ฝ์ ๋ง์ถ ๋
ํ ์ฝ์นญ ์ง๋ฌธ ๊ณจ๊ฒฉ | `bookId`/`title` |
| `reading_report` | ์ด๋ฒ๋ฌยท๋์ ยท์ฐ์์ผยท์ฐ์ฐจ๋ณ ์ง์ฒยท๋ค์์ถ์ฒ | `token` |
## ์ํคํ
์ฒ
- **๊ณต์ MCP TypeScript SDK** (`@modelcontextprotocol/sdk`)
- **Streamable HTTP**(stateless) โ `POST /mcp`, ํฌ์ค์ฒดํฌ `GET /health`
- **์ฌ์ฉ์ ์๋ณ = ๊ฐ์ธ ํ ํฐ ์ธ์** (์นด์นด์ค ๋ก๊ทธ์ธ ๋ถ์, PII 0)
- **์ํ ์ ์ฅ** = `data/users.json` (๋ก์ปฌ). ์นด์นด์ค ํด๋ผ์ฐ๋ ๋ฐฐํฌ ์ `src/store.ts` ์ธํฐํ์ด์ค๋ง DB๋ก ๊ต์ฒด
## ์คํ
```bash
npm install
npm run dev # tsx watch (๊ฐ๋ฐ)
npm start # ์๋ฒ ๊ตฌ๋ (๊ธฐ๋ณธ PORT=3000)
node test/smoke.mjs # 4๊ฐ ๋๊ตฌ ์ค๋ชจํฌ ํ
์คํธ (์๋ฒ ๋จผ์ ๋์ธ ๊ฒ)
```
## ๋ฐ์ดํฐ
- `src/data/chicagoPlan.json` โ 144๊ถ (idยท์ฐ์ฐจยท์ ์ยท์๋ชฐยท์ ๋ชฉยท์์ ยท๋ฐ์ท์ฌ๋ถ)
- **์ฑ
๋ณธ๋ฌธ์ ํฌํจํ์ง ์์.** ๋ชฉ๋ก(๊ณต๊ฐ์ ๋ณด) ๊ธฐ๋ฐ ์ถ์ฒยท๊ธฐ๋กยท์ฝ์นญ๋ง. ์ถ์ฒ ํ๊ธฐ ํ์.
## ํ๋ ์ ์ฝ
- ์์
ํ์ PII / ์ค Firebase **์ ๋ ์ฐ๊ฒฐ ๊ธ์ง** (๋
๋ฆฝ ์๋ฒ + ์์ฒด ๋ฐ์ดํฐ)
- ์ฑ
๋ณธ๋ฌธ ์ ์ฌ ๊ธ์ง(์ ์๊ถ), ๋ชฉ๋ก ์ถ์ฒ ํ๊ธฐ
## TODO (์ ์ถ๊น์ง)
- [ ] ์นด์นด์ค ํด๋ผ์ฐ๋ endpoint ์์ฑยท๋ฐฐํฌ (๊ณต์ Notion ๊ฐ์ด๋)
- [ ] PlayMCP ๊ฐ๋ฐ์ ์ฝ์ ๋ฑ๋ก โ ์์๋ฑ๋ก โ ์ฌ์ฌ์์ฒญ (~7/7 ์น์ธ ๋ชฉํ)
- [ ] ๋น๋ ์ฐ์ถ๋ฌผ์ data/ ๋ณต์ฌ ๋จ๊ณ (`npm run build` ํ dist/data)
- [ ] ๋ณธ์ ์ง์ถ ์ Kakao Tools Widget ์คํ ๋์