kakao-docs-mcp
by TanTenTin
README.md
# kakao-docs-mcp
카카오 개발자([developers.kakao.com](https://developers.kakao.com)) REST API 문서를 검색하고 읽을 수 있는
**검색 REST API**와 **MCP(Model Context Protocol) 서버**입니다.
카카오는 REST API 문서를 `llms.txt`나 공식 MCP 형태로 제공하지 않습니다. 이 프로젝트는 그 공백을 메우는
**공익 오픈소스 프로젝트**입니다.
- **그냥 검색만 쓰고 싶다** → [1. 호스팅된 공개 서비스 사용하기](#1-호스팅된-공개-서비스-사용하기) (설치 불필요)
- **Claude에서 카카오 문서를 검색하게 하고 싶다** → [2. Claude에 MCP 연결하기](#2-claude에-mcp-연결하기)
- **내 서버/로컬에서 직접 돌리고 싶다** → [3. 직접 실행 / 셀프호스트](#3-직접-실행--셀프호스트)
> 문서 출처: [카카오 개발자](https://developers.kakao.com) — 문서 저작권은 **카카오**에 있습니다.
> 이 프로젝트는 문서 본문을 통째로 복제·재배포하지 않습니다. 자세한 내용은
> [저작권 관련 설계](#저작권-관련-설계)를 참고하세요.
---
## 한눈에 보기
대부분의 사용자는 아무것도 설치할 필요가 없습니다. 공개 엔드포인트에서 **키 1개를 발급**받아 REST API와 MCP를 모두 사용합니다.
```
┌──────────────┐ ① POST /kakao-docs/keys (인증 불필요)
│ 나 / 내 앱 │ ───────────────────────────────────→ 키 발급 (kd_xxxx)
└──────┬───────┘
│ ② Authorization: Bearer kd_xxxx
│
├─────────────→ https://api.tan-kim.com/kakao-docs (REST 검색/조회)
│
└─────────────→ https://mcp.tan-kim.com/kakao-docs (Claude MCP)
```
| 용도 | 엔드포인트 | 인증 |
|------|-----------|------|
| 키 발급(셀프) | `POST https://api.tan-kim.com/kakao-docs/keys` | 불필요 |
| 키워드 검색 | `GET https://api.tan-kim.com/kakao-docs/search?q=...` | `Bearer <키>` |
| 문서 본문 조회 | `GET https://api.tan-kim.com/kakao-docs/page/<경로>` | `Bearer <키>` |
| 카테고리 목록 | `GET https://api.tan-kim.com/kakao-docs/categories` | `Bearer <키>` |
| 헬스체크 | `GET https://api.tan-kim.com/kakao-docs/health` | 불필요 |
| MCP (Claude) | `https://mcp.tan-kim.com/kakao-docs` | `Bearer <키>` |
> ⚠️ `api.tan-kim.com` / `mcp.tan-kim.com`은 이 프로젝트의 레퍼런스 운영 도메인입니다.
> 직접 배포한 경우 자신의 도메인으로 바꿔 읽으세요. (아직 배포 전이라면 [3. 직접 실행](#3-직접-실행--셀프호스트) 또는
> [docs/DEPLOY.md](docs/DEPLOY.md) 참고)
---
## 왜 이 프로젝트가 필요한가
카카오 개발자 문서는:
- `llms.txt` / `llms-full.txt`를 제공하지 않습니다 (`developers.kakao.com/llms.txt` → 404).
- 공식 MCP는 [PlayMCP](https://playmcp.kakao.com)가 있지만, 이는 **톡캘린더/카카오맵/기프트/멜론 등
실제 서비스 기능**을 MCP 도구로 노출하는 것이지 **REST API 개발 문서 자체**를 위한 것이 아닙니다.
그래서 LLM/에이전트가 카카오 REST API를 정확히 참고하려면 매번 웹 검색 → 페이지 열람 → 파싱을 반복해야 합니다.
이 프로젝트는 그 과정을 검색 + 실시간 조회 툴 2개로 대체합니다.
---
## 1. 호스팅된 공개 서비스 사용하기
### 1-1. API 키 발급 (셀프 발급)
인증 없이 누구나 키를 발급받을 수 있습니다. 발급된 키 1개로 REST와 MCP를 모두 사용합니다.
```bash
curl -X POST https://api.tan-kim.com/kakao-docs/keys \
-H "Content-Type: application/json" \
-d '{"name":"내-에이전트"}'
```
응답 (원본 키는 **이때 한 번만** 표시됩니다 — 서버는 해시만 저장하므로 분실 시 재발급):
```json
{
"id": 12,
"name": "내-에이전트",
"rate_per_min": 30,
"api_key": "kd_a1B2c3D4...",
"note": "api_key는 지금만 표시됩니다. 안전한 곳에 보관하세요(서버는 해시만 저장)."
}
```
- 셀프 발급 키의 기본 한도는 **분당 30요청**입니다.
- 남용 방지를 위해 **IP당 발급 횟수에 시간당 제한**이 있습니다.
### 1-2. 키워드 검색 — `GET /search`
```bash
curl "https://api.tan-kim.com/kakao-docs/search?q=토큰갱신&limit=5" \
-H "Authorization: Bearer kd_a1B2c3D4..."
```
| 쿼리 파라미터 | 필수 | 기본값 | 설명 |
|--------------|------|--------|------|
| `q` | ✅ | — | 검색 키워드 |
| `limit` | ❌ | 5 | 결과 수 (최대 20) |
| `category` | ❌ | 전체 | 카테고리 슬러그 필터 (예: `kakaologin`) |
응답 (제목/카테고리/짧은 발췌만 포함 — 본문 전체는 `/page`로 조회):
```json
{
"results": [
{ "path": "kakaologin/common", "title": "카카오 로그인 > 이해하기", "category": "카카오 로그인", "snippet": "...", "score": 12.4 }
],
"total": 1
}
```
### 1-3. 문서 본문 조회 — `GET /page/<경로>`
검색 결과의 `path`를 그대로 사용합니다. **본문은 매 요청마다 developers.kakao.com에서 실시간으로 가져와
마크다운으로 변환**합니다(카카오 서버 부하를 줄이기 위해 최근 조회분은 짧게 캐시합니다).
```bash
curl "https://api.tan-kim.com/kakao-docs/page/kakaologin/common" \
-H "Authorization: Bearer kd_a1B2c3D4..."
```
```json
{
"path": "kakaologin/common",
"title": "카카오 로그인 > 이해하기",
"sourceUrl": "https://developers.kakao.com/docs/ko/kakaologin/common",
"markdown": "> 출처: ...\n\n# 이해하기\n\n...",
"fetchedAt": "2026-07-17T12:00:00.000Z",
"found": true
}
```
### 1-4. 카테고리 목록 — `GET /categories`
```bash
curl "https://api.tan-kim.com/kakao-docs/categories" -H "Authorization: Bearer kd_a1B2c3D4..."
```
---
## 2. Claude에 MCP 연결하기
`.mcp.json` 또는 Claude 설정에 발급받은 키를 넣습니다.
```json
{
"mcpServers": {
"kakao-docs": {
"type": "http",
"url": "https://mcp.tan-kim.com/kakao-docs",
"headers": { "Authorization": "Bearer <발급받은 API키>" }
}
}
}
```
### 제공 툴
| 툴 | 설명 |
|----|------|
| `search_kakao_docs` | 키워드로 카카오 REST API 문서를 검색 (제목/카테고리/짧은 발췌 반환) |
| `get_kakao_doc_page` | 검색 결과의 `path`로 문서 본문 전체를 실시간 조회 (마크다운) |
| `list_kakao_doc_categories` | 카테고리(슬러그, 한글 이름) 목록 조회 |
일반적인 사용 흐름: `search_kakao_docs`로 후보를 찾고 → `get_kakao_doc_page`로 필요한 문서의 본문을 읽습니다.
---
## 3. 직접 실행 / 셀프호스트
### 3-1. 로컬 개발
```powershell
# 의존성 설치
npm install
# 문서 색인 (사이트맵 크롤 → 제목/헤딩/스니펫만 SQLite에 저장, 본문은 저장 안 함)
npm run index
# REST API 서버 (기본: SQLite, API 키 비활성 — 로컬 테스트용)
npm run api
# MCP 서버 (stdio, Claude Code/Desktop이 직접 프로세스로 실행)
npm run mcp
```
`.env.example`을 `.env`로 복사해 필요에 맞게 값을 조정합니다.
### 3-2. Claude Code/Desktop에 로컬 MCP 등록 (stdio)
```json
{
"mcpServers": {
"kakao-docs": {
"command": "npx",
"args": ["tsx", "/절대경로/kakao-docs-mcp/src/mcp/server.ts"]
}
}
}
```
### 3-3. 운영 배포 (Docker + Oracle Cloud)
[docs/DEPLOY.md](docs/DEPLOY.md)를 참고하세요. API 키/사용 로그는 MySQL(RDS)에, 검색 인덱스는
서버의 SQLite 볼륨에 둡니다. `namuwiki-search-mcp`와 동일한 VM에 나란히 배포하도록 설계했습니다
(포트 3002/3012 사용, 3000/3001/3003/3005/3011과 충돌 없음).
---
## 저작권 관련 설계
카카오 개발자 문서의 저작권은 **카카오**에 있습니다. 이 프로젝트는 그 저작권을 존중하기 위해 다음과 같이 설계했습니다.
- **검색 인덱스에는 본문 전체를 저장하지 않습니다.** 제목/헤딩/200자 이내 발췌만 SQLite에 색인합니다.
- **본문은 항상 실시간 조회입니다.** `get_kakao_doc_page` / `GET /page/*` 호출 시마다
developers.kakao.com에서 그때그때 가져와 반환하며, 디스크에 영속 저장하지 않습니다
(반복 요청 부하 완화를 위한 짧은 인메모리 캐시만 사용, 기본 15분).
- 응답에는 항상 출처 URL과 저작권 고지를 포함합니다.
- 크롤러는 robots.txt를 준수하고(`/docs/ko/*`는 허용됨), 식별 가능한 User-Agent와
요청 간 지연을 사용해 카카오 서버에 부담을 주지 않습니다.
---
## 라이선스
이 저장소의 코드는 [MIT License](LICENSE)로 배포됩니다. 카카오 문서 콘텐츠 자체는 카카오의 저작물이며
이 라이선스의 대상이 아닙니다.
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues