Skip to main content
Glama
kakao-mcp-ccomajeon

kakao-mcp-ccomajeon

by ccomajeon
README.md
<div align="center">

# ๐Ÿ’ฌ kakao-mcp-ccomajeon

**์นด์นด์˜คํ†ก ๊ณ„์ • ํ•˜๋‚˜๋ฅผ ์„œ๋ฒ„ ๋ฐ๋ชฌ์— ์—ฐ๊ฒฐํ•ด AIยทํ„ฐ๋ฏธ๋„ยท์›น์—์„œ ์“ฐ๋Š” ๋น„๊ณต์‹ MCP ์„œ๋ฒ„**

AI๋Š” ํ—ˆ์šฉ๋œ ๋Œ€ํ™”๋ฅผ ์ฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์‚ฌ๋žŒ์€ ๋ฐฉ๋ณ„ ๊ถŒํ•œ๊ณผ ์Šน์ธ ์ ˆ์ฐจ๋กœ ๊ทธ ๋ฒ”์œ„๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.

![version](https://img.shields.io/badge/version-0.2.0--rebuild.3-blue)
![node](https://img.shields.io/badge/Node.js-%E2%89%A522.18-339933?logo=node.js&logoColor=white)
![typescript](https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript&logoColor=white)
![mcp tools](https://img.shields.io/badge/MCP%20tools-16%20%2B%2025-8A2BE2)
![license](https://img.shields.io/badge/license-MIT-green)
![unofficial](https://img.shields.io/badge/Kakao-unofficial-lightgrey)

**๊ฐœ๋ฐœยท๊ด€๋ฆฌ: [ccomajeon](https://github.com/ccomajeon)**

[ํ•œ๋ˆˆ์— ๋ณด๊ธฐ](#ํ•œ๋ˆˆ์—-๋ณด๊ธฐ) ยท
[์ „์ฒด ๊ตฌ์กฐ](#์ „์ฒด-๊ตฌ์กฐ) ยท
[ํ†ต์‹  ๊ตฌ๊ฐ„](#ํ†ต์‹ -๊ตฌ๊ฐ„๋ณ„-์ •๋ฆฌ) ยท
[๋™์ž‘ ํ๋ฆ„](#๋™์ž‘-ํ๋ฆ„) ยท
[๊ถŒํ•œ ๊ฒ€์‚ฌ](#๊ถŒํ•œ์€-์–ด๋–ป๊ฒŒ-๊ฒ€์‚ฌํ•˜๋‚˜์š”) ยท
[๊ธฐ๋Šฅ](#์–ด๋–ค-๊ธฐ๋Šฅ์ด-์žˆ๋‚˜์š”) ยท
[์„ค์น˜](#์„ค์น˜์™€-์‚ฌ์šฉ๋ฒ•) ยท
[๊ฐœ๋ฐœ](#์†Œ์Šค-๊ฐœ๋ฐœ๊ณผ-ํŒจํ‚ค์ง€-๋นŒ๋“œ)

</div>

---

## ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

| | |
|---|---|
| **๋ฌด์—‡์ธ๊ฐ€์š”?** | ์นด์นด์˜คํ†ก ๊ธฐ๋Šฅ์„ MCP ๋„๊ตฌ๋กœ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. AI ๋ชจ๋ธ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์š”์•ฝยท๋‹ต์žฅ ์ž‘์„ฑ์€ ์—ฐ๊ฒฐํ•œ AI๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค. |
| **์–ด๋””์„œ ๋Œ์•„๊ฐ€๋‚˜์š”?** | Linux ์„œ๋ฒ„์˜ `systemd` ์„œ๋น„์Šค(`kakao-mcp.service`) ํ•˜๋‚˜๊ฐ€ ๊ณ„์ • ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. |
| **๋ˆ„๊ฐ€ ์“ฐ๋‚˜์š”?** | ClaudeยทCodex ๊ฐ™์€ AI ํด๋ผ์ด์–ธํŠธ, ํ„ฐ๋ฏธ๋„ CLI, ๋กœ์ปฌ ์›น ํ™”๋ฉด์ด ๋ชจ๋‘ ๊ฐ™์€ ๋ฐ๋ชฌ์— ๋ถ™์Šต๋‹ˆ๋‹ค. |
| **์–ด๋–ป๊ฒŒ ์ง€ํ‚ค๋‚˜์š”?** | ์ฒ˜์Œ ์“ฐ๋Š” ๋ฐฉ์˜ ์ฝ๊ธฐยท์ „์†ก์€ ์‚ฌ๋žŒ์ด ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. ์šด์˜์ž ์ƒํ•œยท์†๋„ ์ œํ•œ์€ ์‚ฌ๋žŒ ์Šน์ธ์œผ๋กœ๋„ ๋„˜์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. |
| **ํ˜„์žฌ ์ƒํƒœ** | ๋ฒ„์ „ `0.2.0-rebuild.3` ยท ๊ธฐ๋ณธ ๋„๊ตฌ 16๊ฐœ ยท ์ „์ฒด ๋„๊ตฌ 41๊ฐœ ยท ์‹ค์ œ ๊ณ„์ • ์†ก์ˆ˜์‹ ์€ ์•„์ง ๋ฏธ๊ฒ€์ฆ |

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/quick-start-dark.png">
  <img alt="์„ค์น˜๋ถ€ํ„ฐ ๋‹ต๋ณ€๊นŒ์ง€ 5๋‹จ๊ณ„: โ‘  ์„œ๋ฒ„์— ์„ค์น˜ยทํœด๋Œ€ํฐ์œผ๋กœ ๋กœ๊ทธ์ธ ์Šน์ธ โ†’ โ‘ก AI ํด๋ผ์ด์–ธํŠธ์— MCP ๋“ฑ๋ก โ†’ โ‘ข ์ž์—ฐ์–ด๋กœ ์š”์ฒญ โ†’ โ‘ฃ ์ฒ˜์Œ ์“ฐ๋Š” ๋ฐฉ์€ ์‚ฌ๋žŒ์ด ์Šน์ธ โ†’ โ‘ค ๊ฒฐ๊ณผ๋ฅผ AI๊ฐ€ ์ •๋ฆฌํ•ด์„œ ๋‹ต๋ณ€" src="docs/diagrams/quick-start-light.png">
</picture>

---

## ์ „์ฒด ๊ตฌ์กฐ

๋ฐ๋ชฌ **ํ•˜๋‚˜**๊ฐ€ ์นด์นด์˜คํ†ก ์—ฐ๊ฒฐ์„ ์ฅ๊ณ  ์žˆ๊ณ , AIยทCLIยท์›น์€ ๋ชจ๋‘ ๊ทธ ๋ฐ๋ชฌ์˜ **MCP ํด๋ผ์ด์–ธํŠธ**์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ชฝ์€ ์นด์นด์˜ค ๊ณ„์ • ์ •๋ณด๋ฅผ ์ฝ์ง€ ์•Š๊ณ , ์ž๊ธฐ ์„ธ์…˜์„ ๋”ฐ๋กœ ์—ด์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/architecture-dark.png">
  <img alt="kakao-mcp ์ „์ฒด ๊ตฌ์กฐ: ์‚ฌ์šฉ์ž โ†’ AI ํด๋ผ์ด์–ธํŠธ โ†’ MCP ์ปค๋„ฅํ„ฐ โ†’ SSH ํ„ฐ๋„ โ†’ ์„œ๋ฒ„์˜ MCP ์„œ๋ฒ„ โ†’ core โ†’ protocol โ†’ ์นด์นด์˜คํ†ก ์„œ๋ฒ„. core๋Š” SQLite์— ์ €์žฅํ•˜๊ณ , ์›น ํ™”๋ฉด๊ณผ ํ„ฐ๋ฏธ๋„ CLI๋„ ๊ฐ™์€ MCP ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค." src="docs/diagrams/architecture-light.png">
</picture>

<sub>[archify](https://github.com/tt-a1i/archify)๋กœ ์ฝ”๋“œ ๊ทผ๊ฑฐ๋ฅผ ๋ถ™์—ฌ ๊ทธ๋ฆฐ ๊ตฌ์กฐ๋„์ž…๋‹ˆ๋‹ค. ๋…ธ๋“œ๋งˆ๋‹ค ๊ทผ๊ฑฐ ์ฝ”๋“œ ๋งํฌ๊ฐ€ ๋‹ฌ๋ฆฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฒ„์ „์€ [`docs/diagrams/architecture.html`](docs/diagrams/architecture.html)์„ ๋‚ด๋ ค๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์—ด์–ด ๋ณด์„ธ์š”. ์ด README์˜ ๋‹ค๋ฅธ ๋‹ค์ด์–ด๊ทธ๋žจ๋„ ๋ชจ๋‘ archify๋กœ ๊ทธ๋ ธ๊ณ , ์›๋ณธ ์ •์˜(`*.archify.json`)๋Š” [`docs/diagrams`](docs/diagrams)์— ์žˆ์Šต๋‹ˆ๋‹ค.</sub>


> ๐Ÿ’ก AI๊ฐ€ ๊ฐ™์€ ์„œ๋ฒ„์— ์žˆ์œผ๋ฉด SSH ์—†์ด `127.0.0.1:8787`๋กœ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. MCP ํฌํŠธ๋Š” ์„œ๋ฒ„ ๋ฐ–์œผ๋กœ ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

### ๋ชจ๋“ˆ ๊ตฌ์„ฑ

TypeScript์™€ Node.js๋กœ ๋งŒ๋“  npm workspaces ๋ชจ๋…ธ๋ ˆํฌ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์ชฝ ํŒจํ‚ค์ง€์ผ์ˆ˜๋ก ์นด์นด์˜ค ์„œ๋ฒ„์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/modules-dark.png">
  <img alt="๋ชจ๋“ˆ ๊ตฌ์„ฑ: apps/cli๋Š” packages/client๋ฅผ importํ•˜๊ณ  apps/mcp ๋ฐ๋ชฌ์— MCP๋กœ ์ ‘์†, apps/web๋„ MCP๋กœ ๋ฐ๋ชฌ์— ์ ‘์†, apps/mcp๋Š” packages/core๋ฅผ ๊ฑฐ์ณ packages/protocol์„ ์“ฐ๊ณ  setup ๋•Œ ๊ธฐ๊ธฐ ๋“ฑ๋ก์— protocol์„ ์ง์ ‘ ์‚ฌ์šฉ, protocol์€ bson์— ์˜์กด" src="docs/diagrams/modules-light.png">
</picture>

| ๋””๋ ‰ํ„ฐ๋ฆฌ | ์—ญํ•  |
|---|---|
| `packages/protocol` | LOCO/BSON, ์•”ํ˜ธํ™”, ๊ธฐ๊ธฐ ๋“ฑ๋กยท์ธ์ฆ, ํ†ต์‹ ๊ณผ ๋ฏธ๋””์–ด ์†ก์ˆ˜์‹  |
| `packages/core` | ๋‹จ์ผ ๊ณ„์ • ์„ธ์…˜, SQLite, ์ ‘๊ทผ ์ •์ฑ…, ์Šน์ธ๊ณผ ์“ฐ๊ธฐ ์ž‘์—…, ์ด๋ฒคํŠธยท๊ธฐ๋ก ๊ด€๋ฆฌ |
| `packages/client` | ๋ฐ๋ชฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ SDK |
| `apps/mcp` | MCP ๋„๊ตฌ, ์Šน์ธ ์—ฐ๊ฒฐ, ์„ค์น˜ยท์ง„๋‹จยท์—…๋ฐ์ดํŠธ, SSH ์ปค๋„ฅํ„ฐ |
| `apps/cli` | ํ„ฐ๋ฏธ๋„ ๋ฉ”์‹ ์ €์™€ ๋ช…๋ นํ–‰ ์ž‘์—… |
| `apps/web` | ๋กœ์ปฌ ์›น ํ™”๋ฉด, API, ์‹ค์‹œ๊ฐ„ ํ™”๋ฉด ๊ฐฑ์‹  |
| `scripts` | ํŒจํ‚ค์ง€ ๋นŒ๋“œยท์„ค์น˜ ๊ฒ€์ฆ, ์ €์žฅ์†Œ ๊ณต๊ฐœ ์ „ ๊ฒ€์‚ฌ |

<details>
<summary><b>๊ตฌํ˜„ ํฌ์ธํŠธ ์ž์„ธํžˆ ๋ณด๊ธฐ</b></summary>

- **TypeScript ๋ชจ๋…ธ๋ ˆํฌ:** npm workspaces๋กœ ํ†ต์‹ ยท๊ณ„์ • ์ฒ˜๋ฆฌยทํด๋ผ์ด์–ธํŠธยท์‹คํ–‰ ์•ฑ์„ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
- **ํ”„๋กœํ† ์ฝœ ์ฒ˜๋ฆฌ:** LOCO ํŒจํ‚ท์˜ ํ—ค๋”ยท๊ธธ์ดยท์ •์ˆ˜ ๋ฒ”์œ„๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  BSON ๋ณธ๋ฌธ์„ ์ง๋ ฌํ™”ยท์—ญ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ฆฐ ํŒจํ‚ท๊ณผ ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์˜ค๋ฅ˜๋กœ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
- **์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€:** ์šฉ๋Ÿ‰์ด ์ œํ•œ๋œ ์›ํ˜• ๋ฒ„ํผ์— ์ˆ˜์‹  ์ด๋ฒคํŠธ๋ฅผ ๋„ฃ๊ณ  ์ปค์„œ๋กœ ์ƒˆ ํ•ญ๋ชฉ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ปค์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์œ„์น˜์ด๋ฉฐ ์žฌ์‹œ์ž‘ ํ›„ ๋ณด์กด๋˜๋Š” ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
- **๊ถŒํ•œ๊ณผ ์ €์žฅ:** ๊ณ„์ • ์„ธ์…˜ยทSQLite ์ €์žฅ์†Œยท๋ฐฉ๋ณ„ ์ฝ๊ธฐ/์ „์†ก ์ •์ฑ…ยท์Šน์ธยท์ค‘๋ณต ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ core์— ๋ชจ์๋‹ˆ๋‹ค.
- **๋ณด์•ˆ ๊ฐœ์„ :** ์Šน์ธ ์‘๋‹ต ์žฌ์‚ฌ์šฉ, ๋ฐฉ ์ฝ๊ธฐ ์ƒํ•œ, ์›น ์‚ฌ์ง„ ํ‘œ์‹œ, ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์˜ ์ฃผ์†Œ ๊ฒ€์ฆ์„ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
- **๋ฐฐํฌ:** esbuild๋กœ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ 10๊ฐœ๋ฅผ ESM ํŒŒ์ผ์— ๋ฒˆ๋“ค๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ํŒจํ‚ค์ง€๋Š” ๋ณ„๋„์˜ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ ๋‹ค์šด๋กœ๋“œ ์—†์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›น ์ •์  ํŒŒ์ผ๊ณผ ์˜์กด์„ฑ ๋ผ์ด์„ ์Šค ๊ณ ์ง€๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
- **๊ฒ€์ฆ:** Node ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๋กœ ๋‹จ์œ„ยท๊ฒฉ๋ฆฌ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , TypeScript ๊ฒ€์‚ฌ์™€ ์‹ค์ œ ํŒจํ‚ค์ง€ ์„ค์น˜ยท๋ช…๋ น ์‹คํ–‰ ๊ฒ€์‚ฌ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

</details>

---

## ํ†ต์‹  ๊ตฌ๊ฐ„๋ณ„ ์ •๋ฆฌ

์š”์ฒญ ํ•˜๋‚˜๊ฐ€ AI์—์„œ ์นด์นด์˜ค ์„œ๋ฒ„๊นŒ์ง€ ๊ฐ€๋Š” ๋™์•ˆ ๊ฑฐ์น˜๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค.

| # | ๊ตฌ๊ฐ„ | ๋ฐฉ์‹ | ๋ณดํ˜ธ ์žฅ์น˜ |
|:-:|---|---|---|
| 1 | AI ํด๋ผ์ด์–ธํŠธ โ†’ MCP ์ปค๋„ฅํ„ฐ | **stdio**, ์ค„ ๋‹จ์œ„ JSON-RPC 2.0 (MCP) | AI ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปค๋„ฅํ„ฐ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์™ธ๋ถ€ ๋…ธ์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค |
| 2 | ์ปค๋„ฅํ„ฐ โ†’ ์„œ๋ฒ„ ๋ฐ๋ชฌ | **SSH ํ„ฐ๋„**(`ssh -T -W 127.0.0.1:8787`) ๋˜๋Š” ๊ฐ™์€ ์ปดํ“จํ„ฐ์˜ loopback TCP | SSH ํ‚ค ์ธ์ฆ. ๋ฐ๋ชฌ์ด ์žฌ์‹œ์ž‘๋ผ๋„ ์ปค๋„ฅํ„ฐ๊ฐ€ SSH/TCP ์—ฐ๊ฒฐ๋งŒ ๋‹ค์‹œ ์ž‡๊ณ  AI ์ชฝ stdio๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค |
| 3 | ๋ฐ๋ชฌ์˜ MCP ์†Œ์ผ“ | **TCP `127.0.0.1:8787`** ๋˜๋Š” Unix ์†Œ์ผ“. stdio์™€ ๊ฐ™์€ JSON-RPC ํ˜•์‹ | loopback๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ๋Š” ํ—ˆ์šฉํ•œ OS ์‚ฌ์šฉ์ž(`KAKAO_MCP_ALLOWED_UIDS`)์˜ ์—ฐ๊ฒฐ๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค |
| 4 | ๋ธŒ๋ผ์šฐ์ € โ†’ ์›น ํ™”๋ฉด | **HTTP `127.0.0.1:8899`**, REST + Server-Sent Events | ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€Œ๋Š” launch ๋งํฌ๋กœ ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์›น์€ ๊ณ„์ • ์ •๋ณด๋ฅผ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค |
| 5 | core โ†’ ์นด์นด์˜คํ†ก ์„œ๋ฒ„ | **LOCO** ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ + BSON ๋ณธ๋ฌธ | RSA-OAEP๋กœ AES-128-GCM ํ‚ค๋ฅผ ๊ตํ™˜ํ•œ ์•”ํ˜ธํ™” ์ฑ„๋„์„ ์”๋‹ˆ๋‹ค. ๊ณ„์ •๋‹น ์—ฐ๊ฒฐ์€ ํ•˜๋‚˜๋งŒ ์—ฝ๋‹ˆ๋‹ค |

<details>
<summary><b>MCP ๋ฉ”์‹œ์ง€ ํ˜•์‹ ์˜ˆ์‹œ</b></summary>

AI ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ๋ชฌ์€ ํ•œ ์ค„์— JSON ํ•˜๋‚˜์”ฉ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๋Š” stderr๋กœ๋งŒ ๋‚ด๋ณด๋‚ด๊ณ  stdout์€ ํ†ต์‹  ์ „์šฉ์ž…๋‹ˆ๋‹ค.

```jsonc
// AI โ†’ ๋ฐ๋ชฌ: ๋„๊ตฌ ํ˜ธ์ถœ
{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"read_messages","arguments":{"chatId":"โ€ฆ","mode":"recent"}}}

// ๋ฐ๋ชฌ โ†’ AI: ๊ฒฐ๊ณผ (๋ฐ›์€ ๋ฉ”์‹œ์ง€๋Š” ํ•ญ์ƒ untrusted ๋ฐ์ดํ„ฐ๋กœ ํ‘œ์‹œ)
{"jsonrpc":"2.0","id":7,"result":{"content":[{"type":"text","text":"โ€ฆ"}]}}
```

์ง€์› ๋ฉ”์„œ๋“œ: `initialize`, `tools/list`, `tools/call`, `ping`, `resources/subscribe` ๋“ฑ. ์š”์ฒญ์€ 64KiB, ์‘๋‹ต์€ 1MiB, ๋™์‹œ ๋„๊ตฌ ์‹คํ–‰์€ 16๊ฐœ๊นŒ์ง€ ๋ฐ›์Šต๋‹ˆ๋‹ค.

</details>

---

## ๋™์ž‘ ํ๋ฆ„

### 1. ์ฒ˜์Œ ์„ค์น˜ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•  ๋•Œ

์‚ฌ๋žŒ์ด ์„ค์น˜ ๋งˆ๋ฒ•์‚ฌ์—์„œ ๊ณ„์ • ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ , **ํœด๋Œ€ํฐ์—์„œ ๊ธฐ๊ธฐ ์ธ์ฆ์„ ์ง์ ‘ ์Šน์ธ**ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„๋กœ๋Š” ๋ฐ๋ชฌ์ด ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/login-flow-dark.png">
  <img alt="์„ค์น˜ยท๋กœ๊ทธ์ธ ์‹œํ€€์Šค: ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์น˜ ๋งˆ๋ฒ•์‚ฌ์— ๊ณ„์ • ์ž…๋ ฅ โ†’ protocol์ด ์นด์นด์˜ค ์„œ๋ฒ„์— ๋กœ๊ทธ์ธยท๊ธฐ๊ธฐ ๋“ฑ๋ก โ†’ ํœด๋Œ€ํฐ์—์„œ ์ง์ ‘ ์Šน์ธ โ†’ ํ† ํฐยท๊ธฐ๊ธฐ ํ‚ค ์ˆ˜์‹  โ†’ systemd ์„œ๋น„์Šค ์‹œ์ž‘ โ†’ ๋ฐ๋ชฌ์ด GETCONF, CHECKIN, ์•”ํ˜ธํ™” ํ•ธ๋“œ์…ฐ์ดํฌ, LOGINLIST๋กœ ์„ธ์…˜ ์—ฐ๊ฒฐ" src="docs/diagrams/login-flow-light.png">
</picture>

- ๋‹ค๋ฅธ PC๊ฐ€ ์ด๋ฏธ ์“ฐ๊ณ  ์žˆ์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ **์ค‘๋‹จ**ํ•˜๊ณ , ์ž๋™์œผ๋กœ ๋กœ๊ทธ์•„์›ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- ์ž๋™ ์žฌ๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅ์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ €์žฅํ•˜๋”๋ผ๋„ ์ตœ๋Œ€ 24์‹œ๊ฐ„์— 3ํšŒ๋กœ ์ œํ•œํ•˜๊ณ , ์ถ”๊ฐ€ ์ธ์ฆ์ด ํ•„์š”ํ•˜๋ฉด ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.

### 2. AI๊ฐ€ ๋Œ€ํ™”๋ฅผ ์ฝ์„ ๋•Œ

์ฒ˜์Œ ์—ฌ๋Š” ๋ฐฉ(๋‹ซํžŒ ๋ฐฉ)์ด๋ฉด **๊ฐ™์€ ํ˜ธ์ถœ ์•ˆ์—์„œ** ์‚ฌ๋žŒ์—๊ฒŒ ํ™•์ธ ์ฐฝ์„ ๋„์›๋‹ˆ๋‹ค.

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/read-flow-dark.png">
  <img alt="๋Œ€ํ™” ์ฝ๊ธฐ ์‹œํ€€์Šค: AI๊ฐ€ find_chat๊ณผ read_messages ํ˜ธ์ถœ โ†’ core๊ฐ€ ์ฝ๊ธฐ ๊ถŒํ•œ ํ™•์ธ โ†’ ๋‹ซํžŒ ๋ฐฉ์ด๋ฉด ๊ฐ™์€ ํ˜ธ์ถœ ์•ˆ์—์„œ ํ™•์ธ ์ฐฝ์œผ๋กœ ์‚ฌ๋žŒ ์Šน์ธ โ†’ ํ•„์š”ํ•˜๋ฉด MCHATLOGS๋กœ ๊ธฐ๋ก ๋™๊ธฐํ™” โ†’ untrusted ํ‘œ์‹œ๋œ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜, ์ฝ์Œ ํ‘œ์‹œ๋Š” ๋ณด๋‚ด์ง€ ์•Š์Œ" src="docs/diagrams/read-flow-light.png">
</picture>

### 3. AI๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ

๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์—๋Š” AI๊ฐ€ ์ •ํ•œ <b>UUID <code>requestId</code></b>๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋ถˆํ™•์‹คํ•  ๋•Œ ๊ฐ™์€ ID๋กœ ํ™•์ธํ•˜๋ฏ€๋กœ **์ค‘๋ณต ์ „์†ก์ด ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.**

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/send-flow-dark.png">
  <img alt="๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œํ€€์Šค: AI๊ฐ€ send_message(requestId) ํ˜ธ์ถœ โ†’ ์ „์†ก ํ—ˆ๊ฐ€๊ฐ€ ์—†์œผ๋ฉด ํ™•์ธ ์ฐฝ์œผ๋กœ ์Šน์ธ โ†’ core๊ฐ€ WRITE ํ•œ ๋ฒˆ ์ „์†ก โ†’ ์„ฑ๊ณต์ด๋ฉด sent, ์„œ๋ฒ„ ๊ฑฐ์ ˆ์ด๋ฉด ๋ณด๋‚ด์ง€ ์•Š์Œ, ์‘๋‹ต๋งŒ ์œ ์‹ค๋˜๋ฉด ์žฌ์—ฐ๊ฒฐ ํ›„ ๋ฐฉ ๊ธฐ๋ก์—์„œ msgId๋ฅผ ์ฐพ์•„ sent ๋˜๋Š” SEND_NOT_DELIVERED" src="docs/diagrams/send-flow-light.png">
</picture>

### 4. ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/receive-flow-dark.png">
  <img alt="์ˆ˜์‹  ๋ฐ์ดํ„ฐ ํ๋ฆ„: ์นด์นด์˜ค ์„œ๋ฒ„ MSG ํ‘ธ์‹œ โ†’ protocol โ†’ core โ†’ SQLite ์ €์žฅ๊ณผ ์›ํ˜• ๋ฒ„ํผ โ†’ AI๋Š” read_messages wait์™€ claim/ack ์ด๋ฒคํŠธ๋กœ, ํ„ฐ๋ฏธ๋„ ๋ฉ”์‹ ์ €๋Š” recent ์ด๋ฒคํŠธ๋กœ ๋ฐ›๊ณ , ์›น ํ™”๋ฉด์€ SSE ์ƒํƒœ ์•Œ๋ฆผ๋งŒ ๋ฐ›์Œ, AI์—๋Š” ๋ณธ๋ฌธ ์—†๋Š” resources/updated ์•Œ๋ฆผ" src="docs/diagrams/receive-flow-light.png">
</picture>

- **์ €์žฅ๊ณผ ์—ด๋žŒ์€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.** ์ˆ˜์‹  ๋ฉ”์‹œ์ง€๋Š” ๋ชจ๋‘ ๋กœ์ปฌ SQLite์— ์ €์žฅ๋˜์ง€๋งŒ, AI๊ฐ€ ์ฝ์œผ๋ ค๋ฉด ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋‹ค์‹œ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ๋ณ€๊ฒฝ ์•Œ๋ฆผ(`kakao://rooms/{chatId}/messages` ๊ตฌ๋…)์—๋Š” ๋ณธ๋ฌธยท์ž‘์„ฑ์ž๋ฅผ ๋‹ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์€ ํ•ญ์ƒ `read_messages`๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.
- ์›น ํ™”๋ฉด์˜ SSE๋Š” ์—ฐ๊ฒฐยท๋ฐฉ ๋ชฉ๋ก ๊ฐ™์€ ์ƒํƒœ ์•Œ๋ฆผ๋งŒ ๋ณด๋‚ด๊ณ  ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์€ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์€ ๋ฐฉ ๊ธฐ๋ก์„ ์กฐํšŒํ•ด ์ฝ์Šต๋‹ˆ๋‹ค.
- `claim/ack_message_events`๋Š” ์žฌ์‹œ์ž‘์—๋„ ๋‚จ๋Š” SQLite ์ด๋ฒคํŠธ ํ๋ฅผ, `read_messages`์˜ waitยทrecent๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์›ํ˜• ๋ฒ„ํผ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

---

## ๊ถŒํ•œ์€ ์–ด๋–ป๊ฒŒ ๊ฒ€์‚ฌํ•˜๋‚˜์š”?

์š”์ฒญ์€ ์•„๋ž˜ ์ˆœ์„œ๋กœ ๊ฒ€์‚ฌํ•˜๊ณ , **ํ•˜๋‚˜๋ผ๋„ ๊ฑฐ์ ˆํ•˜๋ฉด ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.**

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/permission-check-dark.png">
  <img alt="๊ถŒํ•œ ๊ฒ€์‚ฌ ์ˆœ์„œ: ๋ ˆ์ด์–ด 0 ๊ณ ์ • ๋ฐ”๋‹ฅ์„  โ†’ ๋ ˆ์ด์–ด 2 ๋„๊ตฌ ๋ฌถ์Œ โ†’ ๋ ˆ์ด์–ด 1ยท4 ๋ชจ๋“œ์™€ ์šด์˜์ž ์ƒํ•œ โ†’ ๋ ˆ์ด์–ด 5 ์‚ฌ๋žŒ์˜ ํ—ˆ๊ฐ€, ํ—ˆ๊ฐ€๊ฐ€ ์—†์œผ๋ฉด ํ™•์ธ ์ฐฝยทํŒจ์Šคํ‚ค๋กœ ์งˆ๋ฌธ, ์–ด๋А ๋‹จ๊ณ„๋“  ๊ฑฐ์ ˆ์ด๋ฉด ๋ฉˆ์ถค" src="docs/diagrams/permission-check-light.png">
</picture>

| ๋ ˆ์ด์–ด | ์งˆ๋ฌธ | ์„ค์ • |
|---|---|---|
| 0. ๊ณ ์ • ๋ฐ”๋‹ฅ์„  | ๋ฌด์—‡์ด๋“  ์ ˆ๋Œ€ ์•ˆ ๋˜๋Š” ๊ฒƒ (AI๊ฐ€ ๋ชจ๋“œยท์ƒํ•œ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ ๋“ฑ) | ์ฝ”๋“œ ๊ณ ์ • |
| 1. ์—์ด์ „ํŠธ ๋ชจ๋“œ | AI๊ฐ€ ๋ฌป์ง€ ์•Š๊ณ  ์–ด๋””๊นŒ์ง€ ํ•ด๋„ ๋˜๋‚˜ | `KAKAO_AGENT_MODE=ask`(๊ธฐ๋ณธ) \| `trust` |
| 2. ๋„๊ตฌ ๋ฌถ์Œ | ์–ด๋–ค ๋„๊ตฌ๊ฐ€ ๋ณด์ด๋‚˜ | `KAKAO_MCP_TOOL_GROUPS` |
| 4. ์šด์˜์ž ์ƒํ•œ | ๋ชจ๋“œ ์•ˆ์—์„œ ๋” ์ขํž ๊ณณ | `KAKAO_ROOM_CEILING`, `KAKAO_RECIPIENT_DAILY_LIMIT`, `KAKAO_RATE_*` |
| 5. ์‚ฌ๋žŒ์˜ ํ—ˆ๊ฐ€ | ์ด ๋ฐฉยท์ด ์ž‘์—…์— ์‚ฌ๋žŒ์ด ๋ญ๋ผ๊ณ  ํ–ˆ๋‚˜ | ์‹คํ–‰ ์ค‘ ํ™•์ธ ์ฐฝ์œผ๋กœ ๊ธฐ๋ก |

> ๋ ˆ์ด์–ด 3(๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ)์€ ๋ฐ๋ชฌ์ด ํ˜ผ์ž ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์„ค์ •์ด๋ผ ์ด ๊ฒ€์‚ฌ ์ˆœ์„œ์—๋Š” ๋“ค์–ด๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๊ณ„๋Š” [์—์ด์ „ํŠธ ๋ชจ๋“œ์™€ ์„ค์ • ๋ ˆ์ด์–ด](docs/designs/agent-mode-and-layers.md)๋ฅผ ๋ณด์„ธ์š”.

---

## ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ๋‚˜์š”?

| ์˜์—ญ | ๊ธฐ๋Šฅ |
|---|---|
| ๐Ÿ’ฌ ๋Œ€ํ™” ์กฐํšŒ | ๋ฐฉยท์นœ๊ตฌ ๊ฒ€์ƒ‰, ๊ณผ๊ฑฐ/์ตœ๊ทผ ๋ฉ”์‹œ์ง€, ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰, ์ƒˆ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ, ์ œํ•œ๋œ ์•ˆ ์ฝ์€ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ |
| ๐Ÿ“Ž ๋ฉ”์‹œ์ง€ยท๋ฏธ๋””์–ด | ํ…์ŠคํŠธยท๋‹ต์žฅยท๋ฉ˜์…˜, ์‚ฌ์ง„ยท๋ฌถ์Œ ์‚ฌ์ง„ยทํŒŒ์ผ ์ „์†ก, ์ฒจ๋ถ€ ๋‹ค์šด๋กœ๋“œ, ๋ณธ์ธ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •ยท์‚ญ์ œ |
| ๐Ÿ  ๋Œ€ํ™”๋ฐฉ | 1:1 ๋Œ€ํ™” ์—ด๊ธฐยท๋ฐฉ ์ƒ์„ฑ, ์ฐธ์—ฌ์žยท๋ฐฉ ์ •๋ณด, ์ „๋‹ฌยท์ด๋ชจํ‹ฐ์ฝ˜, ๋‚˜๊ฐ€๊ธฐยท์ฝ์Œ ํ‘œ์‹œ |
| ๐Ÿ‘ฅ ์นœ๊ตฌยทํ”„๋กœํ•„ | ์นœ๊ตฌ ๋™๊ธฐํ™”ยท์ถ”๊ฐ€, ์ฐจ๋‹จยทํ•ด์ œ, ํ”„๋กœํ•„ ์กฐํšŒยท๋ณ€๊ฒฝ |
| ๐Ÿ—‚ ์ด๋ฒคํŠธยท๊ธฐ๋ก | ๋ฉ”์‹œ์ง€ ์ด๋ฒคํŠธ ์ˆ˜๋ น/์ฒ˜๋ฆฌ ํ™•์ธ, JSON/HTML ๋‚ด๋ณด๋‚ด๊ธฐ, ๋งํฌ ์ˆ˜์ง‘, ์ผ์ •ยทํ•  ์ผ ํ›„๋ณด ์ถ”์ถœ, ๋ณด๊ด€ ๊ธฐ๋ก ๊ฒ€์ƒ‰ |
| ๐Ÿ”’ ํ†ต์ œ | ๋ฐฉ๋ณ„ ์ฝ๊ธฐ/์ „์†ก ๊ถŒํ•œ, ์ผํšŒ์„ฑ ์Šน์ธ, ํ™•์ธ ์ฐฝยทํŒจ์Šคํ‚ค, ๊ถŒํ•œ ์ฒ ํšŒ, ๋ฐœ์‹ ยท๋ณ€๊ฒฝ ์ผ์‹œ์ •์ง€ |
| ๐Ÿ–ฅ ์‚ฌ์šฉ์ž ํ™”๋ฉด | ํ„ฐ๋ฏธ๋„ ๋ฉ”์‹ ์ €, ๋ช…๋ นํ–‰ ๋„๊ตฌ, ๋กœ์ปฌ ์›น ๋ฉ”์‹ ์ €์™€ ์Šน์ธยท๊ถŒํ•œ ์ œ์–ดํŒ |
| โš™๏ธ ์šด์˜ | Linux/systemd ์„ค์น˜, SSH ์—ฐ๊ฒฐ, ์ง„๋‹จยท์ธ์ฆ ๋ณต๊ตฌ, ๊ด€๋ฆฌํ˜• ์—…๋ฐ์ดํŠธ |

### MCP ๋„๊ตฌ ๋ชฉ๋ก

๊ธฐ๋ณธ 16๊ฐœ์— ์„ ํƒ ๋ฌถ์Œ 25๊ฐœ๋ฅผ ๋”ํ•˜๋ฉด ์ด 41๊ฐœ์ž…๋‹ˆ๋‹ค. **๋ฌถ์Œ์„ ์ผœ๋Š” ๊ฒƒ๊ณผ ๋ฐฉ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ฃผ๋Š” ๊ฒƒ์€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.**

| ๋ฌถ์Œ | ๋„๊ตฌ |
|---|---|
| **๊ธฐ๋ณธ (16)** | `get_status`, `list_chats`, `find_chat`, `list_friends`, `read_messages`, `preview_unread`, `download_attachment`, `send_message`, `send_photos`, `edit_or_delete_message`, `list_permissions`, `revoke_permission`, `request_permission`, `pause`, `wait_for_approval`, `get_operation` |
| `chats` (10) | `open_direct_chat`, `create_direct_chat`, `get_members`, `get_chat_meta`, `self_delete_messages`, `forward_message`, `send_emoticon`, `leave_chat`, `set_chat_meta`, `mark_read` |
| `friends` (8) | `sync_friends`, `list_blocked_users`, `get_my_profile`, `get_friend_profile`, `update_my_profile`, `block_user`, `unblock_user`, `add_friend` |
| `events` (2) | `claim_message_events`, `ack_message_events` |
| `vault` (5) | `export_chat_history`, `collect_shared_links`, `extract_schedule_and_todos`, `search_vault`, `get_vault_stats` |

๋„๊ตฌ๋ณ„ ์ƒ์„ธ ๊ณ„์•ฝ์€ [MCP ๋„๊ตฌ์™€ ๊ถŒํ•œ ๊ณ„์•ฝ](docs/tool-contract.md)์— ์žˆ์Šต๋‹ˆ๋‹ค.

---

## ์„ค์น˜์™€ ์‚ฌ์šฉ๋ฒ•

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/diagrams/install-steps-dark.png">
  <img alt="์„ค์น˜ 4๋‹จ๊ณ„: ์„œ๋ฒ„์— ํŒจํ‚ค์ง€ ์„ค์น˜ โ†’ ํœด๋Œ€ํฐ์œผ๋กœ ๋กœ๊ทธ์ธ ์Šน์ธ โ†’ AI ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ โ†’ ์›นยทํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉ" src="docs/diagrams/install-steps-light.png">
</picture>

> [!NOTE]
> ์ด ๋ฒ„์ „์€ npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์€ ๋กœ์ปฌ ํŒจํ‚ค์ง€ `kakao-mcp-ccomajeon-0.2.0-rebuild.3.tgz`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ๋จผ์ € [์†Œ์Šค ๊ฐœ๋ฐœ๊ณผ ํŒจํ‚ค์ง€ ๋นŒ๋“œ](#์†Œ์Šค-๊ฐœ๋ฐœ๊ณผ-ํŒจํ‚ค์ง€-๋นŒ๋“œ)์˜ ๋ช…๋ น์œผ๋กœ ๋งŒ๋“œ์„ธ์š”.

| ํ•ญ๋ชฉ | ๊ฐ’ |
|---|---|
| ํŒจํ‚ค์ง€๋ช… | `kakao-mcp-ccomajeon` |
| ์‹คํ–‰ ๋ช…๋ น | `kakao-mcp` (๊ฐ™์€ ๋™์ž‘์˜ `kakao-mcp-ccomajeon`๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) |
| ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ | `/var/lib/kakao-mcp` |
| ์„œ๋น„์Šค | `kakao-mcp.service` |
| ํด๋ผ์ด์–ธํŠธ ์„ค์ • | `~/.config/kakao-mcp/mcp.json` |
| MCP ๋“ฑ๋ก ํ‚ค | `kakao-mcp` |
| ๊ธฐ๋ณธ ํฌํŠธ | ๋ฐ๋ชฌ `8787` ยท ์›น `8899` (๋ชจ๋‘ loopback) |

> [!WARNING]
> ์ด๋ฒˆ ๋ฒ„์ „์€ ์„œ๋น„์Šคยท์„ค์ •ยท๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์น˜ํ•œ ์„œ๋ฒ„๋Š” ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ์ƒˆ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”. ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ์™€ ์„œ๋น„์Šค ๊ณ„์ •์„ ํ™•์ธํ•œ ๋’ค ์šด์˜์ž๊ฐ€ ์ด์ „ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ํŒจํ‚ค์ง€๋Š” ๊ธฐ์กด ๊ณ„์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์„œ๋น„์Šค๋ฅผ ์ž๋™ ์ค‘์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

### 1. ์„œ๋ฒ„ ์ค€๋น„์™€ ์„ค์น˜

์„œ๋ฒ„์—๋Š” Linux/systemd, Git, sudo, Node.js 22.18 ์ด์ƒ๊ณผ npm์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Node๋Š” ์„œ๋น„์Šค ๊ณ„์ •์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์— ์„ค์น˜ํ•˜์„ธ์š”. ์‚ฌ์šฉ์ž ํ™ˆ์˜ nvm ์„ค์น˜๋Š” systemd ์„œ๋น„์Šค์—์„œ ์ ‘๊ทผ์ด ๋ง‰ํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Windows/macOS์—์„œ๋Š” ๊ธฐ์กด Linux ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ ์˜ฎ๊ธฐ๊ณ , ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

```bash
node --version
npm --version
sudo npm install --global --prefix /usr/local ./kakao-mcp-ccomajeon-0.2.0-rebuild.3.tgz
/usr/local/bin/kakao-mcp --version
/usr/local/bin/kakao-mcp setup
```

๋ฒ„์ „์€ `0.2.0-rebuild.3`์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `setup`์€ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , ์„ค์น˜ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ sudo ์š”์ฒญ์— ์‘๋‹ตํ•˜์„ธ์š”.

๋งˆ๋ฒ•์‚ฌ์—์„œ ๋‹ค์Œ ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

1. <b>์ƒˆ Linux ์„œ๋ฒ„ ์„ค์น˜(2)</b>๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
2. ํฌํŠธ๋Š” ๊ธฐ๋ณธ๊ฐ’ `8787`์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ํฌํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
3. ์นด์นด์˜ค ๊ณ„์ • ์ •๋ณด๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•˜๊ณ  ํœด๋Œ€ํฐ์˜ ๋กœ๊ทธ์ธยท๊ธฐ๊ธฐ ์ธ์ฆ ์š”์ฒญ์„ ์ง์ ‘ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.
4. ์ž๋™ ์žฌ๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ๋ชจ๋“œ๋Š” ์ฒ˜์Œ์—๋Š” ๊ธฐ๋ณธ **ask**๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
5. ํ‘œ์‹œ๋œ ์„ค์น˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ณ  ์„œ๋น„์Šค ๋“ฑ๋กยท์‹œ์ž‘์„ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๊ฒฝ๋กœ๋Š” `/var/lib/kakao-mcp`, ์„œ๋น„์Šค๋Š” `kakao-mcp.service`์ž…๋‹ˆ๋‹ค. ๊ณ„์ • ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์€ ์ด ์„œ๋น„์Šค ํ•˜๋‚˜๊ฐ€ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„ ๊ฐ™์€ ๊ณ„์ •์œผ๋กœ `kakao-mcp-mcp`๋ฅผ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”.

```bash
systemctl status kakao-mcp --no-pager
kakao-mcp setup --doctor
```

ํ˜„์žฌ ๋ฒ„์ „์˜ ์‹ค์ œ ๊ณ„์ • ๋กœ๊ทธ์ธยท์†ก์ˆ˜์‹ ์€ ์•„์ง ๊ฒ€์ฆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์„ค์น˜ยท๋กœ๊ทธ์ธ ๊ณผ์ •์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์•„๋ž˜ ์ง„๋‹จ ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.

### 2. CodexยทClaude ๋“ฑ AI์— ์—ฐ๊ฒฐ

| ์ƒํ™ฉ | ํ•  ์ผ |
|---|---|
| **AI๋„ ๊ฐ™์€ ์„œ๋ฒ„์—์„œ ์‹คํ–‰** | ์„ค์น˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์ถœ๋ ฅํ•œ `codex mcp add ...` ๋˜๋Š” `claude mcp add ...` ๋ช…๋ น์„ AI๋ฅผ ์“ฐ๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •์—์„œ ์‹คํ–‰ํ•˜๊ณ  AI ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. |
| **AI๊ฐ€ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰** | ๊ทธ ์ปดํ“จํ„ฐ์—๋„ ๊ฐ™์€ `.tgz` ํŒŒ์ผ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € SSH ํ‚ค ๋˜๋Š” SSH ์—์ด์ „ํŠธ๋กœ ์„œ๋ฒ„์— ๋น„๋ฐ€๋ฒˆํ˜ธ ์งˆ๋ฌธ ์—†์ด ์ ‘์†ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. |

```bash
npm install --global ./kakao-mcp-ccomajeon-0.2.0-rebuild.3.tgz
kakao-mcp setup
```

๋งˆ๋ฒ•์‚ฌ์—์„œ <b>๊ธฐ์กด ๋ฐ๋ชฌ ์—ฐ๊ฒฐ(1)</b>์„ ์„ ํƒํ•˜๊ณ  `user@server` ๋˜๋Š” SSH ๋ณ„์นญ๊ณผ ๋ฐ๋ชฌ ํฌํŠธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ `user@server`๋Š” ์‹ค์ œ SSH ์‚ฌ์šฉ์žยท์„œ๋ฒ„ ์ฃผ์†Œ๋กœ ๋ฐ”๊พธ์„ธ์š”. ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋งŒ๋“  `~/.config/kakao-mcp/mcp.json`๊ณผ ์ถœ๋ ฅํ•œ AI๋ณ„ ๋“ฑ๋ก ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ ์„ค์น˜ ์œ„์น˜์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†๋‹ค๋ฉด ์‹œ์Šคํ…œ ์ „์—ญ ์„ค์น˜ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ npm prefix๋ฅผ ์„ค์ •ํ•˜์„ธ์š”.

์„ค์ • JSON๋งŒ ํ•„์š”ํ•˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. `--config`๋Š” JSON์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์„ค์ • ์ €์žฅ์ด๋‚˜ Codex ๋“ฑ๋ก์„ ์ž๋™ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

```bash
# ๊ฐ™์€ ์ปดํ“จํ„ฐ์˜ ๋ฐ๋ชฌ
kakao-mcp setup --config --listen 127.0.0.1:8787

# ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ๋ฐ๋ชฌ
kakao-mcp setup --config --ssh user@server --listen 127.0.0.1:8787
```

AI ํด๋ผ์ด์–ธํŠธ ์žฌ์‹œ์ž‘ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ๐Ÿ’ฌ โ€œ์นด์นด์˜คํ†ก ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด ์ค˜.โ€
- ๐Ÿ’ฌ โ€œ๋Œ€ํ™”๋ฐฉ ๋ชฉ๋ก์„ ๋ณด์—ฌ ์ค˜.โ€
- ๐Ÿ’ฌ โ€œ๊ฐœ๋ฐœํŒ€ ๋ฐฉ์˜ ์ตœ๊ทผ ๋Œ€ํ™”๋ฅผ ์ฝ๊ณ  ์š”์•ฝํ•ด ์ค˜.โ€
- ๐Ÿ’ฌ โ€œ๋‚˜์™€์˜ ์ฑ„ํŒ…์— ํ…Œ์ŠคํŠธ ๋ฉ”๋ชจ๋ฅผ ๋ณด๋‚ด ์ค˜.โ€

์ฒ˜์Œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์˜ ์ฝ๊ธฐยท์ „์†ก์€ ์‚ฌ๋žŒ์ด ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. ์ฝ์Œ ํ‘œ์‹œ๋Š” ๋ณ„๋„ ๊ถŒํ•œ์ž…๋‹ˆ๋‹ค. ํ™•์ธ ์ฐฝ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” AI ํด๋ผ์ด์–ธํŠธ๋Š” ํŒจ์Šคํ‚ค ์Šน์ธ ์„ค์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

> [!TIP]
> ๋‚ด ์ปดํ“จํ„ฐ์˜ Docker์—์„œ ๋จผ์ € ์‹œํ—˜ํ•ด ๋ณด๋ ค๋ฉด [Docker๋กœ ๋กœ์ปฌ์—์„œ ์‹œํ—˜ํ•˜๊ธฐ](docs/runbooks/docker.md)๋ฅผ ๋ณด์„ธ์š”. `docker compose -f docker/compose.yaml up -d --build`๋กœ ๋„์šฐ๊ณ  ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

### 3. ์›น ํ™”๋ฉด ๋˜๋Š” ํ„ฐ๋ฏธ๋„ ์‚ฌ์šฉ

์›น ํ™”๋ฉด์€ ์•„๋ž˜ ๋ช…๋ น์„ **๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•  ์ปดํ“จํ„ฐ**์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

```bash
# ๊ฐ™์€ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ฐ๋ชฌ ์‚ฌ์šฉ
kakao-mcp web

# ์„œ๋ฒ„์˜ ๋ฐ๋ชฌ์— SSH๋กœ ์—ฐ๊ฒฐ
kakao-mcp web --ssh user@server
```

ํ„ฐ๋ฏธ๋„์— ํ‘œ์‹œ๋œ `http://127.0.0.1:8899/launch?t=...` ๋งํฌ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฝ๋‹ˆ๋‹ค. ์‹คํ–‰ ๋งํฌ๋Š” ๋งค๋ฒˆ ๋ฐ”๋€Œ๋ฉฐ ๋กœ๊ทธ์ธ ๊ถŒํ•œ์„ ํฌํ•จํ•˜๋ฏ€๋กœ ๊ณต์œ ํ•˜์ง€ ๋งˆ์„ธ์š”. ํ™”๋ฉด์€ ์‹คํ–‰ ๋งํฌ๋กœ ์—ฐ ํƒญ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ์ƒˆ ํƒญ์ด๋‚˜ ํ™”๋ฉด์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ๋’ค์—๋Š” ๋งํฌ๋ฅผ ๋‹ค์‹œ ์—ฌ์„ธ์š”. ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋Š” ์™ธ๋ถ€ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์ œ๋ชฉยท์„ค๋ช…๋งŒ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ๋ฐ๋ชฌ ํฌํŠธ๊ฐ€ ๋‹ค๋ฅด๋ฉด `--listen 127.0.0.1:ํฌํŠธ`๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ํ•œ ์ปดํ“จํ„ฐ์˜ `127.0.0.1:8787` ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ์„œ๋ฒ„๋ผ๋ฉด SSH๋กœ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธํ•œ ํ›„ ์‹คํ–‰ํ•˜์„ธ์š”.

```bash
kakao-mcp status                       # ์—ฐ๊ฒฐ ์ƒํƒœ
kakao-mcp list                         # ๋Œ€ํ™”๋ฐฉ ๋ชฉ๋ก
kakao-mcp chat                         # ํ„ฐ๋ฏธ๋„ ๋ฉ”์‹ ์ €
kakao-mcp history "๋Œ€ํ™”๋ฐฉ ์ด๋ฆ„" 20      # ์ตœ๊ทผ ๊ธฐ๋ก
kakao-mcp send self "ํ…Œ์ŠคํŠธ ๋ฉ”๋ชจ"       # ๋‚˜์™€์˜ ์ฑ„ํŒ…์— ์‹ค์ œ ์ „์†ก
kakao-mcp help                         # ์ „์ฒด ๋ช…๋ น ํ™•์ธ
```

์ผ๋ฐ˜ ๋ฐฉ์—์„œ ์Šน์ธ ํ•„์š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ์•ˆ๋‚ด๋œ ์Šน์ธ ์ ˆ์ฐจ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก ๊ฒฐ๊ณผ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•˜๋ฉด ์ƒˆ ์š”์ฒญ์œผ๋กœ ๋‹ค์‹œ ๋ณด๋‚ด์ง€ ๋ง๊ณ  ๊ธฐ์กด `requestId`์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

### AI๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๊ณผ ์Šน์ธ ๋ฒ”์œ„

์ด ํ”„๋กœ๊ทธ๋žจ์€ AI ๋ชจ๋ธ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์นด์นด์˜คํ†ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์š”์•ฝยท๋‹ต์žฅ ์ž‘์„ฑยท์ผ์ • ํŒ๋‹จ์€ ์—ฐ๊ฒฐํ•œ AI๊ฐ€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋„๊ตฌ 16๊ฐœ, ์„ ํƒ ๋ฌถ์Œ๊นŒ์ง€ ์ผœ๋ฉด ์ด 41๊ฐœ์ž…๋‹ˆ๋‹ค.

| ๋ฒ”์œ„ | AI๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ | ๊ธฐ๋ณธ `ask` ๋ชจ๋“œ์˜ ์กฐ๊ฑด |
|---|---|---|
| ์ƒํƒœยท๋ชฉ๋ก | ์—ฐ๊ฒฐ ์ƒํƒœ, ๋Œ€ํ™”๋ฐฉ ์ฐพ๊ธฐ, ์นœ๊ตฌยท๊ถŒํ•œ ๋ชฉ๋ก ์กฐํšŒ | ๋ณธ๋ฌธ ์—ด๋žŒ๊ณผ ๋ณ„๊ฐœ์ด๋ฉฐ ๋ฐฉ ์ด๋ฆ„ยท์นœ๊ตฌ ์ •๋ณด ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ |
| ๋Œ€ํ™” ์กฐํšŒ | ๊ณผ๊ฑฐยท์ตœ๊ทผยท์ƒˆ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐยท๊ฒ€์ƒ‰, ์ œํ•œ๋œ ์•ˆ ์ฝ์€ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ฒจ๋ถ€ ๋‹ค์šด๋กœ๋“œ | ๋ฐฉ ์ฝ๊ธฐ ๊ทœ์น™ ๋˜๋Š” ์ผํšŒ์„ฑ ์‚ฌ๋žŒ ์Šน์ธ. ์ฝ์–ด๋„ ์ž๋™์œผ๋กœ ์ฝ์Œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ |
| ๋ฉ”์‹œ์ง€ ์ „์†ก | ํ…์ŠคํŠธยท๋‹ต์žฅยท๋ฉ˜์…˜, ์‚ฌ์ง„ยท๋ฌถ์Œ ์‚ฌ์ง„ยทํŒŒ์ผ | ํ•ด๋‹น ์ž‘์—… ๋˜๋Š” ๋ฐฉ์˜ ์ „์†ก ํ—ˆ๊ฐ€ ํ•„์š”. ๋ฐฉ ํ—ˆ๊ฐ€๋ฅผ ์ฃผ๋ฉด ์ดํ›„ ๋‚ด์šฉ์€ ์ผ์ผ ํ•œ๋„ ์•ˆ์—์„œ ๋‹ค์‹œ ๋ฌป์ง€ ์•Š๊ณ  ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ |
| ๋ฉ”์‹œ์ง€ยท๋ฐฉ ๋ณ€๊ฒฝ (`chats` ํฌํ•จ) | ๋ณธ์ธ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •ยท์‚ญ์ œ, ์ „๋‹ฌยท์ด๋ชจํ‹ฐ์ฝ˜, ๋ฐฉ ์ •๋ณด ๋ณ€๊ฒฝ, ๋‚˜๊ฐ€๊ธฐ, ์ฝ์Œ ํ‘œ์‹œ, ๋Œ€ํ™”๋ฐฉ ์—ด๊ธฐยท์ƒ์„ฑ | ์ž‘์—…๋ณ„ ์Šน์ธ ๊ทœ์น™ ์ ์šฉ. ์ผ๋ฐ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ํ—ˆ๊ฐ€๊ฐ€ ์‚ญ์ œยท๋‚˜๊ฐ€๊ธฐ๊นŒ์ง€ ํ—ˆ์šฉํ•˜์ง€๋Š” ์•Š์Œ |
| ์นœ๊ตฌยทํ”„๋กœํ•„ (`friends`) | ํ”„๋กœํ•„ ์กฐํšŒยท๋ณ€๊ฒฝ, ์นœ๊ตฌ ์ถ”๊ฐ€, ์ฐจ๋‹จยทํ•ด์ œ | ๋ณ€๊ฒฝ ์ž‘์—…์€ ์‚ฌ๋žŒ ์Šน์ธ. ์นœ๊ตฌ ์ถ”๊ฐ€๋Š” ๊ธฐ๋ณธ ํ•˜๋ฃจ 10ํšŒ ์ƒํ•œ |
| ์ด๋ฒคํŠธ (`events`) | ์ƒˆ ๋ฉ”์‹œ์ง€ ์ด๋ฒคํŠธ ์ˆ˜๋ นยท์ฒ˜๋ฆฌ ํ™•์ธ | ์ ‘๊ทผ ์ •์ฑ… ์ ์šฉ. ์ƒ์‹œ ์ž๋™์‘๋‹ตยท์˜ˆ์•ฝ์€ ๋ณ„๋„ ์—์ด์ „ํŠธ ์‹คํ–‰๊ธฐ ํ•„์š” |
| ๊ธฐ๋ก ์ •๋ฆฌ (`vault`) | JSON/HTML ๋‚ด๋ณด๋‚ด๊ธฐ, ๋งํฌ ์ˆ˜์ง‘, ์ผ์ •ยทํ•  ์ผ ํ›„๋ณด ์ถ”์ถœ, ์ง€์ •ํ•œ ๋ฐฉ ๊ธฐ๋ก ๊ฒ€์ƒ‰ | ๊ฐ ๋ฐฉ์˜ ์ฝ๊ธฐ ํ—ˆ๊ฐ€ ํ•„์š”. ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์„œ๋ฒ„์˜ ์ •ํ•ด์ง„ ๊ฒฝ๋กœ์— ์ €์žฅ. ๋ณ„๋„ ์บ˜๋ฆฐ๋” ๋“ฑ๋ก ๋„๊ตฌ๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Œ |
| ํ†ต์ œ | ๊ถŒํ•œ ์กฐํšŒยท์ฒ ํšŒ, ์ž‘์—… ์ƒํƒœ ํ™•์ธ, ๋ฐœ์‹ ยท๋ณ€๊ฒฝ ์ผ์‹œ์ •์ง€ | ๊ถŒํ•œ ์ถ•์†Œยท์ •์ง€๋Š” ์ฆ‰์‹œ, ๊ถŒํ•œ ํ™•๋Œ€ยท์ •์ง€ ํ•ด์ œ๋Š” ์‚ฌ๋žŒ ํ™•์ธ |

#### `ask`์™€ `trust` ๋น„๊ต

| ํ•ญ๋ชฉ | `ask` (๊ธฐ๋ณธ, ๊ถŒ์žฅ) | `trust` |
|---|---|---|
| ๋ฐฉ ๋‚ด์šฉ ์ฝ๊ธฐ | ๋ฐฉ๋งˆ๋‹ค ํ—ˆ๊ฐ€ ๋˜๋Š” ์ผํšŒ์„ฑ ์Šน์ธ | ๋ช…์‹œํ•œ `deny` ์™ธ ๋ชจ๋‘ ํ—ˆ์šฉ |
| ํ…์ŠคํŠธยท์‚ฌ์ง„ ์ „์†ก | ๋ฐฉ๋งˆ๋‹ค ์ฒ˜์Œ ํ•œ ๋ฒˆ ์Šน์ธ | ๋ฐ”๋กœ |
| ๋ฌด์Šน์ธ ์ „์†ก ํ•˜๋ฃจ ํ•œ๋„ | ๊ธฐ๋ณธ 50ํšŒ | ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ (์†๋„ ์ œํ•œ์€ ์œ ์ง€) |
| ์ˆ˜์ •ยท์‚ญ์ œยท๋‚˜๊ฐ€๊ธฐยท์ฐจ๋‹จยทํ”„๋กœํ•„ | ๋งค๋ฒˆ ํ™•์ธ | ๋ฐ”๋กœ |
| ๋ฐฉ ์ƒ์„ฑยท๊ถŒํ•œ ํ™•๋Œ€ยท์ •์ง€ ํ•ด์ œ | ์‚ฌ๋žŒ ํ™•์ธ | ์‚ฌ๋žŒ ํ™•์ธ |

> [!CAUTION]
> `trust`์—์„œ๋Š” AI๊ฐ€ ๋ชจ๋“  ๋Œ€ํ™”๋ฐฉ์„ ์ฝ๊ณ  ๋ฌป์ง€ ์•Š๊ณ  ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋Œ€ํ™”๋ฐฉ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์“ด ๋ฉ”์‹œ์ง€๊ฐ€ AI๋ฅผ ์กฐ์ข…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ”„๋กฌํ”„ํŠธ ์ธ์ ์…˜). ๋ณธ์ธ ์ „์šฉ ๊ณ„์ •์ด๋‚˜ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ๋งŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

<details>
<summary><b>์•Œ์•„๋‘˜ ๊ถŒํ•œ ์˜ˆ์™ธ์™€ ํ•œ๊ณ„</b></summary>

- ๋‚˜์™€์˜ ์ฑ„ํŒ…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐยท์ „์†กยท๋ณธ์ธ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •/์‚ญ์ œ์— ๋ณ„๋„ ์Šน์ธ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ช…์‹œํ•œ ์ฝ๊ธฐ ๊ทœ์น™๊ณผ ์šด์˜์ž ์ƒํ•œ์€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
- `trust` ๋ชจ๋“œ๋Š” ๊ธฐ๋ณธ ์ฝ๊ธฐยท๋ฐœ์‹ ๋ฟ ์•„๋‹ˆ๋ผ ์ „๋‹ฌ, ์ˆ˜์ •ยท์‚ญ์ œ, ์ฝ์Œ ํ‘œ์‹œ, ๋ฐฉ ๋‚˜๊ฐ€๊ธฐยท์ •๋ณด ๋ณ€๊ฒฝ, ํ”„๋กœํ•„ ๋ณ€๊ฒฝ, ์นœ๊ตฌ ์ถ”๊ฐ€ยท์ฐจ๋‹จยทํ•ด์ œ๋„ ๊ฐœ๋ณ„ ํ™•์ธ ์—†์ด ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ ์ƒ์„ฑยท๊ถŒํ•œ ํ™•๋Œ€ยท์ •์ง€ ํ•ด์ œ ๋“ฑ์€ ๊ณ„์† ์‚ฌ๋žŒ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ `ask`์ด๋ฉฐ ์ด๋ฒˆ ๊ฒ€์‚ฌ์—์„œ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
- `ask`์˜ ๋ฐฉ ์ „์†ก ํ—ˆ๊ฐ€๋Š” ๊ธฐ๋ณธ ํ•˜๋ฃจ 50ํšŒ์ด๊ณ  `trust`๋Š” ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ์ผ ์ƒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๋ชจ๋“œ ๋ชจ๋‘ ๋ณ„๋„ ์†๋„ ์ œํ•œ์€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ํ•œ๋„๋Š” ์šด์˜์ž๊ฐ€ ๋ช…์‹œํ•˜์„ธ์š”.
- `KAKAO_ROOM_CEILING`์€ ํ—ˆ์šฉํ•  ๋ฐฉ ID๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ˆ˜์ •๋ณธ์—์„œ๋Š” ๋ณธ๋ฌธ ์—ด๋žŒ๊ณผ ๋ฐœ์‹ ์— ์ ์šฉ๋˜๋ฉฐ, ๋Œ€ํ™”๋ฐฉยท์นœ๊ตฌ ๋ชฉ๋ก ์ „์ฒด๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ธฐ๋Šฅ์€ ์•„๋‹™๋‹ˆ๋‹ค. `pause`๋Š” ๋ฐœ์‹ ยท๊ณ„์ • ๋ณ€๊ฒฝ์„ ๋ฉˆ์ถ”๋Š” ์šฉ๋„์ด๋ฉฐ ๋ชจ๋“  ์กฐํšŒยท๋กœ์ปฌ ์ €์žฅ์„ ์ฐจ๋‹จํ•˜๋Š” ์Šค์œ„์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
- MCP ๋„๊ตฌ๋กœ ์šด์˜ ๋ชจ๋“œยท์ƒํ•œยท๊ธฐ๋Šฅ ์„ค์ •์„ ์ž„์˜ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„์˜ ์ž„์˜ ํŒŒ์ผยท์…ธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ AI์—๊ฒŒ ๋ณ„๋„์˜ ์…ธ/SSH/ํŒŒ์ผ ๋„๊ตฌ๋„ ์ฃผ์—ˆ๋‹ค๋ฉด ๊ทธ ๊ถŒํ•œ์€ ๋ณ„๋„๋กœ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ํ—ˆ์šฉ๋œ ๋Œ€ํ™” ์กฐํšŒ ๊ฒฐ๊ณผ๋Š” AI ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ชจ๋ธ์„ ์“ฐ๋ฉด ๊ทธ ์ œ๊ณต์ž์—๊ฒŒ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฐ๊ฒฐํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ ์„ค์ •์„ ํ™•์ธํ•˜์„ธ์š”.

</details>

### 4. ์„ ํƒ ๋„๊ตฌ ๋ฌถ์Œ๊ณผ ์ง„๋‹จ

๊ธฐ๋ณธ MCP ๋„๊ตฌ๋Š” 16๊ฐœ์ž…๋‹ˆ๋‹ค. ์ „์ฒด 41๊ฐœ ๋„๊ตฌ๋ฅผ ๋…ธ์ถœํ•˜๋ ค๋ฉด ์„œ๋ฒ„์˜ `/var/lib/kakao-mcp/app/.env.local`์— ๋‹ค์Œ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์†Œ์œ ์ž์™€ ๋น„๊ณต๊ฐœ ๊ถŒํ•œ์„ ์œ ์ง€ํ•˜์„ธ์š”.

```dotenv
KAKAO_MCP_TOOL_GROUPS=chats,friends,events,vault
```

์„ค์ • ์ ์šฉ์—๋Š” ๋ฐ๋ชฌ ์žฌ์‹œ์ž‘๊ณผ AI ์žฌ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์‹œ์ž‘ํ•˜๋ฉด ์‹คํ–‰ ์ค‘ ์ผ์‹œ์ •์ง€๊ฐ€ ํ•ด์ œ๋˜๋ฏ€๋กœ, ์ž‘์—… ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ ๋’ค ์šด์˜์ž๊ฐ€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

```bash
sudo systemctl restart kakao-mcp
```

๋„๊ตฌ ๋…ธ์ถœ์€ ๋ฐฉ ์ ‘๊ทผ ๊ถŒํ•œ์ด๋‚˜ ์ž๋™ ๋ณด๊ด€ ํ—ˆ์šฉ์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

```bash
kakao-mcp setup --doctor
systemctl status kakao-mcp --no-pager
sudo journalctl -u kakao-mcp -n 80 --no-pager
```

์ธ์ฆ ์ •๋ณด ๋ณต๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์ง„๋‹จ์ด ๋‚˜์˜ค๋ฉด ์„œ๋ฒ„์—์„œ `kakao-mcp setup --repair`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธยท์ธ์ฆ ์ฝ”๋“œยทํ† ํฐ์€ ์ฑ„ํŒ…์— ๋ถ™์—ฌ ๋„ฃ์ง€ ๋ง๊ณ  ํ•ด๋‹น ํ„ฐ๋ฏธ๋„์ด๋‚˜ ํœด๋Œ€ํฐ์—์„œ ์ž…๋ ฅํ•˜์„ธ์š”.

---

## ๋ณด์•ˆ ๊ฒ€์‚ฌ ์š”์•ฝ (2026-11-01, 2026-11-02 ์ถ”๊ฐ€)

๊ฒ€์‚ฌ ๋Œ€์ƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šคยท๊ฒฉ๋ฆฌ ํ…Œ์ŠคํŠธยท์˜์กด์„ฑ์ด๋ฉฐ ์‹ค์ œ ๊ณ„์ •๊ณผ ์šด์˜ ์„œ๋ฒ„ ์นจํˆฌ ์‹œํ—˜์€ ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•œ ์Šน์ธ ์žฌ์‚ฌ์šฉ, ๋ฐฉ ์ฝ๊ธฐ ์ƒํ•œ ์šฐํšŒ, ์‚ฌ์ง„ ํ‘œ์‹œ ์ฝ”๋“œ ์‚ฝ์ž…, ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ DNS ์žฌ๋ฐ”์ธ๋”ฉ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ ๋ฒ„์ „์€ <b><code>0.2.0-rebuild.2</code></b>์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฐฐํฌ์ธ `0.2.0-rebuild.3`์—๋Š” ์ด ์ˆ˜์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ํ™•์ธ ์ฐฝ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ๋žŒ์—๊ฒŒ ์‹ค์ œ๋กœ ๋ฌผ์—ˆ๋‹ค๋Š” ์ „์ œ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. AI์˜ ์…ธ/SSH ์ ‘๊ทผ๊ณผ ์‚ฌ๋žŒ ์Šน์ธ์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด `KAKAO_APPROVAL_CLIENT_CONFIRM=off`์™€ ํŒจ์Šคํ‚ค ์Šน์ธ์„ ๊ตฌ์„ฑํ•˜์„ธ์š”. ํŒจ์Šคํ‚ค๊ฐ€ ์ค€๋น„๋˜๊ธฐ ์ „์— ๋„๋ฉด ์Šน์ธ์ด ํ•„์š”ํ•œ ์ž‘์—…์ด ๋ง‰ํž™๋‹ˆ๋‹ค. ๊ฐ™์€ OS ์‚ฌ์šฉ์ž๋‚˜ root์˜ ํŒŒ์ผ ์ ‘๊ทผ๊นŒ์ง€ ๋ง‰์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์•ฑ ์˜์กด์„ฑ์˜ `npm audit`์—์„œ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์€ ๊ฒ€์‚ฌ ๋‹น์‹œ 0๊ฑด์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ ํ†ต๊ณผ๊ฐ€ ๋ชจ๋“  ๋ณด์•ˆ ๋ฌธ์ œ์˜ ๋ถ€์žฌ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ๋‚ด์šฉ๊ณผ ์šด์˜์ƒ ๊ฒฝ๊ณ„๋Š” [๋ณด์•ˆ ๊ฒ€์‚ฌ ๋ฌธ์„œ](docs/security-review.md)๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

2026-11-02์— ๋ ˆํฌ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•ด ์Šน์ธ ํ™”๋ฉด์˜ ๋Œ€์ƒ ๋ฐฉ ํ‘œ์‹œ, Linux ์ ‘์† ์‚ฌ์šฉ์ž ํ™•์ธ, ์Šน์ธ ์ „ ๋ฉ”์‹œ์ง€ ๋…ธ์ถœ, ์›น ํ™”๋ฉด ์„ธ์…˜ ๋ณดํ˜ธ์™€ ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ‘œ์‹œ, CLI ์ถœ๋ ฅ์˜ ํ„ฐ๋ฏธ๋„ ์ œ์–ด๋ฌธ์ž, ์ผ์ • ์ถ”์ถœ ์ง€์—ฐ, 1ํšŒ ์ฝ๊ธฐ ํ—ˆ๊ฐ€ ๊ฐœ์ˆ˜, ์ฒจ๋ถ€ ๋‹ค์šด๋กœ๋“œ ํฌ๊ธฐ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ •์€ `main`์— ๋ฐ˜์˜๋˜์–ด ์žˆ์œผ๋ฉฐ `0.2.0-rebuild.3` ํŒจํ‚ค์ง€ ํŒŒ์ผ์—๋Š” ๋“ค์–ด ์žˆ์ง€ ์•Š์œผ๋‹ˆ, ์†Œ์Šค์—์„œ ์ƒˆ๋กœ `npm pack`ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์“ฐ์„ธ์š”.

---

## ์†Œ์Šค ๊ฐœ๋ฐœ๊ณผ ํŒจํ‚ค์ง€ ๋นŒ๋“œ

```bash
git clone https://github.com/ccomajeon/kakao-mcp-demon-ccomajeon.git
cd kakao-mcp-demon-ccomajeon
npm ci
npm test
npm run typecheck
npm run check:package
npm pack
```

`npm pack`์€ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— `kakao-mcp-ccomajeon-0.2.0-rebuild.3.tgz`๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ ์˜ฎ๊ธด ํ›„ ์œ„ 1๋‹จ๊ณ„์˜ ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์„ธ์š”. GitHub์—์„œ ์†Œ์Šค ZIP/TAR ํŒŒ์ผ์„ ๋ฐ›์•˜๋‹ค๋ฉด ๋จผ์ € ์••์ถ•์„ ํ’€๊ณ  ๊ฐ™์€ npm ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์••์ถ•๋ณธ์—๋Š” `.git`์ด ์—†๊ณ , ๊ด€๋ฆฌํ˜• ์†Œ์Šค ์„ค์น˜๋Š” ๊นจ๋—ํ•œ `origin/main` ์ฒดํฌ์•„์›ƒ๋งŒ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ์••์ถ•๋ณธ์—์„œ `npm run setup`์œผ๋กœ ์ƒˆ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ์‹์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ๋ฐ๋ชฌ์— ๊ฐœ๋ฐœ์šฉ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” `npm run build --workspace=@kakao-mcp/protocol` ํ›„ `npm run kakao -- status`, `npm run kakao -- chat`, `npm run web`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## ๊ฒ€์ฆ ์ƒํƒœ์™€ ์ง€์› ๋ฒ”์œ„

| ํŒจํ‚ค์ง€ | ํ…Œ์ŠคํŠธ | ํ†ต๊ณผ | ์‹คํŒจ | ๊ฑด๋„ˆ๋œ€ |
|---|--:|--:|--:|--:|
| ๋ฃจํŠธ (๊ณต๊ฐœ ๊ธˆ์ง€์–ด ๊ฒ€์‚ฌ) | 4 | 4 | 0 | 0 |
| `@kakao-mcp/protocol` | 78 | 78 | 0 | 0 |
| `@kakao-mcp/core` | 308 | 307 | 0 | 1 |
| `@kakao-mcp/client` | 25 | 25 | 0 | 0 |
| `@kakao-mcp/mcp` | 198 | 194 | 0 | 4 |
| `@kakao-mcp/cli` | 48 | 48 | 0 | 0 |
| `@kakao-mcp/web` | 73 | 73 | 0 | 0 |
| **ํ•ฉ๊ณ„** | **734** | **729** | **0** | **5** |

2026-11-02 ๋ณด์•ˆ ์ˆ˜์ • ๋ฐ˜์˜ ํ›„ Linux(Node 22) ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ์ด๋ฉฐ `npm run typecheck`์™€ `npm run check:package`๋„ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑด๋„ˆ๋›ด ๊ฒ€์‚ฌ๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋งž์ง€ ์•Š์•„ ์ž๋™์œผ๋กœ ๋น ์ง„ ๊ฒƒ์œผ๋กœ, systemd ๊ฒฉ๋ฆฌ, ์‹ค์ œ ์„œ๋น„์Šค ๊ณ„์ • ์„ค์น˜, SSH ๋Œ€์ƒ ์—ฐ๊ฒฐ, Windows ์ „์šฉ ๋™์ž‘ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

> [!IMPORTANT]
> ์‹ค์ œ ๊ณ„์ • ๋กœ๊ทธ์ธยทํœด๋Œ€ํฐ ์ธ์ฆยท์‹ค์„œ๋น„์Šค ์†ก์ˆ˜์‹ ์€ ์•„์ง ๊ฒ€์ฆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ž๋™ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ•ด๋‹น ํ™˜๊ฒฝ์˜ ์‹ค์ œ ์šด์˜ ๊ฒ€์ฆ์œผ๋กœ ํ•ด์„ํ•˜์ง€ ๋งˆ์„ธ์š”.

ํ˜„์žฌ ๋ฒ„์ „์€ npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์œ„์— ์•ˆ๋‚ดํ•œ ๋กœ์ปฌ `.tgz` ํŒŒ์ผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

GitHub Actions๋Š” ๋‹จ์œ„ยทํƒ€์ž…ยทํŒจํ‚ค์ง€ยท๊ณต๊ฐœ ํŒŒ์ผ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. `KAKAO_MCP_DENYLIST` ์ €์žฅ์†Œ Secret์„ ์„ค์ •ํ•˜๋ฉด ๋น„๊ณต๊ฐœ ๊ธˆ์ง€์–ด ๋ชฉ๋ก๋„ ๊ฒ€์‚ฌํ•˜๋ฉฐ, ๋ฏธ์„ค์ • ์‹œ ๊ณต๊ฐœ ํŒจํ„ด๋งŒ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. npm ๊ฒŒ์‹œ ์›Œํฌํ”Œ๋กœ๋Š” ๋ณ„๋„ ํ™˜๊ฒฝ ์Šน์ธยทtrusted publishing ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋ฉฐ ์†Œ์Šค ์—…๋กœ๋“œ๋งŒ์œผ๋กœ npm์— ๊ฒŒ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

## ๋” ์ฝ์„๊ฑฐ๋ฆฌ

| ๋ฌธ์„œ | ๋‚ด์šฉ |
|---|---|
| [์‹œ์ž‘ํ•˜๊ธฐ](docs/QUICKSTART.md) | ์„ค์น˜๋ถ€ํ„ฐ AI ์—ฐ๊ฒฐ๊นŒ์ง€ ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด, AI ํด๋ผ์ด์–ธํŠธ ํ˜ธํ™˜ ๋ชฉ๋ก |
| [MCP ๋„๊ตฌ์™€ ๊ถŒํ•œ ๊ณ„์•ฝ](docs/tool-contract.md) | ๋„๊ตฌ๋ณ„ ๋™์ž‘, ์Šน์ธยท์žฌ์‹œ๋„ ๊ทœ์น™, ๋ฆฌ์†Œ์Šค ๊ตฌ๋… |
| [์—์ด์ „ํŠธ ๋ชจ๋“œ์™€ ์„ค์ • ๋ ˆ์ด์–ด](docs/designs/agent-mode-and-layers.md) | `ask`/`trust` ์„ค๊ณ„, ๋ ˆ์ด์–ด ๊ตฌ์กฐ, ๋ฐฑ์—… ์›์น™ |
| [๊ธฐ๋Šฅ ๋งคํŠธ๋ฆญ์Šค](docs/agent-capability-matrix.md) | ๊ธฐ๋Šฅ๋ณ„ ๊ฒ€์ฆ ์ˆ˜์ค€ (์‹ค๊ณ„์ • โœ… / ๋‹จ์œ„ ๐ŸŸก / ๋ฏธ๊ฒ€์ฆ โ“) |
| [๋ณด์•ˆ ๊ฒ€์‚ฌ](docs/security-review.md) | ์ˆ˜์ •ํ•œ ์ทจ์•ฝ์ ๊ณผ ์šด์˜์ƒ ๊ฒฝ๊ณ„ |

## ๋ผ์ด์„ ์Šค

MIT ๋ผ์ด์„ ์Šค์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE)๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Kakao์˜ ๊ณต์‹ ์ œํ’ˆ์ด ์•„๋‹ˆ๋ฉฐ Kakao์™€ ์ œํœดํ•˜๊ฑฐ๋‚˜ ์Šน์ธ์„ ๋ฐ›์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. KakaoTalk ๋ฐ ๊ด€๋ จ ์ƒํ‘œ์˜ ๊ถŒ๋ฆฌ๋Š” ๊ฐ ๊ถŒ๋ฆฌ์ž์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.