Skip to main content
Glama
README.md
# ๐Ÿฉบ ์‹ธ์ธ์ „์— (SafeSign)

> ์นด์นด์˜ค **AGENTIC PLAYER 10** ์ถœํ’ˆ์ž‘ ยท ๊ณ„์•ฝ์„œ ๊ฑด๊ฐ•๊ฒ€์ง„ MCP
> **์‚ฌ์ธํ•˜๊ธฐ ์ „์—, 30์ดˆ ๊ฑด๊ฐ•๊ฒ€์ง„.**

๊ณ„์•ฝ์„œยท์•ฝ๊ด€์„ **์•ˆ์ „๋„ ์ ์ˆ˜ยท๋“ฑ๊ธ‰(A~F)**์œผ๋กœ ์ง„๋‹จํ•˜๊ณ , ๋…์†Œ์กฐํ•ญยท**๋น ์ง„ ๋ณดํ˜ธ์žฅ์น˜**๋ฅผ ์žก๊ณ ,
**์‹ค์ œ ๋ถ„์Ÿ ๋‹ค๋ฐœ ์œ ํ˜•๊ณผ์˜ ์ผ์น˜๋„ยท์˜ˆ์ƒ ํ”ผํ•ดยท๊ถŒ์žฅ ์ˆ˜์ •์•ˆ**๊นŒ์ง€ ๋”ํ•ด **๊ฑด๊ฐ•๊ฒ€์ง„ ์นด๋“œ** ํ•œ ์žฅ์œผ๋กœ ๋Œ๋ ค์ฃผ๋Š” MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
*("AI๊ฐ€ ๊ณ„์•ฝ์„œ ์ฝ์–ด์คŒ"์ด ์•„๋‹ˆ๋ผ "์‚ฌ์ธ ์ „ 30์ดˆ ๊ฑด๊ฐ•๊ฒ€์ง„"์ž…๋‹ˆ๋‹ค.)*

## ์™œ ๋‹ค๋ฅธ๊ฐ€ (ChatGPT๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅ)

| | |
|---|---|
| ๐Ÿฉบ **์•ˆ์ „๋„ ์ ์ˆ˜ยท๋“ฑ๊ธ‰** | ๊ณ„์•ฝ์„ 100์  ๋งŒ์  + A~F ๋“ฑ๊ธ‰์œผ๋กœ. "๋‚ด ์ „์„ธ๊ณ„์•ฝ 62์  ใ„ทใ„ท"์ด ์นดํ†ก์— ํผ์ง‘๋‹ˆ๋‹ค. |
| ๐Ÿšจ **๋ถ„์Ÿ ๋‹ค๋ฐœ ์œ ํ˜• ๋งค์นญ** | "์ด ์กฐํ•ญ, ์ „์„ธ ๋ณด์ฆ๊ธˆ ๋ฐ˜ํ™˜ ์ง€์—ฐ **๋ถ„์Ÿ์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ์œ ํ˜•**" + **์˜ˆ์ƒ ํ”ผํ•ด + ๊ถŒ์žฅ ์ˆ˜์ •์•ˆ**. |
| ๐Ÿ  **์‹œ์„ธ ๊ต์ฐจ๊ฒ€์ฆ** | ๊ตญํ† ๋ถ€ ์‹ค๊ฑฐ๋ž˜๊ฐ€๋กœ **๊นกํ†ต์ „์„ธ(์ „์„ธ๊ฐ€์œจ)** ๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ํŒ์ • *(์ „๊ตญ ์‹œ๊ตฐ๊ตฌ 268๊ณณ)*. |
| โš–๏ธ **๊ฒ€์ฆ๋œ ์กฐ๋ฌธ ์›๋ฌธ** | ์œ„ํ—˜๋งˆ๋‹ค ์‹ค์ œ ์กฐ๋ฌธ ์›๋ฌธ ์ธ์šฉ(๊ตญ๊ฐ€๋ฒ•๋ น์ •๋ณด์„ผํ„ฐ). ํ™˜๊ฐ ๋ฐฉ์ง€ โ€” **ํŒ์ •์€ ๋ฃฐ, ์ถ”์ถœ์€ LLM**. |
| ๐Ÿ”Ž **๋ˆ„๋ฝ ์—ญํƒ์ง€** | "์žˆ๋Š” ์œ„ํ—˜"์ด ์•„๋‹ˆ๋ผ **"์—†์–ด์„œ ์œ„ํ—˜ํ•œ ๊ฒƒ"**(ํ™•์ •์ผ์žยท๋ณด์ฆ๋ณดํ—˜ ํŠน์•ฝ ๋“ฑ)์„ ์žก์Šต๋‹ˆ๋‹ค. |

## ๋น ๋ฅธ ์‹œ์ž‘

```bash
npm install
npm start                  # MCP ์„œ๋ฒ„ + ๋ฐ๋ชจ: http://127.0.0.1:8787
# โ†’  /            ์นด์นด์˜คํ†ก ์Šคํƒ€์ผ ๋ฐ๋ชจ (์ƒ˜ํ”Œ 1ํƒญ ์ฒดํ—˜)
# โ†’  /health      ๋ฐฐํฌ ํ”„๋กœ๋ธŒ
# โ†’  POST /mcp    MCP (tools/list, tools/call)
npm test                   # ๋„๋ฉ”์ธยท์„œ๋ฒ„ e2e (์ „ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ)
npm run typecheck
```

๋„์ปค(์นด์นด์˜ค ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ):
```bash
docker build -t safesign-mcp . && docker run -p 8787:8787 --env-file .env safesign-mcp
```
๋ฐฐํฌยท๋“ฑ๋ก: [docs/deploy/kakao-cloud.md](docs/deploy/kakao-cloud.md) ยท [docs/deploy/playmcp-registration.md](docs/deploy/playmcp-registration.md)

