SPINES MCP Server
OfficialSPINES MCP Server
Доступ к коллекциям книг, спискам чтения и данным книжной полки SPINES из ИИ-ассистентов через Model Context Protocol.
Возможности
Поиск книг по названию, автору или ISBN
Просмотр и фильтрация коллекций книг
Управление списками чтения (добавление и удаление книг)
Изучение персон и категорий
ИИ-подсказки для анализа полки и рекомендаций книг
Related MCP server: apple-books-mcp
Быстрый старт
Предварительные требования
Node.js 18+
Ключ API SPINES (получить здесь)
Установка
npm install -g @spines/mcp-serverКонфигурация
Claude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"spines": {
"command": "npx",
"args": ["-y", "@spines/mcp-server"],
"env": {
"SPINES_API_KEY": "gtspn_live_your_key_here"
}
}
}
}VS Code / Cursor
Добавьте в настройки MCP:
{
"spines": {
"command": "npx",
"args": ["-y", "@spines/mcp-server"],
"env": {
"SPINES_API_KEY": "gtspn_live_your_key_here"
}
}
}Переменные окружения
Переменная | Обязательная | По умолчанию | Описание |
| Да | - | Ваш ключ API |
| Нет |
| Базовый URL API |
| Нет |
| Подробное логирование в stderr |
Инструменты
Инструменты чтения
Инструмент | Описание |
| Поиск книг по названию, автору или ISBN |
| Получение полных сведений о конкретной книге |
| Получение коллекции книг со всеми её книгами |
| Список ваших коллекций с необязательными фильтрами |
| Список всех одобренных категорий книг |
| Получение сведений о персоне |
Инструменты записи
Инструмент | Описание |
| Добавить книгу в список чтения |
| Удалить книгу из списка чтения |
Подробности об инструментах
search_books
query: string - Search query (title, author, or ISBN)
limit?: number - Max results (1-50, default 10)get_book_details
book_id: string - The book's unique IDget_collection
collection_id: string - The collection's unique IDlist_collections
limit?: number - Max results (1-50, default 20)
cursor?: string - Pagination cursor
persona_id?: string - Filter by persona
category_id?: string - Filter by categoryadd_to_reading_list
book_id: string - The book to add
list_name?: string - List name (default: "want_to_read")remove_from_reading_list
entry_id: string - The reading list entry ID to removeРесурсы
URI | Описание |
| Коллекция книг с метаданными |
| Полные сведения о книге |
| Профиль персоны и коллекции |
| Списки чтения пользователя |
Подсказки
Подсказка | Описание |
| Анализ коллекции на темы и паттерны чтения |
| Получение рекомендаций на основе вашей библиотеки |
| Сравнение двух коллекций на сходство |
Устранение неполадок
Проблема | Решение |
"SPINES_API_KEY is required" | Установите переменную окружения в конфигурации вашего MCP-клиента |
Ошибки 401 | Проверьте, что ваш ключ API действителен и не истёк |
Ошибки 403 | Возможно, вашему ключу не хватает необходимых областей |
Ошибки 429 | Превышен лимит запросов — подождите и повторите |
Инструменты не появляются | Перезапустите ваш MCP-клиент |
Разработка
git clone https://github.com/GetSpines/mcp-server
cd mcp-server
npm install
npm run build
npm testЛицензия
MIT
Available Tools
11 toolsadd_to_reading_listCIdempotent
Add a book to a reading list
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | The book ID to add | |
| list_name | No | Reading list name (default: "want_to_read"). Use list_reading_lists to see available lists. | want_to_read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and idempotency profile is provided structurally. The description adds nothing beyond that, restating the write action with no detail on duplicate handling, list creation behavior, or permissions.
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 short sentence with no padding and the action front-loaded. It is efficient, though it is arguably too thin to earn much beyond being non-verbose.
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?
The tool is simple (2 params, 1 required) and the schema is complete, but there is no output schema and the description does not cover behavior on already-present books or list validation. Annotations carry the safety profile, so the gap is modest but real.
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 100% schema description coverage, the schema fully documents both book_id and list_name (including the default and the list_reading_lists cross-reference). The description contributes no parameter-level information, so the baseline of 3 applies.
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 states a specific verb ('Add') and resource ('a book to a reading list'), which is unambiguous on its own. It does not differentiate from siblings such as remove_from_reading_list or list_reading_lists, so an agent must still infer which direction of operation applies from the name alone.
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?
There is no when-to-use guidance, no mention of prerequisites (e.g., an existing list, authentication), and no exclusion of the sibling remove_from_reading_list. A pointer to list_reading_lists exists, but only in the input schema's parameter description, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_creditsARead-onlyIdempotent
Check your daily recognition credit balance
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds only the "daily" cadence hint; it says nothing about whether the balance resets, or what a zero/low balance implies for other tools.
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 with no filler. Nothing wasteful and the key noun phrase arrives immediately.
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 simple parameterless read tool with strong annotations, the definition is nearly adequate, but with no output schema the agent gets no signal about what comes back (a count, a limit, a reset timestamp) or what the credits gate. "Daily" is left uninterpreted.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate — baseline 4 applies. No parameter-related omissions exist.
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?
Specific verb ("Check") and resource ("daily recognition credit balance") make the tool's job unambiguous. It doesn't need to distinguish itself from the book-centric siblings because none of them touch credits, but it also never acknowledges them, so it stops short of a 5.
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?
Usage is only implied: an agent infers it should call this before or after recognition operations to verify quota. There is no explicit when-to-use trigger, no prerequisite, and no named alternative (e.g., which recognition tool consumes these credits).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_book_detailsCRead-onlyIdempotent
Get full details for a specific book
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | The book's unique ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond that — it does not say whether details are limited to the local collection, what 'full details' includes, or how missing/invalid IDs behave.
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 with no filler or redundancy. Its brevity is efficient, though it sits close to the edge of under-specification for a lookup 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?
For a one-parameter read tool with rich annotations and no output schema, the description is minimally sufficient to call the tool correctly. However, 'full details' is left undefined and there is no mention of the return shape or what happens when the ID is unknown, so it is adequate rather than complete.
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 100%, with book_id documented as 'The book's unique ID'. The description merely restates that a specific book is targeted, so the baseline of 3 applies — the schema carries the parameter meaning.
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?
States a specific verb ('Get') and resource ('full details for a specific book') with a clear scope (one book identified by ID). It is not a tautology, but it offers no differentiation from siblings like get_book_pairings or search_books, leaving the agent to infer the boundary.
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?
There is no guidance on when to use this tool versus search_books (to find a book) or get_book_pairings (related data). The only implied condition is that a book_id must be known, which is already enforced by the required parameter in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_book_pairingsARead-onlyIdempotent
Find books commonly co-shelved with a specific book (Shelfology)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 10) | |
| book_id | Yes | The book ID to find pairings for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds that results are derived from co-shelving behavior (a recommendation signal, not authoritative metadata), but says nothing about ordering, pagination, or why 'pairings' differ from citations/similarity.
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 tight sentence with the query concept front-loaded and a clarifying parenthetical; no filler, no repetition of schema details.
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 read-only lookup whose annotations carry the safety profile and whose schema fully documents inputs, this is nearly sufficient. The only real gap is not characterizing what a 'pairing' result contains or how it is ranked, which would matter given there is no output schema.
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 100% and both parameters (book_id, limit with default/min/max) are fully documented in the schema. The description adds no meaning beyond the schema, so the baseline 3 applies.
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?
States a specific verb ('Find') and a precise relational resource ('books commonly co-shelved with a specific book'), which is meaningfully different from siblings like get_book_details or search_books. It does not explicitly name a sibling to contrast against, but the co-shelving framing makes the intent unambiguous.
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?
Usage is only implied: the description conveys the recommendation/relatedness scenario but gives no explicit when-to-use, prerequisites, or alternative (e.g., 'use get_book_details for a single book's metadata'). An agent can infer the scenario but must guess at the boundary with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionARead-onlyIdempotent
Get a book collection with all its books
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes | The collection's unique ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description usefully discloses that all books are returned (not just metadata), but says nothing about pagination or response shape.
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 with no wasted words; the return-scope detail is packed efficiently into the same clause.
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 read-only lookup with no output schema, the description conveys the key return characteristic (includes all books). It is largely complete, with only minor gaps around pagination and error behavior.
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 coverage is 100% with a single documented collection_id, so the schema fully carries parameter meaning. The description adds nothing beyond reiterating the resource, making the baseline 3 appropriate.
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 states a specific verb (Get) and resource (book collection) and clarifies scope by noting it returns the collection with all its books. This distinguishes it from list_collections, though that differentiation is implicit rather than named.
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?
No explicit when-to-use guidance or named alternative. An agent can infer this retrieves a single collection by ID versus list_collections which enumerates them, but the description never states this routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personaCRead-onlyIdempotent
Get details about a persona (bookshelf owner)
| Name | Required | Description | Default |
|---|---|---|---|
| persona_id | Yes | The persona's unique ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds only the 'bookshelf owner' identity clarification and discloses nothing extra about auth, errors, or return behavior.
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 efficient sentence with no waste, and the core action is front-loaded. It is appropriately sized and easy to parse.
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 simple single-param read tool with full schema coverage and a complete annotation set, the description is adequate but thin. With no output schema, it might have usefully indicated what 'details' are returned for a persona, which is left unstated.
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 100% with a single required param ('persona_id' = 'The persona's unique ID'), so the schema fully documents the parameter. The description adds no meaning beyond that, making the baseline 3 appropriate.
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 states a specific verb+resource ('get details about a persona') and disambiguates the domain term by equating persona with 'bookshelf owner'. It is clear on its own, though it does not explicitly differentiate itself from siblings like get_book_details or get_collection.
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?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The agent must infer usage purely from the name and the parenthetical clarification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesBRead-onlyIdempotent
List all approved book categories
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is well covered. The description adds one useful behavioral detail: only 'approved' categories are returned, implying unapproved ones are filtered out. Beyond that it says nothing about return format or ordering.
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 six-word sentence with the resource and scope front-loaded. There is no filler or redundancy.
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 no-parameter read tool this is nearly adequate, but with no output schema the description does not hint at what a category looks like (name, id, etc.), leaving the return shape entirely unspecified.
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?
The tool takes zero parameters, so the schema-description baseline is 4. There are no parameter semantics to compensate for, and the description appropriately avoids inventing any.
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?
States a specific verb (List) and resource (approved book categories), which is clear and distinct from sibling tools like list_collections or get_collection. The 'approved' qualifier narrows scope meaningfully. It does not explicitly differentiate against siblings, keeping it at 4 rather than 5.
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?
There is no guidance on when to call this versus siblings such as list_collections or search_books. A reader must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsCRead-onlyIdempotent
List the user's collections with optional filters
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (1-50, default 20) | |
| cursor | No | Pagination cursor from previous response | |
| persona_id | No | Filter by persona ID | |
| category_id | No | Filter by category ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that — no mention of default ordering, whether results are paginated via the cursor, or what a truncated result set implies, all of which would be new information.
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 clause with no filler or redundancy. It is efficient, though the brevity contributes to the gaps in the other dimensions.
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 low-complexity list tool with a fully described schema and rich annotations, the description is minimally sufficient. It does not explain the paged return shape (no output schema exists) or default ordering, which would help an agent call it correctly, but the missing pieces are modest.
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 100%, so limit, cursor, persona_id, and category_id are all documented in the schema itself. The description's phrase "optional filters" is already implied by the schema's optional, undescribed-by-tool parameters, so it adds no meaning beyond 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?
States a specific verb (List) and resource (the user's collections), so an agent knows exactly what it returns. It does not, however, distinguish itself from siblings like get_collection or list_categories, which also deal with collections/categories.
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?
"with optional filters" hints that filtering is available but gives no when-to-use guidance, no mention of when to prefer get_collection for a single item, and no exclusions. An agent must infer the boundary from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recognize_bookshelfA
Recognize books from one or more photos of a bookshelf; several photos become one collection (uses daily credits or BYOK)
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional title for the new collection | |
| images | No | Several photos of one bookshelf, saved as ONE collection (up to 4 with a user key). Each entry has image_url or image_base64. Use instead of image_url / image_base64, not with them. Prefer URLs: base64 photos over 4 MB in total do not fit in one request. Each photo uses one credit. | |
| image_url | No | URL of a single bookshelf photo | |
| cover_index | No | Zero-based index into images of the photo to use as the collection cover (default 0) | |
| image_base64 | No | Base64-encoded single photo (provide this OR image_url) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readonly, non-idempotent, open-world operation. The description adds a genuinely useful behavioral detail not in the annotations: it consumes daily credits or BYOK per invocation. It still doesn't disclose that a new collection object is created or what happens on repeated calls.
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 packs purpose, the merge-into-collection behavior, and the credit cost with no filler. The parenthetical cost note is slightly compressed but does not dilute the core statement.
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 mutation tool with no output schema, the description does not explain the return (list of recognized books, new collection id, partial-failure behavior). Annotations cover safety and the schema covers inputs, but the post-invocation outcome an agent should expect is left unstated.
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 100%, so the schema already documents each parameter richly (mutual exclusivity of image_url/image_base64, the 4-photo limit with a user key, cover_index default). The description adds no parameter detail beyond that, so the baseline of 3 applies.
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 states a specific verb and resource ('Recognize books from one or more photos of a bookshelf') and adds the key outcome that multiple photos merge into one collection, which separates it from sibling read tools like search_books and get_collection.
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?
Usage is only implied: it tells the agent this is the tool for reading books off photos and that several photos collapse into one collection. There is no explicit when-to-use vs. when-not guidance and no routing toward alternatives, though the input modality (photos) narrows selection enough to make the tool inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_reading_listCDestructiveIdempotent
Remove a book from a reading list
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | The reading list entry ID to remove. Use list_reading_lists to find entry IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that — it doesn't say whether the removal is permanent, whether it deletes the book or only the list entry, or whether it requires ownership of the list.
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 short, front-loaded sentence with no filler. It is efficient, though arguably under-specified rather than perfectly concise.
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 one-parameter mutation whose destructive/idempotent traits are supplied by annotations and whose parameter is fully documented, the description is minimally sufficient. The lingering ambiguity between removing a 'book' versus a list 'entry' could have been resolved in the description.
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 coverage is 100% and the single entry_id parameter is documented in the schema with a pointer to list_reading_lists. The description adds no format or semantic detail beyond the schema, so the baseline 3 is appropriate.
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?
States a specific verb ('Remove') and resource ('a book from a reading list'), and is implicitly distinguishable from the sibling add_to_reading_list. It does not explicitly differentiate itself from list_reading_lists or other list-related siblings, so it falls short of a 5.
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?
No when-to-use guidance, no prerequisites, and no alternatives named. The pointer to list_reading_lists for finding entry IDs lives in the schema, not the description, so the description itself offers no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_booksBRead-onlyIdempotent
Search for books by title, author, or ISBN
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | Search query (title, author name, or ISBN) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, and the description adds nothing beyond them. It does not disclose result ordering, whether the search is fuzzy or exact, pagination behavior, or how many hits to expect, so it contributes essentially no behavioral context.
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 of eight words with no filler or redundancy, which is proportionate for a two-parameter read tool. It is efficient, though the terseness is part of why behavioral and usage guidance are thin.
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 simple read-only search with full schema coverage and a rich annotation set, the description covers the essential purpose. The only meaningful gap is that, with no output schema, it could hint at what the results look like (e.g. list of book records, result cap behavior).
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 100%, with both 'query' and 'limit' documented in the schema itself, so the baseline is 3. The description restates the query facets (title/author/ISBN) that the schema already specifies and adds nothing about limit semantics, so it neither compensates for nor extends the schema.
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 names a specific verb ('Search') and resource ('books') and enumerates the searchable facets (title, author, ISBN), so the agent immediately knows what the tool does. It stops short of differentiating from siblings like get_book_details or get_book_pairings, so it is clear but not fully disambiguating.
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?
Usage is only implied: by listing title/author/ISBN, it signals the tool is appropriate when the agent has one of those identifiers. There is no explicit when-to-use statement, no mention of when to prefer get_book_details or another sibling, and no prerequisites or exclusions.
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.
11 tool updates
v1.1.0- First observed
add_to_reading_list - First observed
check_credits - First observed
get_book_details - First observed
get_book_pairings - First observed
get_collection - First observed
get_persona - First observed
list_categories - First observed
list_collections - First observed
recognize_bookshelf - First observed
remove_from_reading_list - First observed
search_books
TDQS
Scored across 11 tools
Each tool targets a distinct resource or action: searching books, retrieving details, recognizing photos, managing collections, reading lists, personas, categories, and credits. No two tools have overlapping purposes that could cause misselection.
All tool names follow a consistent snake_case verb_noun pattern: get_book_pairings, recognize_bookshelf, search_books, get_book_details, get_collection, list_collections, list_categories, get_persona, add_to_reading_list, remove_from_reading_list, check_credits.
11 tools is well within the ideal range of 3–15 and each tool earns its place for the book discovery and collection management domain. No tool feels redundant or missing from a count perspective.
Notable gaps exist: there is no way to view a reading list (only add/remove), no update or delete operations for collections, and no list of personas. These missing lifecycle operations could hinder agents from verifying state or managing resources fully.
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Search books and authors, fetch editions, browse subjects, and resolve cover images.
Agentic AI book creator: plan, write, illustrate, narrate, and publish books from any MCP client.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to help users manage their reading experience by searching books, tracking reading progress, managing bookmarks, and generating personalized recommendations and summaries.-
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to read and write local Apple Books library, collections, and annotations. Supports searching, exporting, and modifying books and highlights via MCP tools.1MIT
- AlicenseBqualityBmaintenanceConnects AI assistants to the Hardcover book library, enabling natural language book searches, reading status updates, list management, and library exploration.3949 PyPI9MIT
- AlicenseNot gradedqualityAmaintenanceBridges your Calibre e-book library with AI assistants via the Model Context Protocol, enabling natural-language library management, semantic search, RAG, and agentic workflows.48MIT