Skip to main content
Glama
bb4rjfl
by bb4rjfl
README.md
# Korea Trip Concierge ๐Ÿ‡ฐ๐Ÿ‡ท

๋ฐฉํ•œ ์™ธ๊ตญ์ธ์ด ํ•œ๊ตญ์—์„œ ๋ง‰ํžˆ๋Š” ์ง€์ (์žฅ์†Œํƒ์ƒ‰ยท์™ธ๊ตญ์ธ ์นœํ™” ๋งค์žฅยท๊ตํ†ตยท๊ฒฐ์ œ)์„ ์˜์–ด๋กœ ๊ตฌ์กฐํ™”ํ•ด ํ•ด๊ฒฐํ•˜๋Š” **MCP ์„œ๋ฒ„**. ์นด์นด์˜ค **Agentic Player 10** ๊ณต๋ชจ์ „ ์ถœํ’ˆ์ž‘.

**Repo**: https://github.com/bb4rjfl/korea-trip-concierge ยท TypeScript + Node 22 ยท MCP SDK 1.29 ยท Streamable HTTP (stateless)

## ๊ฐœ๋ฐœ / ์‹คํ–‰
```bash
npm install
npm run build      # ๋„ค์ด๋ฐ ๋ฆฐํŠธ(kakao ๊ธˆ์ง€) + tsc
npm test           # vitest (77)
npm run dev        # tsx watch (๋กœ์ปฌ ์„œ๋ฒ„, POST /mcp)
npm start          # node dist/server.js
```
API ํ‚ค๋Š” `.env.example`๋ฅผ ๋ณต์‚ฌํ•ด `.env`์— ์„ค์ • (๋ฐœ๊ธ‰๋ฒ•: `docs/08_api_key_issuance.md`). ํ‚ค ์—†์ด๋„ ์ง€์‹ ํˆด 3์ข…์€ ๋™์ž‘.

## ์ด ์ €์žฅ์†Œ๋ฅผ ์ฒ˜์Œ ์—ฌ๋Š” ์‚ฌ๋žŒ(๋˜๋Š” Claude Code)์—๊ฒŒ

1. **`CLAUDE.md`** ๋ถ€ํ„ฐ ์ฝ์œผ์„ธ์š”. ํ”„๋กœ์ ํŠธ ํ—Œ๋ฒ•์ด์ž ๋ชจ๋“  ์ปจํ…์ŠคํŠธ์˜ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.
2. ๊ทœ์น™์€ `docs/01_kakao_playmcp_rules.md` (์ ˆ๋Œ€ ๊ทœ์น™ โ€” ์–ด๊ธฐ๋ฉด ์‹ฌ์‚ฌ ๋ฐ˜๋ ค).
3. ๋ฌด์—‡์„ ๋งŒ๋“œ๋Š”์ง€๋Š” `docs/02_product_spec.md`, ์–ด๋–ป๊ฒŒ๋Š” `docs/03~05`.
4. ์ง„ํ–‰ ์ƒํ™ฉ์€ `docs/07_progress.md` (๋‹จ์ผ ์ง„์‹ค ์†Œ์Šค).