๋ถ„์„ ํ˜ธ์ถœ(์˜ˆ):
```bash
curl -X POST http://127.0.0.1:8787/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"analyze_contract","arguments":{"text":"<๊ณ„์•ฝ์„œ ํ…์ŠคํŠธ>"}}}'
```

## MCP ๋„๊ตฌ

- `analyze_contract` โ€” **ํ…์ŠคํŠธยท์‚ฌ์ง„(๋น„์ „ OCR)ยทPDF** ๋ฌด์—‡์ด๋“  ์ž…๋ ฅ โ†’ ์•ˆ์ „๋„ ์ ์ˆ˜ยท๋“ฑ๊ธ‰ + ์œ„ํ—˜์กฐํ•ญ + ๋ถ„์Ÿ์œ ํ˜•/์˜ˆ์ƒํ”ผํ•ด + ๊ฒ€์ฆ์กฐ๋ฌธ + ์ž„๋Œ€์ฐจ ๊นกํ†ต์ „์„ธ(์ „์„ธ๊ฐ€์œจ) + **์นด๋“œ PNG URL**
- `situation_guide` โ€” **"โ—‹โ—‹ํ•  ๋•Œ ๋ญ ๋ด์•ผ ํ•ด?"** โ†’ ์›๋ฃธ/์ „์„ธ/์˜คํ”ผ์Šคํ…”ยท๊ตํ†ต์‚ฌ๊ณ ยท๋ณ‘์›ยท๋ณดํ—˜์ฒญ๊ตฌยท์ค‘๊ณ ๊ฑฐ๋ž˜ยท๋Œ€์ถœ ๋“ฑ ์ƒํ™ฉ๋ณ„ ์ฒดํฌ๋ฆฌ์ŠคํŠธยท์ฑ™๊ธธ์„œ๋ฅ˜ยทํ™•์ธ์‚ฌํ•ญยทํ•จ์ •
- `explain_for_family` โ€” **๋ถ€๋ชจ๋‹˜ยท์นœ๊ตฌ์—๊ฒŒ ์„ค๋ช…ํ•˜๋“ฏ** ์–ด๋ ค์šด ์šฉ์–ด ์—†์ด ์‰ฌ์šด ๋ง๋กœ ํ’€์–ด์ฃผ๋Š” ์š”์•ฝ
- `explain_term` โ€” ํ™•์ •์ผ์žยท๋Œ€ํ•ญ๋ ฅยท์ œ์†Œ์ „ํ™”ํ•ด ๋“ฑ ์šฉ์–ด ํ‰์ด ์„ค๋ช…
- `suggest_negotiation` โ€” ๋ถˆ๋ฆฌ ์กฐํ•ญ์— ๋Œ€ํ•œ ์š”๊ตฌยท์ˆ˜์ • ๋ฌธ๊ตฌ ์ƒ์„ฑ

## ์•ˆ์ „ยท์ฑ…์ž„

๋ฒ•๋ฅ  ์ž๋ฌธ์ด ์•„๋‹Œ **์ฐธ๊ณ ์šฉ 1์ฐจ ์ ๊ฒ€**์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‘๋‹ต์— ๋ฉด์ฑ… + ์ „๋ฌธ๊ฐ€ ํ™•์ธ CTA๋ฅผ ํฌํ•จํ•˜๋ฉฐ,
๊ฐœ์ธ์ •๋ณด(PII)๋Š” **๊ธฐ๋ณธ ๋น„์ €์žฅ + ๊ฒฝ๊ณ„ ๋งˆ์Šคํ‚น**ํ•ฉ๋‹ˆ๋‹ค.

## ๋ฌธ์„œ

- ์ถœํ’ˆ ํ•œ์žฅ ์š”์•ฝ: [docs/SUBMISSION.md](docs/SUBMISSION.md)
- 3๋ถ„ ๋ฐ๋ชจ ์‹œ๋‚˜๋ฆฌ์˜ค: [docs/demo-scenario.md](docs/demo-scenario.md)
- ์šด์˜ ์ง€์นจ: [CLAUDE.md](CLAUDE.md)
- ์ œํ’ˆ ์ •์˜: [docs/PRD.md](docs/PRD.md)
- ๊ตฌํ˜„ ์ผ์ •: [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md)
- ๋ฒ•๋ฅ  ๊ฒ€์ฆ ๋กœ๊ทธ: [docs/legal/verification-log.md](docs/legal/verification-log.md)
- ์„œ๋ธŒ์—์ด์ „ํŠธ: [.claude/agents/](.claude/agents/)

## ์•„ํ‚คํ…์ฒ˜

```
MCP ๋„๊ตฌ โ†’ Express(Streamable HTTP) โ†’ ๋„๋ฉ”์ธ(์ˆœ์ˆ˜ ๋ฃฐ์—”์ง„: ํŒ์ •) โ† ์„œ๋น„์Šค(๋น„์ „์ถ”์ถœ/์นด๋“œ)
```
ํŒ์ • ๋กœ์ง์€ `src/domain/`(๊ฒฐ์ •๋ก ยทํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ)์—, ๋ถ€์ˆ˜ํšจ๊ณผ(LLM/์ €์žฅ/HTTP)๋Š” `src/server`ยท`src/services`์—.
์Šคํƒ์€ moyo์—์„œ ๊ฒ€์ฆ๋œ TS ESM + MCP SDK + @resvg(ํ•œ๊ธ€ ์นด๋“œ) + zod + vitest.