Skip to main content
Glama
rubatoyd

io.github.rubatoyd/kakao-book-mcp

by rubatoyd
README.md
# kakao-book-mcp

<!-- mcp-name: io.github.rubatoyd/kakao-book-mcp -->

[![CI](https://github.com/rubatoyd/kakao-book-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/rubatoyd/kakao-book-mcp/actions/workflows/ci.yml)
[![Release](https://img.shields.io/github/v/release/rubatoyd/kakao-book-mcp?color=blue)](https://github.com/rubatoyd/kakao-book-mcp/releases/latest)
[![Downloads](https://img.shields.io/github/downloads/rubatoyd/kakao-book-mcp/total?label=downloads&color=blue)](https://github.com/rubatoyd/kakao-book-mcp/releases)

<!-- usage:start -->
> ๐Ÿ“Š **์‚ฌ์šฉ๋Ÿ‰ ํ†ต๊ณ„** โ€” ์ตœ๊ทผ 14์ผ ์กฐํšŒ **0**ํšŒ(์ˆœ 0) ยท ํด๋ก  **0**ํšŒ(์ˆœ 0) ยท ๋ฆด๋ฆฌ์Šค ๋‹ค์šด๋กœ๋“œ **1**๊ฑด
>
> ![์ผ๋ณ„ ํด๋ก ยท์กฐํšŒ ์ถ”์ด](docs/usage.svg)
>
> <sub>2026-09-19 ์ž๋™ ์ง‘๊ณ„๋จ ยท ์ „์ฒด ์ด๋ ฅ [`docs/usage.csv`](docs/usage.csv). GitHub ํŠธ๋ž˜ํ”ฝ API 14์ผ ์ฐฝ์„ ์˜๊ตฌ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.</sub>
<!-- usage:end -->

**์นด์นด์˜ค Daum ์ฑ… ๊ฒ€์ƒ‰(Daum Book Search)** Open API๋ฅผ Claude, Cursor ๋“ฑ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ”๋กœ ์“ฐ๋Š” **MCP ์„œ๋ฒ„ + CLI ๋„๊ตฌ**.  
๋„์„œ๋ช…ยท์ €์žยท์ถœํŒ์‚ฌยทISBN ๊ฒ€์ƒ‰, ์ƒ์„ธ ์„œ์ง€ ๋ฐ ๊ฐ€๊ฒฉ/ํ• ์ธ์œจ ์ •๋ณด ์ˆ˜์ง‘, ๋‹ค์ค‘ ํ‚ค์›Œ๋“œ ์ผ๊ด„ ์ˆ˜์ง‘ ํ›„ `xlsx`ยท`csv`ยท`json`ยท`sqlite` ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

> ๐Ÿ“š **์ž๋งค ํ”„๋กœ์ ํŠธ**: [kci-openapi-mcp](https://github.com/rubatoyd/KCI_openAPI) (KCI ํ•™์ˆ ๋…ผ๋ฌธยท์ธ์šฉ์ง€์ˆ˜) ยท [scienceON-mcp](https://github.com/rubatoyd/scienceON-mcp) (KISTI ๊ณผํ•™๊ธฐ์ˆ  ๋ฌธํ—Œ) ยท [nl-openapi-mcp](https://github.com/rubatoyd/nl-openapi-mcp) (๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€ ๊ตญ๊ฐ€์„œ์ง€)

---

## ์ฃผ์š” ๊ธฐ๋Šฅ

1. **๋„์„œ ๊ฒ€์ƒ‰ & ISBN ์กฐํšŒ**:
   - ์ œ๋ชฉ, ์ €์ž/์—ญ์ž, ์ถœํŒ์‚ฌ, ISBN ํ•„๋“œ ํƒ€๊ฒŸํŒ… ๊ฒ€์ƒ‰
   - 10์ž๋ฆฌ / 13์ž๋ฆฌ ISBN ์ž๋™ ์ •๊ทœํ™” ๋ฐ ์กฐํšŒ
2. **์กฐ์šฉํ•œ ์ ˆ๋‹จ(Quiet Truncation) ๋ฐฉ์ง€**:
   - ์นด์นด์˜ค ์ฑ… ๊ฒ€์ƒ‰ API๋Š” ์ตœ๋Œ€ 50ํŽ˜์ด์ง€ * 50๊ฑด = **2,500๊ฑด**์˜ ํŽ˜์ด์ง• ์ƒํ•œ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
   - ์‘๋‹ต์— `total_count`, `pageable_count`, `is_end`, `truncated`, `cap_hit`์„ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜์—ฌ ๋ถ€๋ถ„ ์ˆ˜์ง‘์„ ์ „์ˆ˜๋กœ ์˜ค์ธํ•˜์ง€ ์•Š๋„๋ก ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
3. **๋Œ€๋Ÿ‰ ์ˆ˜์ง‘ & ๋‹ค์ค‘ ํฌ๋งท Export**:
   - ๋ณต์ˆ˜ ๊ฒ€์ƒ‰์–ด์— ๋Œ€ํ•œ ์ž๋™ ํŽ˜์ด์ง• ๋ฐ ์ค‘๋ณต ์ œ๊ฑฐ(ISBN ๊ธฐ์ค€)
   - ์ถœํŒ์—ฐ๋„(`year_from`, `year_to`), ๊ฐ€๊ฒฉ(`min_price`, `max_price`), ํŒ๋งค์ƒํƒœ(`status`), ๋ณธ๋ฌธ ํ‚ค์›Œ๋“œ(`contains`) ํด๋ผ์ด์–ธํŠธ ํ•„ํ„ฐ๋ง
   - `xlsx` (์Šคํƒ€์ผ ์„œ์‹ ์ ์šฉ), `csv` (ํ•œ๊ธ€ Excel ํ˜ธํ™˜ UTF-8 BOM), `json` (์›๋ณธ raw ํฌํ•จ), `sqlite` ๋™์‹œ ์ €์žฅ
4. **๊ต์œก๋ง/์‚ฌ๋‚ด๋ง SSL ์ธํ„ฐ์…‰์…˜ ๋Œ€์‘**:
   - `truststore` ๋‚ด์žฅ์œผ๋กœ ๋ณ„๋„ ์ธ์ฆ์„œ ๋“ฑ๋ก ์—†์ด OS ์‹ ๋ขฐ ์ €์žฅ์†Œ ์ž๋™ ์—ฐ๋™

---

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

| ๋„๊ตฌ๋ช… | ์„ค๋ช… | ์ฃผ์š” ์ธ์ž |
| :--- | :--- | :--- |
| **`kakao_book_status`** | ์ธ์ฆํ‚ค ์œ ํšจ์„ฑ ์ ๊ฒ€ ๋ฐ ์นด์นด์˜ค API 1ํšŒ ํ”„๋กœ๋ธŒ ํ˜ธ์ถœ | ์—†์Œ |
| **`kakao_book_search`** | ํ‚ค์›Œ๋“œ ๋„์„œ ๊ฒ€์ƒ‰ | `query`, `target` (`title`\|`isbn`\|`publisher`\|`person`), `sort` (`accuracy`\|`latest`), `page`, `size` |
| **`kakao_book_isbn`** | ISBN ์ „์šฉ ์ƒ์„ธ ์กฐํšŒ (๋ณต์ˆ˜ ISBN ์ง€์›) | `isbn` (์‰ผํ‘œ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ) |
| **`kakao_book_collect`** | ๋‹ค์ค‘ ๊ฒ€์ƒ‰์–ด ๋Œ€๋Ÿ‰ ์ˆ˜์ง‘ ๋ฐ ํŒŒ์ผ ์ €์žฅ | `terms`, `target`, `sort`, `max_records`, `year_from`, `year_to`, `min_price`, `max_price`, `status`, `contains`, `formats`, `out_dir`, `name` |

---

## ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰ ๋ฐ ์„ค์ • (1๋ถ„ ์†Œ์š”, ๋ฌด๋ฃŒ)

์นด์นด์˜ค Daum ์ฑ… ๊ฒ€์ƒ‰ API๋Š” **๋ฌด๋ฃŒ์ด๋ฉฐ ๋ณ„๋„์˜ ์Šน์ธ ์‹ฌ์‚ฌ ์—†์ด ์ฆ‰์‹œ ๋ฐœ๊ธ‰**๋ฉ๋‹ˆ๋‹ค (์ผ์ผ ๊ธฐ๋ณธ 30,000๊ฑด ์ฟผํ„ฐ ์ œ๊ณต).

### 1. REST API ํ‚ค ๋ฐœ๊ธ‰ ๋ฐฉ๋ฒ•
1. [์นด์นด์˜ค ๋””๋ฒจ๋กœํผ์Šค (developers.kakao.com)](https://developers.kakao.com) ์ ‘์† ๋ฐ ์นด์นด์˜ค ๊ณ„์ • ๋กœ๊ทธ์ธ
2. ์ƒ๋‹จ ๋ฉ”๋‰ด์˜ **[๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜]** โžก๏ธ **[์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถ”๊ฐ€ํ•˜๊ธฐ]** ํด๋ฆญ
   * *์•ฑ ์ด๋ฆ„*: ์ž„์˜ ์ž…๋ ฅ (์˜ˆ: `kakao-book-mcp`)
   * *์‚ฌ์—…์ž๋ช…*: ์ž„์˜ ์ž…๋ ฅ (์˜ˆ: `๊ฐœ์ธ` ๋˜๋Š” ๋ณธ์ธ ์ด๋ฆ„)
3. ์ƒ์„ฑ๋œ ์•ฑ ํด๋ฆญ โžก๏ธ ์ขŒ์ธก **[์•ฑ ํ‚ค]** (๋˜๋Š” [์•ฑ ์„ค์ •] > [์š”์•ฝ ์ •๋ณด])์—์„œ **`REST API ํ‚ค`** (32์ž๋ฆฌ 16์ง„์ˆ˜) ๋ณต์‚ฌ

### 2. ํ™˜๊ฒฝ๋ณ„ ํ‚ค ๋“ฑ๋ก ๋ฐฉ๋ฒ•
๋ณต์‚ฌํ•œ REST API ํ‚ค๋ฅผ ์‚ฌ์šฉ ํ™˜๊ฒฝ์— ๋งž์ถฐ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค:

| ์‚ฌ์šฉ ํ™˜๊ฒฝ | ์„ค์ • ์œ„์น˜ | ์„ค์ • ๋ฐฉ๋ฒ• |
| :--- | :--- | :--- |
| **Claude Desktop (`.mcpb`)** | ํ™•์žฅ ์„ค์น˜ ์‹œ ํŒ์—…์ฐฝ | `.mcpb` ํŒŒ์ผ์„ Claude Desktop์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ํ›„ ๋‚˜ํƒ€๋‚˜๋Š” ์ž…๋ ฅ์ฐฝ์— ํ‚ค ๋ถ™์—ฌ๋„ฃ๊ธฐ |
| **Claude Code** | `claude mcp add` | `--env KAKAO_API_KEY=YOUR_REST_API_KEY` ์˜ต์…˜์œผ๋กœ ์ „๋‹ฌ |
| **Antigravity / Gemini CLI** | `mcp_config.json` | `env.KAKAO_API_KEY` ํ•ญ๋ชฉ์— ์„ค์ • |
| **CLI / ํ„ฐ๋ฏธ๋„ ์ง์ ‘ ์‹คํ–‰** | OS ํ™˜๊ฒฝ๋ณ€์ˆ˜ / `.env` | Windows ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ๋ก ๋˜๋Š” ์ž‘์—… ํด๋”์˜ `.env` ํŒŒ์ผ์— `KAKAO_API_KEY=...` ์ž‘์„ฑ |

---

## ์„ค์น˜ ๋ฐ MCP ๋“ฑ๋ก

### 1. Claude Desktop

`%APPDATA%/Claude/claude_desktop_config.json` (Windows) ๋˜๋Š” `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):

```json
{
  "mcpServers": {
    "kakao-book": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/rubatoyd/kakao-book-mcp", "kakao-book-mcp"],
      "env": {
        "KAKAO_API_KEY": "YOUR_KAKAO_REST_API_KEY",
        "KAKAO_OS_TRUST": "1"
      }
    }
  }
}
```

### 2. Claude Code

```bash
claude mcp add kakao-book --env KAKAO_API_KEY=YOUR_REST_API_KEY -- uvx --from git+https://github.com/rubatoyd/kakao-book-mcp kakao-book-mcp
```

### 3. Gemini CLI / Antigravity

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `.agents/mcp_config.json` ๋˜๋Š” ์ „์—ญ `~/.gemini/config/mcp_config.json`:

```json
{
  "mcpServers": {
    "kakao-book": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/rubatoyd/kakao-book-mcp", "kakao-book-mcp"],
      "env": {
        "KAKAO_API_KEY": "YOUR_KAKAO_REST_API_KEY",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}
```

### 4. Cursor / Windsurf / Cline

- **Command**: `uvx`
- **Args**: `["--from", "git+https://github.com/rubatoyd/kakao-book-mcp", "kakao-book-mcp"]`
- **Env**: `KAKAO_API_KEY=...`

---

## CLI ์‚ฌ์šฉ๋ฒ•

```bash
# 1. ์ƒํƒœ ๋ฐ ์—ฐ๊ฒฐ ์ ๊ฒ€
uvx --from git+https://github.com/rubatoyd/kakao-book-mcp kbook status

# 2. ๋„์„œ ๊ฒ€์ƒ‰
uvx --from git+https://github.com/rubatoyd/kakao-book-mcp kbook search "์ธ๊ณต์ง€๋Šฅ" --target title --size 5

# 3. ISBN ์กฐํšŒ
uvx --from git+https://github.com/rubatoyd/kakao-book-mcp kbook isbn 9788996991342

# 4. ๋Œ€๋Ÿ‰ ์ˆ˜์ง‘ ๋ฐ ์—‘์…€/CSV/JSON ์ €์žฅ
uvx --from git+https://github.com/rubatoyd/kakao-book-mcp kbook collect --terms "๋”ฅ๋Ÿฌ๋‹" "๋จธ์‹ ๋Ÿฌ๋‹" --max 100 --format xlsx csv json --out ./output
```

---

## ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐ ์‹คํ–‰

ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”(OneDrive ๋“ฑ)์™€์˜ ์ถฉ๋Œ ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒํ™˜๊ฒฝ์€ ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€(`C:\Users\rubat\.venvs\kakao-book`)์— ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

```bash
# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜
uv venv C:\Users\rubat\.venvs\kakao-book
uv pip install --python C:\Users\rubat\.venvs\kakao-book -e . pytest

# ํ…Œ์ŠคํŠธ ์‹คํ–‰
C:\Users\rubat\.venvs\kakao-book\Scripts\pytest.exe

# CLI ์‹คํ–‰
C:\Users\rubat\.venvs\kakao-book\Scripts\kbook.exe status
```

---

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

MIT License.

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation4/5

The tools are mostly distinct: status checks connectivity, search does general queries, isbn is a specialized lookup by ISBN, and collect is a batch operation. However, search with target='isbn' overlaps with the isbn tool, which could cause confusion about which to use.

Naming Consistency5/5

All tools follow a consistent kakao_book_<action> snake_case pattern with clear action words (status, search, isbn, collect). The naming is predictable and uniform across the set.

Tool Count5/5

With 4 tools, the server is well-scoped for a book search API wrapper. It covers a health check, basic search, ISBN lookup, and batch collection without unnecessary bloat.

Completeness5/5

The tool surface covers the core read-only operations for a search API: single search, ISBN lookup, and bulk collection with filters and export. No obvious lifecycle operations are missing since the domain is read-only.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive