io.github.rubatoyd/kakao-book-mcp
This server lets MCP clients and CLI users search Kakao/Daum books, retrieve ISBN details, and bulk-collect/export book data to files.
Check connection/API key with
kakao_book_status(probe call to Kakao).Search books with
kakao_book_search: query by title, ISBN, publisher, or person; sort by accuracy or latest; paginate up to 50 pages of 50 results (2,500 cap) and see truncation/cap-hit warnings.Look up books by ISBN with
kakao_book_isbn: supports one or comma-separated ISBNs, both 10- and 13-digit forms.Bulk-collect and export with
kakao_book_collect: multiple search terms, filters (year, price, status, required keywords), ISBN-based deduplication, and saving toxlsx,csv,json, and/orsqlitefiles.Works as an MCP server for Claude Desktop, Claude Code, Gemini CLI, Antigravity, Cursor, Windsurf, and Cline, and also provides CLI commands (
kbook status/search/isbn/collect).Handles SSL interception in corporate/educational networks via OS trust store integration.
Provides tools for searching and collecting book data from the Kakao Daum Book Search API, including title/author/publisher/ISBN queries, ISBN normalization, bulk collection with duplicate removal and filtering, and export to XLSX, CSV, JSON, and SQLite.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@io.github.rubatoyd/kakao-book-mcpSearch for books by Yuval Noah Harari and export the results to CSV"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kakao-book-mcp
๐ ์ฌ์ฉ๋ ํต๊ณ โ ์ต๊ทผ 14์ผ ์กฐํ 0ํ(์ 0) ยท ํด๋ก 0ํ(์ 0) ยท ๋ฆด๋ฆฌ์ค ๋ค์ด๋ก๋ 1๊ฑด
2026-09-18 ์๋ ์ง๊ณ๋จ ยท ์ ์ฒด ์ด๋ ฅ
docs/usage.csv. GitHub ํธ๋ํฝ API 14์ผ ์ฐฝ์ ์๊ตฌ ๋ณด์กดํฉ๋๋ค.
์นด์นด์ค Daum ์ฑ
๊ฒ์(Daum Book Search) Open API๋ฅผ Claude, Cursor ๋ฑ MCP ํด๋ผ์ด์ธํธ์์ ๋ฐ๋ก ์ฐ๋ MCP ์๋ฒ + CLI ๋๊ตฌ.
๋์๋ช
ยท์ ์ยท์ถํ์ฌยทISBN ๊ฒ์, ์์ธ ์์ง ๋ฐ ๊ฐ๊ฒฉ/ํ ์ธ์จ ์ ๋ณด ์์ง, ๋ค์ค ํค์๋ ์ผ๊ด ์์ง ํ xlsxยทcsvยทjsonยทsqlite ํ์ผ๋ก ๋ด๋ณด๋
๋๋ค.
๐ ์๋งค ํ๋ก์ ํธ: kci-openapi-mcp (KCI ํ์ ๋ ผ๋ฌธยท์ธ์ฉ์ง์) ยท scienceON-mcp (KISTI ๊ณผํ๊ธฐ์ ๋ฌธํ) ยท nl-openapi-mcp (๊ตญ๋ฆฝ์ค์๋์๊ด ๊ตญ๊ฐ์์ง)
์ฃผ์ ๊ธฐ๋ฅ
๋์ ๊ฒ์ & ISBN ์กฐํ:
์ ๋ชฉ, ์ ์/์ญ์, ์ถํ์ฌ, ISBN ํ๋ ํ๊ฒํ ๊ฒ์
10์๋ฆฌ / 13์๋ฆฌ ISBN ์๋ ์ ๊ทํ ๋ฐ ์กฐํ
์กฐ์ฉํ ์ ๋จ(Quiet Truncation) ๋ฐฉ์ง:
์นด์นด์ค ์ฑ ๊ฒ์ API๋ ์ต๋ 50ํ์ด์ง * 50๊ฑด = 2,500๊ฑด์ ํ์ด์ง ์ํ์ด ์กด์ฌํฉ๋๋ค.
์๋ต์
total_count,pageable_count,is_end,truncated,cap_hit์ ํจ๊ป ์ ๋ฌํ์ฌ ๋ถ๋ถ ์์ง์ ์ ์๋ก ์ค์ธํ์ง ์๋๋ก ์๋ดํฉ๋๋ค.
๋๋ ์์ง & ๋ค์ค ํฌ๋งท Export:
๋ณต์ ๊ฒ์์ด์ ๋ํ ์๋ ํ์ด์ง ๋ฐ ์ค๋ณต ์ ๊ฑฐ(ISBN ๊ธฐ์ค)
์ถํ์ฐ๋(
year_from,year_to), ๊ฐ๊ฒฉ(min_price,max_price), ํ๋งค์ํ(status), ๋ณธ๋ฌธ ํค์๋(contains) ํด๋ผ์ด์ธํธ ํํฐ๋งxlsx(์คํ์ผ ์์ ์ ์ฉ),csv(ํ๊ธ Excel ํธํ UTF-8 BOM),json(์๋ณธ raw ํฌํจ),sqlite๋์ ์ ์ฅ
๊ต์ก๋ง/์ฌ๋ด๋ง SSL ์ธํฐ์ ์ ๋์:
truststore๋ด์ฅ์ผ๋ก ๋ณ๋ ์ธ์ฆ์ ๋ฑ๋ก ์์ด OS ์ ๋ขฐ ์ ์ฅ์ ์๋ ์ฐ๋
Related MCP server: scienceon-mcp
๋๊ตฌ ๋ชฉ๋ก (MCP Tools)
๋๊ตฌ๋ช | ์ค๋ช | ์ฃผ์ ์ธ์ |
| ์ธ์ฆํค ์ ํจ์ฑ ์ ๊ฒ ๋ฐ ์นด์นด์ค API 1ํ ํ๋ก๋ธ ํธ์ถ | ์์ |
| ํค์๋ ๋์ ๊ฒ์ |
|
| ISBN ์ ์ฉ ์์ธ ์กฐํ (๋ณต์ ISBN ์ง์) |
|
| ๋ค์ค ๊ฒ์์ด ๋๋ ์์ง ๋ฐ ํ์ผ ์ ์ฅ |
|
์ธ์ฆํค ๋ฐ๊ธ ๋ฐ ์ค์ (1๋ถ ์์, ๋ฌด๋ฃ)
์นด์นด์ค Daum ์ฑ ๊ฒ์ API๋ ๋ฌด๋ฃ์ด๋ฉฐ ๋ณ๋์ ์น์ธ ์ฌ์ฌ ์์ด ์ฆ์ ๋ฐ๊ธ๋ฉ๋๋ค (์ผ์ผ ๊ธฐ๋ณธ 30,000๊ฑด ์ฟผํฐ ์ ๊ณต).
1. REST API ํค ๋ฐ๊ธ ๋ฐฉ๋ฒ
์นด์นด์ค ๋๋ฒจ๋กํผ์ค (developers.kakao.com) ์ ์ ๋ฐ ์นด์นด์ค ๊ณ์ ๋ก๊ทธ์ธ
์๋จ ๋ฉ๋ด์ [๋ด ์ ํ๋ฆฌ์ผ์ด์ ] โก๏ธ [์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐํ๊ธฐ] ํด๋ฆญ
์ฑ ์ด๋ฆ: ์์ ์ ๋ ฅ (์:
kakao-book-mcp)์ฌ์ ์๋ช : ์์ ์ ๋ ฅ (์:
๊ฐ์ธ๋๋ ๋ณธ์ธ ์ด๋ฆ)
์์ฑ๋ ์ฑ ํด๋ฆญ โก๏ธ ์ข์ธก [์ฑ ํค] (๋๋ [์ฑ ์ค์ ] > [์์ฝ ์ ๋ณด])์์
REST API ํค(32์๋ฆฌ 16์ง์) ๋ณต์ฌ
2. ํ๊ฒฝ๋ณ ํค ๋ฑ๋ก ๋ฐฉ๋ฒ
๋ณต์ฌํ REST API ํค๋ฅผ ์ฌ์ฉ ํ๊ฒฝ์ ๋ง์ถฐ ์ค์ ํฉ๋๋ค:
์ฌ์ฉ ํ๊ฒฝ | ์ค์ ์์น | ์ค์ ๋ฐฉ๋ฒ |
Claude Desktop ( | ํ์ฅ ์ค์น ์ ํ์ ์ฐฝ |
|
Claude Code |
|
|
Antigravity / Gemini CLI |
|
|
CLI / ํฐ๋ฏธ๋ ์ง์ ์คํ | OS ํ๊ฒฝ๋ณ์ / | Windows ํ๊ฒฝ๋ณ์ ๋ฑ๋ก ๋๋ ์์
ํด๋์ |
์ค์น ๋ฐ MCP ๋ฑ๋ก
1. Claude Desktop
%APPDATA%/Claude/claude_desktop_config.json (Windows) ๋๋ ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"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
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-mcp3. Gemini CLI / Antigravity
ํ๋ก์ ํธ ๋ฃจํธ์ .agents/mcp_config.json ๋๋ ์ ์ญ ~/.gemini/config/mcp_config.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:
uvxArgs:
["--from", "git+https://github.com/rubatoyd/kakao-book-mcp", "kakao-book-mcp"]Env:
KAKAO_API_KEY=...
CLI ์ฌ์ฉ๋ฒ
# 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)์ ๊ตฌ์ฑ๋์์ต๋๋ค.
# ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํจํค์ง ์ค์น
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.
Available Tools
4 toolskakao_book_collectA
[๋์ ๋๋ ์์ง ๋ฐ ๋ด๋ณด๋ด๊ธฐ] ์ฌ๋ฌ ๊ฒ์์ด/ํํฐ ์กฐ๊ฑด์ผ๋ก ๋์๋ฅผ ์๋ ํ์ด์ง ์์งํ๊ณ ์ค๋ณต ์ ๊ฑฐ ํ ๋ก์ปฌ ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
terms: ๊ฒ์์ด ๋จ์ผ ๋ฌธ์์ด ๋๋ ๋ฌธ์์ด ๋ฆฌ์คํธ (์: ['์ธ๊ณต์ง๋ฅ', '๋จธ์ ๋ฌ๋']).
target: ๊ฒ์ ๋์ ํ๋ (title, isbn, publisher, person, ๊ธฐ๋ณธ๊ฐ: ์ ์ฒด).
sort: ์ ๋ ฌ ๋ฐฉ์ (accuracy, latest).
max_records: ๊ฒ์์ด๋น ์ต๋ ์์ง ๊ฑด์ (๊ธฐ๋ณธ 50, ์ต๋ 2500).
year_from / year_to: ์ถํ์ฐ๋ ํํฐ (YYYY ํ์, ํด๋ผ์ด์ธํธ ํ์ฒ๋ฆฌ).
min_price / max_price: ๊ฐ๊ฒฉ ๋ฒ์ ํํฐ (์ ๋จ์, ํด๋ผ์ด์ธํธ ํ์ฒ๋ฆฌ).
status: ๋์ ์ํ ํํฐ (์: '์ ์ํ๋งค', 'ํ์ ', '์ ํ').
contains: ๋ณธ๋ฌธ/์ ๋ชฉ/์ ์/์ถํ์ฌ์ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ ์ถ๊ฐ ํค์๋.
formats: ์ ์ฅํ ํ์ผ ํฌ๋งท ๋ฆฌ์คํธ (['xlsx', 'csv', 'json', 'sqlite'], ๊ธฐ๋ณธ๊ฐ: ['xlsx', 'csv', 'json']).
out_dir: ์ ์ฅํ ํด๋ ๊ฒฝ๋ก (๊ธฐ๋ณธ๊ฐ: ./output).
name: ํ์ผ ๊ธฐ๋ณธ ์ด๋ฆ (๊ธฐ๋ณธ๊ฐ: ์ฒซ ๊ฒ์์ด ๊ธฐ์ค ์๋ ์์ฑ).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| sort | No | accuracy | |
| terms | Yes | ||
| status | No | ||
| target | No | ||
| formats | No | ||
| out_dir | No | ||
| year_to | No | ||
| contains | No | ||
| max_price | No | ||
| min_price | No | ||
| year_from | No | ||
| max_records | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations (readOnlyHint=false, destructiveHint=false), the description discloses meaningful behaviors: auto-pagination, deduplication, local file persistence, per-term record caps (50 default, 2500 max), and crucially 'ํด๋ผ์ด์ธํธ ํ์ฒ๋ฆฌ' (client-side post-processing) for year and price filters, which tells the agent these filters are applied locally and results may be approximate. This is valuable context well beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary is front-loaded in a single compact Korean sentence, and the parameter section uses a terse 'param: description' format with no redundancy. It is long, but every line is warranted given 13 parameters and zero schema documentation. Minor deduction for the unbroken parameter wall, which could be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter, 1-required tool with no output schema, the description covers operation semantics, parameter meaning, output formats, and default output location thoroughly. The notable gap is the return contract: with no output schema, the agent is not told what the tool returns (success message, file paths, record counts) or how failures are reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by documenting all 13 parameters with types, allowed values (target, sort, formats), defaults, format constraints (YYYY for years, KRW for prices), and behavioral notes (client-side post-processing). Examples like ['์ธ๊ณต์ง๋ฅ', '๋จธ์ ๋ฌ๋'] for terms make correct invocation unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The summary line states a specific verb+resource+mechanism: automatically paginated collection of books across multiple search terms with deduplication, saved to local files. This 'bulk collect and export' profile is clearly distinguishable from the sibling tools (kakao_book_search, kakao_book_status, kakao_book_isbn), which are single-lookup operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the batch use case ('์ฌ๋ฌ ๊ฒ์์ด/ํํฐ ์กฐ๊ฑด' - multiple search terms/filters) and local-file export, which signals when bulk collection is appropriate. However, it never explicitly names alternatives or states when NOT to use it (e.g., a single ISBN lookup should go to kakao_book_isbn). The usage context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kakao_book_isbnARead-only
[ISBN ๋์ ์กฐํ] ISBN(10์๋ฆฌ ๋๋ 13์๋ฆฌ, ํ์ดํ ํฌํจ ๊ฐ๋ฅ)์ผ๋ก ๋์๋ฅผ ์กฐํํฉ๋๋ค.
isbn: ์กฐํํ ISBN ๋ฌธ์์ด (์: '9788996991342', '8996991341', ์ผํ๋ก ๋ณต์ ์ง์ ๊ฐ๋ฅ).
| Name | Required | Description | Default |
|---|---|---|---|
| isbn | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's '์กฐํ' (lookup) aligns with that. The description adds the behavioral detail that multiple ISBNs can be specified with commas, which is beyond the schema. It does not contradict annotations, but it doesn't disclose additional traits like return format or rate limits. Given the low complexity and existing read-only annotation, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the purpose and format, the second explains the parameter with examples. No wasted words, and the key information is front-loaded. It is appropriately sized for a single-parameter read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, read-only annotation, no output schema), the description covers the essential details: what it does, how to format the input, and multi-ISBN capability. It does not describe the return format, but for a lookup tool this is often intuitive. The absence of output schema means the agent might benefit from a hint about what fields are returned, but this is a minor gap for such a focused tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain the parameter. It does: it defines isbn as the ISBN string, gives two concrete examples, and notes that multiple ISBNs can be separated by commas. This fully compensates for the empty schema descriptions and exceeds the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: looking up books by ISBN. It specifies the ISBN format (10 or 13 digits, hyphens allowed) and is distinct from sibling tools like kakao_book_search, which likely searches by keyword. The verb '์กฐํ' (lookup) and resource '๋์' (book) are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you have an ISBN, use this tool) but does not explicitly state when to use it versus alternatives like search. No mention of exclusions or prerequisites beyond the ISBN format. An agent can infer the use case, but it lacks explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kakao_book_searchARead-only
[๋์ ๊ฒ์] ์นด์นด์ค Daum ์ฑ ๊ฒ์ API๋ก ๋์๋ฅผ ๊ฒ์ํฉ๋๋ค.
query: ๊ฒ์์ ์ํ๋ ์ง์์ด (ํ์).
target: ๊ฒ์ ํ๋ ์ ํ (title: ์ ๋ชฉ, isbn: ISBN, publisher: ์ถํ์ฌ, person: ์ธ๋ช
/์ ์/์ญ์). ๊ธฐ๋ณธ๊ฐ์ ์ ์ฒด.
sort: ์ ๋ ฌ ๋ฐฉ์ (accuracy: ์ ํ๋์, latest: ๋ฐ๊ฐ์ผ์). ๊ธฐ๋ณธ๊ฐ: accuracy.
page: ๊ฒฐ๊ณผ ํ์ด์ง ๋ฒํธ (1 ~ 50).
size: ํ ํ์ด์ง์ ๋ณด์ฌ์ง ๋ฌธ์ ์ (1 ~ 50, ๊ธฐ๋ณธ๊ฐ 10).
โ ๏ธ ์นด์นด์ค API๋ ์ต๋ 50ํ์ด์ง * 50๊ฑด = 2,500๊ฑด๊น์ง๋ง ํ์ด์ง์ ์ง์ํฉ๋๋ค.
total_count๊ฐ 2,500์ ๋์ผ๋ฉด cap_hit=true๋ก ๋ณด๊ณ ๋๋ฉฐ, ๊ฒ์์์ ์ธ๋ถํํด์ผ ํฉ๋๋ค.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| sort | No | accuracy | |
| query | Yes | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only/open-world. The description adds meaningful behavioral context beyond the annotations: the external Kakao API pagination cap of 2,500 records (50 pages ร 50 items) and the cap_hit=true signal when total_count exceeds that. It does not cover auth, rate limits, or failure modes, but for a read-only search tool this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses a clear, front-loaded summary followed by one line per parameter and a short warning block. Every sentence conveys necessary operational information, and there is no filler or repetition of the title/schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, no descriptions in the schema, and no output schema, the description covers all call parameters, defaults, ranges, and a notable API limitation (cap_hit). It stops short of describing the full return shape and does not discuss when to prefer sibling tools, but nothing blocks an agent from constructing a valid request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for parameters. It compensates well by explaining query, target (with allowed values and default all), sort (accuracy/latest with default), page range, size range/default, and the pagination cap. This adds meaning well beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens by identifying a concrete action and resource ('์นด์นด์ค Daum ์ฑ ๊ฒ์ API๋ก ๋์๋ฅผ ๊ฒ์ํฉ๋๋ค'), and the tool name/siblings make it distinct from status, ISBN, and collect operations. The verb '๊ฒ์' and the book domain leave no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear that this is the book-search operation and requires a query, but it never names sibling tools or states when to choose search over status/isbn/collect. Usage context is implied rather than explicitly routed, and there are no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kakao_book_statusARead-only
[์ฐ๊ฒฐ ์ ๊ฒ] ์ธ์ฆํค ์ค์ ์ฌ๋ถ ๋ฐ ์นด์นด์ค ์ฑ ๊ฒ์ API ์ค์ ์๋ณต 1ํ ํ ์คํธ.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that it tests a real round-trip and checks the authentication key, which provides context beyond annotations and is consistent with them. It does not disclose output format but for a status tool that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that communicates the tool's purpose concisely without any fluff. Every word is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with no output schema and clear siblings, the description is fully sufficient. It explains what the tool does and its scope; nothing is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description has no need to explain them. The schema coverage is 100% (empty properties). Baseline of 4 applies because no parameter documentation is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific diagnostic purpose: checking authentication key setup and performing a single round-trip to the Kakao book search API. It is distinct from sibling tools (search, isbn, collect) which all query data; this tool verifies connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'connection check' explicitly signals when to use it (to verify API connectivity and authentication), but it does not name alternatives or state exclusions. The context is clear enough for agents to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
kakao_book_collect - First observed
kakao_book_isbn - First observed
kakao_book_search - First observed
kakao_book_status
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Books MCP โ wraps Open Library API (free, no auth)
Gutendex MCP โ wraps Gutendex API for Project Gutenberg books (free, no auth)
BookBrainz MCP โ open book metadata (MetaBrainz / sister of MusicBrainz)
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying a curated book database using MCP tools to retrieve basic or detailed book information by ISBN or title, including batch lookups.1-
- AlicenseAqualityAmaintenanceEnables searching and collecting academic literature metadata from KISTI ScienceOn via Claude or CLI, supporting various document types and export formats.51MIT
- AlicenseNot gradedqualityCmaintenanceEnables real-time book search, detailed information, and bestsellers from the Aladin OpenAPI, integrated with Claude Desktop via MCP.4 npm3MIT
- AlicenseAqualityAmaintenanceSearch and harvest Korean academic literature and book bibliography metadata from the National Library of Korea Seoji OpenAPI via MCP or CLI.31MIT