## ๋ฌธ์„œ ๋งต
| ํŒŒ์ผ | ๋‚ด์šฉ |
|---|---|
| `CLAUDE.md` | ํ”„๋กœ์ ํŠธ ํ—Œ๋ฒ•ยท๊ทœ์น™ ์š”์•ฝยทํ•„๋… ์ˆœ์„œ |
| `docs/00_service_overview.md` | ๐ŸŸข ์„œ๋น„์Šค ์ด์ •๋ฆฌ + MCP ์ž‘๋™์›๋ฆฌ + 11๊ฐœ ๋„๊ตฌ ํ๋ฆ„ (์ „์ฒด ๊ทธ๋ฆผ ์ง„์ž…) |
| `docs/01_kakao_playmcp_rules.md` | โญ ์นด์นด์˜ค PlayMCP ๊ฐœ๋ฐœ๊ฐ€์ด๋“œ+์‹ฌ์‚ฌ์ •์ฑ…+์ผ์ • (์ ˆ๋Œ€ ๊ทœ์น™) |
| `docs/02_product_spec.md` | ์ œํ’ˆ ์ •์˜ยทํ†ตํ•ฉ ๊ฒฐ์ •ยทํˆด ๋ชฉ๋กยทํ‘ธ์‹œ ์ œ์•ฝ |
| `docs/03_tool_contracts.md` | 8๊ฐœ ํˆด ์ž…์ถœ๋ ฅ ๊ณ„์•ฝ(JSON) |
| `docs/04_ux_interaction.md` | "๋ฒ„ํŠผ/์„ ํƒ์ง€๋กœ ์ด์–ด๊ฐ€๊ธฐ" ์‘๋‹ต ํŒจํ„ด |
| `docs/05_working_agreement.md` | ์ž‘์—… ๋ฐฉ์‹ยท์ฝ”๋”ฉ ๊ทœ์น™ยทDoD |
| `docs/06_decision_log.md` | ๊ฒฐ์ • ์ด๋ ฅ |
| `docs/07_progress.md` | ์ง„ํ–‰ ์ƒํ™ฉ(SSOT) |
| `docs/08_api_key_issuance.md` | ์™ธ๋ถ€ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ (๋‹จ๊ณ„๋ณ„) |
| `docs/09_demo_conversations.md` | ์ œ์ถœ์šฉ ๋Œ€ํ™” ์˜ˆ์‹œ 3๊ฐœ |
| `docs/10_handoff.md` | ์„ธ์…˜ ๊ฐ„ ํ•ธ๋“œ์˜คํ”„ (์ด์ „) |
| `docs/11_deployment.md` | ๋ฐฐํฌ ์‹คํ–‰ ๋Ÿฐ๋ถ (KCโ†’PlayMCPโ†’์‹ฌ์‚ฌ์š”์ฒญ) |
| `docs/12_local_api_application.md` | ๋กœ์ปฌ๋น„์ฆˆ๋‹ˆ์Šค API ์‹ ์ฒญ ๊ฐ€์ด๋“œ |
| `docs/13_handoff.md` | **์ตœ์‹  ํ•ธ๋“œ์˜คํ”„ โ€” ์ƒˆ ์„ธ์…˜ ์ง„์ž…์ ** |
| `docs/14_playmcp_official_guide.md` | PlayMCP ๊ณต์‹ ๊ฐ€์ด๋“œยท์ ˆ์ฐจ (KC๋ฐฐํฌยท๋“ฑ๋กยท์‹ฌ์‚ฌยท๊ณต๊ฐœยทClaude์ปค๋„ฅํ„ฐ) |

## Claude Code ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ
- `/sync` ์„ธ์…˜ ์‹œ์ž‘(์ปจํ…์ŠคํŠธ ๋กœ๋“œ + ๋‹ค์Œ ํ•  ์ผ)
- `/newtool` ์ƒˆ ํˆด ์ผ๊ด€ ์ถ”๊ฐ€
- `/check` ์‘๋ชจ ์ „ ์นด์นด์˜ค ๊ทœ์น™ ์ ๊ฒ€
- `/handoff` ์„ธ์…˜ ์ข…๋ฃŒ(๋ฌธ์„œ ์ตœ์‹ ํ™”)

## ํ•ต์‹ฌ ์ œ์•ฝ (์š”์•ฝ)
- ์„œ๋ฒ„๋ช…ยทํˆด๋ช…์— `kakao` ๊ธˆ์ง€ ยท Streamable HTTP ยท Remote ยท Stateless
- ํˆด 3~10๊ฐœ ยท annotations 5์ข… ยท ์˜๋ฌธ description ยท ์‘๋‹ต Markdown โ‰ค24k
- p99 3s ยท ๊ด‘๊ณ /๋ฆฌ์›Œ๋“œ ๊ธˆ์ง€ ยท ๊ฐœ์ธ์ •๋ณด 6์ข… ๊ธˆ์ง€
- **ํ‘ธ์‹œ ๋ถˆ๊ฐ€** โ†’ ๋ชจ๋“  ์•Œ๋ฆผ์€ ์กฐํšŒ+์ƒˆ๋กœ๊ณ ์นจ ์นฉ์œผ๋กœ
- **LLM ์›น๊ฒ€์ƒ‰์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ ๊ธˆ์ง€** โ†’ ์‹ค์‹œ๊ฐ„/์—ฐ๋™/๊ตฌ์กฐํ™” ๊ฐ€์น˜ ํ•„์ˆ˜

## ์ผ์ • (์—ญ์‚ฐ)
6์›” ๋ง 1์ฐจ ๋ฐฐํฌ โ†’ **7/7 ์‹ฌ์‚ฌ์š”์ฒญ ๋งˆ๊ฐ** โ†’ ์ „์ฒด๊ณต๊ฐœ โ†’ **7/14 ๋น„์ฆˆํผ ์‘๋ชจ**