hardcover-mcp
Manage your Hardcover reading library and discover books through an AI assistant.
Browse & discover: search books/authors/series/lists/users/publishers/characters/prompts; get book, character, edition (by ISBN/ASIN), series, author, publisher, trending books, vibes, user profiles, activity feeds.
Library tracking: view profile, reading stats, goals, library (filter/sort), user book entry, reviews, reading journal, owned books; add/update/delete books with status, rating, review, notes, edition; log/update/delete reading dates and progress (pages, audiobook time); set/update reading goals; mark editions owned.
List management: view, create, update, delete lists; add/remove books.
Journal & prompts: read/add/delete journal notes and quotes; list and answer community book prompts.
Social: follow/unfollow users.
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., "@hardcover-mcpAdd Project Hail Mary to my library as currently reading"
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.
hardcover-mcp
Talk to your Hardcover library from any AI assistant.
hardcover-mcp connects your Hardcover library to AI assistants like Claude and Copilot. Search for books, update your reading status, manage lists, explore series — all through natural conversation instead of clicking through menus.
What you can say
"What's on my currently reading list?"
"Add Project Hail Mary to my library as currently reading"
"Search for books by Brandon Sanderson"
"Look up ISBN 9780547928227"
"Create a list called 'Summer Reading' and add The Hobbit to it"
"Show me the Stormlight Archive series in reading order"
"Move Project Hail Mary and The Martian to currently reading"
"What books has Andy Weir written? Add any I haven't read to my want-to-read list"
"Compare my rating of Dune with the Hardcover average"
What's covered
Library tracking — status, ratings, reading dates
List management — create, edit, add/remove books
Discovery — search books, authors, series, editions, and more
Account info — your profile and reading stats
Related MCP server: mcp-ebook-server
Safety & control
You control your API key — it stays on your machine, never shared with third parties
Runs locally through your MCP client — no external server involved
Actions only happen when explicitly requested — nothing runs in the background
You review prompts and outputs in your client before anything is sent
Quick Start
Install uv (a fast Python package runner — the setup takes seconds).
Get an API token from hardcover.app/account/api.
Add the config below to your MCP client — no manual install needed,
uvxhandles it.
VS Code
Add to .vscode/mcp.json:
{
"servers": {
"hardcover": {
"command": "uvx",
"args": ["hardcover-mcp"],
"env": {
"HARDCOVER_API_TOKEN": "<your token>"
}
}
}
}Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"hardcover": {
"command": "uvx",
"args": ["hardcover-mcp"],
"env": {
"HARDCOVER_API_TOKEN": "<your token>"
}
}
}
}Tools
Browse & discover
What you can do | Tool |
Search for books, authors, series, and more (with sort/filter) |
|
Look up a book by title or ID |
|
See what's trending now |
|
Browse curated recommendation collections (vibes) |
|
Look up a specific edition by ISBN or ASIN |
|
Explore a series in reading order |
|
Browse an author's catalogue |
|
Look up another user's public profile (and optionally their library) |
|
See recent activity from people you follow (or one user) |
|
Follow or unfollow a user |
|
Your library
What you can do | Tool |
See your profile and book count |
|
Get reading statistics (totals, ratings, books read per year) |
|
Get your active reading goals and progress |
|
Browse your library, filter by status, date range, or sort by rating/date |
|
Check your status/rating for a specific book (includes privacy setting) |
|
List your reviews |
|
Read your journal entries (notes, quotes, status events) |
|
List books you own, with edition details |
|
Create or update a reading goal (books/pages, date range) |
|
Add a book or update its status, rating, review, notes, privacy, and edition |
|
Mark an edition as owned or not owned |
|
Log reading dates and progress (pages, audiobook time) |
|
Remove a book or reading entry |
|
Create or delete a journal note/quote entry |
|
Lists
What you can do | Tool |
View all your lists |
|
View a specific list with its books |
|
Create, rename, or delete a list |
|
Add or remove books from a list |
|
Development
git clone https://github.com/kristianedlund/hardcover-mcp.git
cd hardcover-mcp
uv syncLint and format checks (using Ruff):
uv run ruff check src/
uv run ruff format --check src/Run tests:
uv run pytest tests/ -vIntegration Tests
Integration tests hit the live Hardcover API and require a valid token. They are skipped automatically in CI and when the token is absent.
To run them locally, create a .env file with your token:
HARDCOVER_API_TOKEN=your_token_hereThen run:
uv run pytest tests/integration/ -vWrite tests follow a create → verify → delete lifecycle so the account is left unchanged.
Contributing
Contributions are welcome! Please:
Open an issue first to discuss the change.
Fork the repo and create a branch (
feature/short-descriptionorfix/short-description).Run lint and tests before submitting:
uv run ruff check src/ uv run ruff format --check src/ uv run pytest tests/ -vKeep PRs focused — one change per PR.
Use conventional commit prefixes:
feat:,fix:,chore:,docs:.
Rate Limiting
The Hardcover API allows 60 requests per minute. The server handles this automatically — it queues requests and retries if needed. You shouldn't hit this in normal use.
Troubleshooting
Problem | Fix |
"API token is not set" | Add your token to the config (see Quick Start above) |
"Access is denied" on Windows | Add |
Slow or repeated errors | The server retries automatically — wait a moment and try again |
Unexpected results | Check for a newer version: the Hardcover API may have changed |
Disclaimer
Unofficial project. Not affiliated with Hardcover.
Available Tools
39 toolsadd_book_to_listC
Add a book to a Hardcover list.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | Hardcover book ID to add. | |
| list_id | Yes | Hardcover list ID. | |
| position | No | Position in the list (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as idempotency, error handling, or side effects. It only states the action.
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 a single, concise sentence with no wasted words. It is appropriately front-loaded.
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 has 3 parameters and no output schema or annotations, the description lacks info on return values, error conditions, or prerequisites, leaving it incomplete for effective use.
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 parameter descriptions are adequate. The tool description adds no additional meaning beyond the schema, meeting the baseline of 3.
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 verb 'add' and the resource 'book to a Hardcover list', distinguishing it from siblings like 'remove_book_from_list'. However, it lacks mention that the book and list must exist.
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 guidance on when to use this tool versus alternatives such as 'set_user_book' or 'update_list'. No when-not-to-use conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_journal_entryB
Create a reading journal entry (for example a note or quote) for a book.
| Name | Required | Description | Default |
|---|---|---|---|
| entry | Yes | Journal entry text. | |
| event | Yes | Journal event type. | |
| book_id | Yes | Hardcover book ID. | |
| edition_id | No | Optional Hardcover edition ID. | |
| privacy_setting_id | No | Optional privacy setting ID (1 public, 2 followers, 3 private). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must cover behavioral traits. It only states 'create' without detailing side effects, permissions, or limitations. The return value is not mentioned, and there is no output schema to compensate.
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?
Single sentence, front-loaded with key action and resource, no extra words. Efficiently conveys the purpose.
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 has 5 parameters and no output schema, the description is too sparse. It does not explain what happens on success, potential errors, or how the entry integrates with other journal features. Sibling tools for delete and get exist but no guidance on workflow.
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 description adds minimal value beyond the schema. The mention of 'note or quote' repeats the enum. Baseline 3 is appropriate as schema already explains parameters.
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 action ('create') and the resource ('reading journal entry'), with concrete examples ('note or quote') that align with the event enum. It distinguishes the tool from siblings like delete_journal_entry and get_reading_journal.
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 guidance on when to use this tool versus alternatives, no prerequisites or context provided. The sibling tools are listed but not differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_user_book_readA
Add a reading date or progress entry. Updates active read if one exists. Supports page progress and audiobook time tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | No | Book ID (auto-resolves your user_book). | |
| edition_id | No | Edition ID (required for audiobook progress tracking). | |
| started_at | No | Date started reading (ISO 8601, e.g. '2025-01-15'). | |
| finished_at | No | Date finished reading (ISO 8601, e.g. '2025-02-20'). | |
| user_book_id | No | user_book ID if known (skips lookup). | |
| progress_pages | No | Pages read so far. | |
| progress_seconds | No | Seconds of audiobook listened to so far. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It reveals that it updates an active read if one exists, but omits details on side effects, permissions, or reversibility. Adequate but incomplete.
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?
Two sentences, no superfluous words. Efficiently conveys purpose and key capabilities.
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 description covers main behavior but lacks details on return values, error cases, or complex interactions. For 7 parameters and no output schema, more context would help.
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 schema descriptions are detailed. The description adds context about updating active reads but no additional parameter-level meaning. 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?
The description clearly states it adds a reading date or progress entry, supports both page and audiobook progress, and updates an existing active read. The verb 'Add' and resource 'reading date or progress entry' are specific.
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 does not provide guidance on when to use this tool versus siblings like update_user_book_read. It mentions updating an active read, but does not delineate scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answer_promptA
Submit a book as an answer to a community book prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | Hardcover book ID to submit as the answer. | |
| prompt_id | Yes | Hardcover prompt ID (use get_prompts to find IDs). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description conveys a write/submit operation, but with no annotations it omits side effects such as whether an existing answer is replaced, whether duplicates are allowed, or what happens on success or failure.
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, direct sentence conveys the entire purpose without filler or unnecessary detail.
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 two-parameter write operation, the description covers what and how; it does not describe return values, but the lack of an output schema and the tool's simplicity make this a minor omission.
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?
Both parameters are described and the descriptions add helpful context (Hardcover IDs and using get_prompts to find prompt IDs), though they do not specify constraints like positive integers or required existing entities.
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 the exact action (submit), the object (a book), and the target (a community book prompt), leaving no ambiguity about the tool's primary purpose.
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?
Clear from the verb and target that this is the action for answering a prompt; however, it does not explicitly contrast with sibling tools or note when not to use it, though no sibling serves the same purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listC
Create a new Hardcover list.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new list. | |
| privacy | No | public/followers_only/private. Default: public. | |
| description | No | Optional description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It only states 'Create a new...' but omits details like authentication requirements, rate limits, or what happens on duplicate names. This is insufficient.
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?
Single sentence is efficient and front-loaded. It is concise but slightly under-specified; still acceptable for a simple creation 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 3 parameters, no output schema, and no annotations, the description is too minimal. It does not explain return values, validation rules, or side effects. Sibling tools exist but are not leveraged.
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 baseline is 3. The description adds no extra meaning beyond what the schema already provides for 'name', 'description', and 'privacy'.
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?
Description clearly states 'Create a new Hardcover list.' The verb 'Create' and resource 'list' are specific, but it does not differentiate from siblings like 'update_list' or 'add_book_to_list'.
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 guidance on when to use this tool versus alternatives like 'update_list' or 'delete_list'. No prerequisites or context-specific advice provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_journal_entryB
Delete a reading journal entry by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Reading journal entry ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states 'Delete' but does not disclose whether deletion is irreversible, idempotent, or has cascading effects. No error handling or side effects are described.
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?
One short, clear sentence with no extraneous information. Perfectly concise for a simple 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 simple 1-parameter delete tool, the description is minimally complete. However, it lacks behavioral details and usage guidance that would make it robust. It meets the minimum viability.
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 minimal description for the id parameter. The tool description does not add extra meaning beyond the schema, so 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?
The description clearly states the action (Delete), the resource (reading journal entry), and the method (by ID). It is distinct from sibling tools like delete_list or delete_user_book which target different entities.
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 guidance on when to use this tool vs alternatives, no prerequisites or conditions mentioned. The description lacks context on when not to use it or how it fits into a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listA
Delete a Hardcover list by ID. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Hardcover list ID to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the irreversible nature of the delete, which is key. However, no annotations are provided, and it does not mention permissions, side effects, or success/failure indicators.
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, concise and front-loaded with the action and its consequence. No extraneous information.
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 simplicity of the tool (single parameter, no output schema), the description is nearly complete. It lacks only clarification of what happens on success or error.
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 input schema already describes the 'id' parameter clearly (100% coverage). The description adds no further semantic 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?
The description clearly states 'Delete a Hardcover list by ID', specifying the verb and resource. It distinguishes from sibling tools like create_list or update_list.
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 'This cannot be undone' implies caution, but there is no explicit guidance on when to use this tool versus alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_user_bookA
Remove a book from your library entirely. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | No | Hardcover book ID (will look up your library entry). | |
| user_book_id | No | Directly specify user_book ID if known. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses irreversibility ('cannot be undone'), which is critical behavioral info. However, lacks details on permissions, side effects (e.g., removal of associated data), given no annotations.
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?
Two sentences with no redundant information. Action and consequence are front-loaded, achieving maximum efficiency.
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?
Adequate for a simple tool with two parameters, but lacks comparison to siblings and more detailed behavioral context. Could explain when to use delete_user_book vs other delete/remove tools.
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 descriptions cover both parameters completely (100% coverage). The tool description adds no additional meaning beyond the schema, so 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?
Clearly states action: 'Remove a book from your library entirely.' Distinct from sibling tools like delete_user_book_read or remove_book_from_list by specifying 'library' instead of a list or read record.
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 guidance on when to use this tool versus alternatives. Does not mention differences from siblings such as delete_user_book_read or remove_book_from_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_user_book_readA
Delete a reading date entry by its ID. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The user_book_read ID to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry all behavioral disclosure. It explicitly states the destructive, irreversible nature. However, it lacks details such as whether the deletion is permanent, if it cascades to other data, or any authorization requirements. For a destructive tool, slightly more transparency would be beneficial.
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 extremely concise at two sentences and zero wasted words. Every sentence serves a purpose: stating the action and warning about irreversibility. It is ideally sized for a simple 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 tool with one parameter and no output schema, the description is minimally complete. It outlines what the tool does and its irreversible nature. However, it lacks clarity on what constitutes a 'reading date entry', potential error cases, or usage context (e.g., only applicable to the user's own entries). Slightly more context would improve completeness.
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%, so the description adds no extra parameter meaning beyond stating the ID is used. The schema already documents the id field. Baseline 3 is appropriate as the description does not provide additional semantic context like where to obtain the ID.
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 action 'Delete' and the resource 'a reading date entry' along with the required identifier 'by its ID'. It distinguishes well from sibling tools like delete_journal_entry or delete_user_book by specifying the unique resource type.
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 provides a clear warning that the action cannot be undone, implying one should only use it when sure. However, it does not explicitly mention when to use this tool versus alternatives (e.g., updating instead of deleting) or provide any prerequisites or context for safe usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_userC
Follow a Hardcover user by user_id or username.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Hardcover user ID to follow. | |
| username | No | Username to follow (resolved to an ID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does not disclose that this is a mutating/side-effecting operation, whether it is idempotent when the follow already exists, what error occurs for an unknown user, or what the response contains.
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, front-loaded sentence with no filler. It is appropriately sized for such a simple tool, though it is arguably too terse to be fully instructive.
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?
This is a low-complexity tool with no nested objects and no output schema, so limited detail is acceptable. However, the zero-required-parameter schema plus the absence of annotations means an agent still lacks the basic facts (at least one identifier needed, idempotency, auth) to call it confidently.
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%, so both parameters are already documented. The phrase 'by user_id or username' adds a little value by implying the two are alternative identifiers, but it does not clarify that neither is marked required or whether supplying both is legal. Baseline 3 fits when the schema does the heavy lifting.
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 ('Follow') and resource ('Hardcover user'), plus the two identifier options. It is clearly distinguishable from the sibling unfollow_user by name, though the description itself never names or contrasts the opposite operation.
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 guidance on when to use this versus unfollow_user, no preconditions (e.g., authentication, must already exist as a user), and no indication of what happens on repeat calls. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_feedA
Get recent reading activity (status changes, ratings, reviews, list updates), newest first. Defaults to the feed of users you follow. Pass user_id or username to fetch a single user's activity instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events to return (default 25, max 100). | |
| offset | No | Pagination offset (default 0). | |
| user_id | No | Fetch one user's activity by Hardcover user ID. | |
| username | No | Fetch one user's activity by username. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose ordering (newest first) and the default scoping behavior, which is genuinely useful. However, it says nothing about authentication requirements, whether the feed is filtered/moderation-controlled, or how pagination behaves beyond the schema's own limit/offset fields.
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?
Two sentences, front-loaded with what the tool returns before describing scope overrides. No filler and every clause carries information.
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-required-parameter read tool with no annotations and no output schema, the description covers purpose, default scope, ordering, and scope override adequately. The main omission is any hint of the response shape or auth expectations, but that gap is minor.
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 limit, offset, user_id, and username. The description adds the semantic point that user_id and username are alternative ways to switch scope, but adds no format or constraint detail beyond the schema. 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?
Names a specific resource (reading activity feed) and enumerates exactly what events it contains (status changes, ratings, reviews, list updates) plus ordering (newest first). This clearly separates it from siblings like get_reading_journal or get_user_reviews.
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?
Explicitly states the default scope (feed of users you follow) and the condition for overriding it (pass user_id or username for a single user). It gives clear usage context but does not name alternative tools or warn about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authorA
Get an author's details and books by Hardcover ID, slug, or name.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hardcover author ID. | |
| name | No | Author name (e.g. 'Brandon Sanderson'). | |
| slug | No | Author slug (e.g. 'brandon-sanderson'). | |
| books_limit | No | Max books to return (default 20, max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read operation but does not explicitly state it is non-destructive. Without annotations, it should add behavioral context like pagination or error behavior, which is missing.
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 11-word sentence that conveys the tool's purpose and method. No redundant or unnecessary information; every word earns its place.
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 tool with no output schema, the description mentions returned content ('details and books') but omits details like return format, optionality of parameters, or behavior when multiple parameters are provided. Adequate but not thorough.
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 clear descriptions for each parameter. The description adds no extra semantics beyond listing the lookup keys and books_limit, meeting the baseline but not exceeding it.
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 'Get an author's details and books' and specifies three lookup methods (ID, slug, name). This defines a specific verb and resource, distinguishing it from sibling tools like get_book or get_edition.
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 guidance on when to use this tool versus alternatives (e.g., search_books) or which identifier to prefer. The description does not mention that at least one of id/slug/name is needed, leaving ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookA
Get detailed info about a specific book by its Hardcover ID or slug.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hardcover book ID. | |
| slug | No | Hardcover book slug (e.g. 'project-hail-mary'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries behavioral disclosure. It only states 'Get detailed info' without specifying return fields, read-only nature, or absence of side effects, leaving the agent without critical behavioral cues.
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 a single 12-word sentence that directly communicates the tool's purpose with no extraneous information. Every word is earned.
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 simple tool (2 optional params, no output schema), the description is nearly complete but lacks any hint of return content. Adding what 'detailed info' includes would improve completeness without harming conciseness.
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 the parameters. The description's mention of 'Hardcover ID or slug' aligns but adds no new meaning beyond the schema, warranting the baseline score.
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 retrieves detailed info about a specific book using either a Hardcover ID or slug. This verb+resource+scope pattern distinguishes it from siblings like search_books (searching) or get_edition (specific edition).
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 a book ID or slug is known but does not explicitly state when not to use this tool or mention alternatives such as search_books for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_charactersB
Get characters associated with a book by its Hardcover ID. Returns character names and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | Hardcover book ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only states what is returned ('character names and descriptions') but does not disclose pagination, error handling, or any behavioral constraints like rate limits.
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?
Two concise sentences with no fluff. The action and key detail are front-loaded.
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 ID lookup with one parameter and no output schema, the description is fairly complete. It could mention what happens if no characters are found, but overall adequate.
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 description for 'book_id'. The tool description does not add additional meaning beyond the schema, so baseline score of 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?
The description clearly states the verb 'Get', the resource 'characters', and the identifier 'book by its Hardcover ID'. It distinguishes from sibling tools which retrieve other entities like authors or books.
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 guidance on when to use this tool versus alternatives. There is no mention of prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_editionC
Get edition details by Hardcover ID, ISBN-13, or ASIN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hardcover edition ID. | |
| asin | No | Amazon ASIN of the edition. | |
| isbn_13 | No | ISBN-13 of the edition (e.g. '9780547928227'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as read-only nature, authentication requirements, rate limits, or side effects. The description carries the full burden but fails to provide this 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?
The description is a single concise sentence that is front-loaded with the key action and resources. Every word is necessary, though it could be slightly expanded to include behavioral context without being 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 description is barely adequate for a simple lookup tool. No output schema is provided, and the lack of behavioral transparency leaves gaps. Given the simplicity, more context could have been included.
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%, so parameters are already documented. The description adds minimal value by summarizing that any of the three identifiers can be used, but does not add meaning beyond what the schema provides.
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 verb 'Get', the resource 'edition details', and specifies three distinct identifiers (Hardcover ID, ISBN-13, ASIN) that differentiate it from sibling tools like get_book.
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 guidelines on when to use this tool versus alternatives. Sibling tools like get_book exist, but the description does not clarify when to choose get_edition over get_book or other lookup tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listA
Get a specific Hardcover list with its books by list ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Hardcover list ID (use get_my_lists to find IDs). | |
| book_limit | No | Max books to return (default 25, max 100). | |
| book_offset | No | Offset for book pagination (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool gets the list with books but does not explicitly note it is a read-only operation or mention pagination behavior. The schema partially compensates by defining book_limit and book_offset.
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 a single sentence that front-loads the main purpose. It contains no unnecessary words and is efficient for its simple purpose.
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 lack of output schema, the description should more clearly explain the return structure (e.g., list details and book array). It covers the inputs well but leaves the output ambiguous. Sibling tools are diverse, but the description does not help with selection.
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 clear descriptions. The description adds value for the 'id' parameter by suggesting use of get_my_lists to find IDs. Other parameters are adequately described in 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 clearly states the verb 'Get', the resource 'Hardcover list with its books', and the identifier 'list ID'. It distinguishes the tool from siblings like get_my_lists (which retrieves all lists) and other mutation tools.
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 provides a reference to get_my_lists for finding IDs, offering basic guidance. However, it does not explicitly state when to use this tool versus alternatives like search_books or get_my_lists, nor does it provide contexts or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_listsA
Get your Hardcover lists. Returns id, name, books count, privacy.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max lists to return (default 50, max 200). | |
| offset | No | Offset for pagination (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It confirms it's a read operation but does not mention authentication needs, rate limits, or what happens if no lists exist. The minimal detail is adequate for a simple tool but insufficient for full transparency.
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?
Single sentence, front-loaded with purpose and return fields. No wasted words.
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 list retrieval with no output schema and two well-documented parameters, the description is fairly complete. It mentions return fields and is sufficient for an agent to understand the tool's output.
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% for the two parameters, and the description does not add extra meaning beyond the schema. Baseline is 3.
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 action ('Get your Hardcover lists') and the return fields ('id, name, books count, privacy'). It distinguishes from sibling tools like 'get_list' and 'create_list' by focusing on personal lists retrieval.
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 context is implied by the name and description (fetching user's own lists), but no explicit guidance on when to use this vs alternatives like 'get_list' for a single list or 'create_list' for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_owned_booksA
List all books you have marked as owned. Returns title, authors, and edition details.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| per_page | No | Results per page (default 20, max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral traits. It implies a read operation but does not state read-only status, lack of side effects, or other behaviors.
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?
Two concise sentences, front-loaded with purpose, no unnecessary words.
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?
No output schema, so description should explain return values well. While it lists some fields, it omits pagination behavior and that results are paginated, leaving moderate gaps.
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 parameter descriptions are present. The description adds no extra meaning beyond the schema, so baseline of 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?
Description clearly states the verb 'list', the resource 'books you have marked as owned', and the returned fields (title, authors, edition details). This distinguishes it from sibling tools like get_user_library.
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 when to use the tool (to list owned books), but does not provide explicit when-not guidance or contrast with alternatives like get_user_library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_promptsA
List community book prompts. Optionally filter to featured prompts only. Returns question, description, answers_count, and books_count.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max prompts to return (default 25, max 100). | |
| offset | No | Pagination offset (default 0). | |
| featured | No | If true, return only featured prompts (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly indicates this is a read-only listing operation and adds useful transparency by enumerating returned fields (question, description, answers_count, books_count). It does not discuss pagination behavior or side effects, but 'List' sufficiently signals a non-mutating call.
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 concise, front-loaded sentences. The first sentence states the primary action, the second covers optional filtering, and the third documents the return fields, with no wasted words.
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 list tool with three optional parameters and full schema coverage, the description is largely complete: it states the purpose, optional filter, and return fields. There is no output schema, so the explicit return-field list helps compensate. It could be slightly stronger by noting how this relates to answer_prompt, but nothing essential for invoking it is missing.
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 limit, offset, and featured. The description only restates the featured filter and does not add meaningful new meaning beyond the parameter schema, justifying the baseline score of 3.
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 action ('List community book prompts') and a clear resource, which an agent can distinguish from answer_prompt by the verb 'list'. However, it does not explicitly call out sibling tools or differentiate itself beyond the implied contrast, so it stops short of full sibling differentiation.
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 use case is implied: call this when you need to list community book prompts rather than answer one. There is no explicit when/when-not guidance or mention of alternatives such as answer_prompt, though the optional featured filter gives some context about filtering behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publisherA
Look up a publisher by Hardcover ID, slug, or name. Returns publisher info and a paginated list of editions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hardcover publisher ID. | |
| name | No | Publisher name (e.g. 'Tor Books'). | |
| slug | No | Publisher slug (e.g. 'tor-books'). | |
| editions_limit | No | Max editions to return (default 20, max 100). | |
| editions_offset | No | Offset for editions pagination (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the return of both publisher info and a paginated edition list, implicitly revealing the pagination behavior through editions_limit and editions_offset. No contradictions. Minor omission: no mention of error handling or output field details, but acceptable for a lookup tool.
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 a single two-part sentence: first part states the lookup action and valid keys, second part specifies the return (info + paginated editions). No filler words, front-loaded with key action, and every clause earns its place.
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 description covers purpose, input identifiers, and output structure. However, with no output schema, it does not describe the fields in publisher info or the edition list structure. Also missing guidance on parameter mutual exclusivity (likely only one identifier at a time). Adequate but leaves some gaps given the 5-parameter complexity.
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 individual parameter descriptions. The description adds value by clarifying that the three identifier parameters (id, slug, name) are alternative lookup keys and that editions_limit/editions_offset control pagination of the returned list. This contextual grouping enhances schema semantics.
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 looks up a publisher by one of three identifiers (ID, slug, or name) and returns publisher info plus a paginated list of editions. This specific verb+resource+return distinguishes it from sibling get_* tools like get_author, get_book, etc.
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 for publisher lookups by three distinct identifiers but does not explicitly differentiate when to use which parameter or compare with other tools. However, the context of sibling tools (all for different entities) provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reading_goalA
Get your active reading goals with target, metric, progress, and date range.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max goals to return (default 10, max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It specifies 'active' goals and includes progress attributes, but does not disclose if multiple active goals can exist, pagination behavior, or idempotency.
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 one sentence, under 20 words, front-loaded with the action and attributes, with no unnecessary information.
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 tool with one optional parameter and no output schema, the description adequately explains what is returned. Minor gap: no mention of what happens if no active goals exist.
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% for the single parameter 'limit', which already has a clear description. The description adds no additional meaning beyond this.
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 it retrieves reading goals with specific attributes (target, metric, progress, date range), distinguishing it from sibling tools like 'set_reading_goal'.
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 for viewing active goals but provides no explicit when-to-use or when-not-to-use guidance, nor mentions alternatives like 'set_reading_goal' for modification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reading_journalA
Fetch reading journal entries for the authenticated user. Includes notes, quotes, status changes, ratings, reviews, and progress updates. Supports optional filters: book_id, event type, limit, and offset.
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | Filter by event type. Examples: 'note', 'quote', 'status_currently_reading', 'status_read', 'rated', 'reviewed', 'progress_updated'. | |
| limit | No | Max entries to return (default 25, max 100). | |
| offset | No | Pagination offset (default 0). | |
| book_id | No | Filter entries to a specific book by Hardcover book ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description uses 'Fetch' implying read-only behavior, but it does not explicitly state whether the operation mutates data, access restrictions, or other behavioral traits with the detail needed.
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 concise sentences, front-loaded with the main purpose, and includes relevant details without unnecessary words.
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 (4 optional parameters, no output schema), the description covers key aspects (purpose, data types, filters) but lacks sorting or default order information.
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 description summarizes parameters as 'optional filters', adding minimal extra meaning beyond the explicit schema descriptions.
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 verb 'fetch' and the resource 'reading journal entries' for the authenticated user, listing included data types (notes, quotes, etc.), which distinguishes it from sibling tools like get_book or get_user_library.
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 mentions optional filters for query context but does not provide explicit when-to-use or when-not-to-use guidance, nor does it compare to siblings like add_journal_entry or delete_journal_entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reading_statsA
Get library reading statistics: total books, books per status, average rating, and books read in a given year.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Year for the 'books_read_this_year' count (default: current year). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It does not state whether the operation is read-only, requires authentication, or has performance implications. The description implies read-only but does not explicitly confirm.
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?
Single sentence, front-loaded with verb and resource, listing outputs. No redundant words; every part is meaningful. Highly concise and well-structured.
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 tool with one optional parameter and no output schema, the description lists output fields and explains the parameter's role. Could mention default behavior for year or scope (e.g., user's library). Still, it is sufficient 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?
Schema coverage is 100% with one optional parameter 'year', which has a clear description. The tool description adds context by mentioning 'books read in a given year' but does not elaborate further. Adequate but not exceptional.
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?
Description clearly states action 'Get', resource 'library reading statistics', and lists specific statistics (total books, books per status, average rating, books read in a given year). This distinguishes it from sibling tools that retrieve individual entities.
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 or when-not-to-use guidance. However, the description implies it's for aggregate statistics, contrasting with sibling getters for specific items. Could be stronger with explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seriesA
Get a book series by id, slug, or name with books in reading order.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hardcover series ID. | |
| name | No | Exact series name (e.g. 'The Stormlight Archive'). | |
| slug | No | Series slug (e.g. 'the-stormlight-archive'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that results include books in reading order, a key behavioral trait. However, it does not mention potential side effects, permissions, or error handling.
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 sentence front-loads the purpose and result format. Every word adds value, with no redundancy or filler.
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 no output schema, the description hints at the return structure (series with books ordered). It omits details like pagination, limits, or behavior on multiple matches, but for a simple lookup tool this is reasonably 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 coverage is 100%, with each parameter already described. The description adds no extra meaning beyond stating the result format, so it does not improve understanding beyond 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 clearly states the tool retrieves a book series by id, slug, or name, and includes books in reading order. This specific verb-resource combination distinguishes it from sibling tools like get_book or get_author.
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 needing series info with ordered books, but gives no explicit guidance on when not to use it, prerequisites, or alternatives. The context is clear but lacks decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trending_booksA
Get currently trending books, most popular first. Choose a time window with 'duration'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max books to return (default 25, max 100). | |
| offset | No | Pagination offset (default 0). | |
| duration | No | Time window (default 'week'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure itself. It does add one real behavioral fact (results are ranked by popularity descending), but omits return shape, pagination behavior across offset/limit, and anything about the data source or caching.
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?
Two short sentences, front-loaded with the operation and ordering, with no filler sentences. Every clause contributes.
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-required, three-parameter read tool with full schema coverage and no output schema, the description covers purpose, ordering, and the key optional parameter adequately. It leaves minor gaps around result shape and pagination that a caller might want.
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 defaults and enum values documented for duration, limit, and offset, so the baseline of 3 applies. The description repeats the duration concept without adding syntax, format, or interaction details beyond 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?
States a specific verb and resource ('Get currently trending books') plus the ordering ('most popular first'), which is enough to separate it from search_books and get_list. It does not name a sibling or defining scope, 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?
The clause 'Choose a time window with duration' is the only usage guidance and merely points at a parameter the schema already documents. There is no when-to-use-this-vs-search_books/get_list guidance and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userA
Look up another Hardcover user's public profile by id, username, or name. Returns bio, book/follower counts, and privacy. Set include_library=true to also fetch their recent library entries (subject to their privacy setting).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hardcover user ID. | |
| name | No | Display name to search for (resolves to the top match). | |
| username | No | Hardcover username (e.g. 'adam'). | |
| library_limit | No | Max library entries to return (default 10, max 50). | |
| library_status | No | Filter library entries by status (e.g. 'Read', 'Currently Reading'). | |
| include_library | No | If true, include recent library entries (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and partially meets it: it discloses that only public profile data is returned and that library entries are gated by the target user's privacy setting, which is a real behavioral constraint an agent must anticipate. It stops short of stating auth requirements, rate limits, or failure behavior for an unresolved name.
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?
Two sentences, no filler, front-loaded with the action and identifier options before the optional flag. Every clause carries information the agent needs.
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?
With no output schema, the description usefully enumerates the return shape (bio, book/follower counts, privacy) and the conditional library payload. The one gap: six parameters with zero required means the agent must infer that at least one of id/username/name is necessary, and that constraint is not stated.
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%, so the baseline is 3. The description adds genuine meaning by tying include_library to the target's privacy setting and by framing id/username/name as alternative lookup keys rather than listing fields already documented.
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 ('look up') and resource ('another Hardcover user's public profile'), plus the three lookup keys (id, username, name). The word 'another' quietly distinguishes it from the sibling `me`, and the resource differs from `get_user_library`/`get_user_reviews`.
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?
Gives an explicit conditional for the main optional behavior: 'Set include_library=true to also fetch their recent library entries (subject to their privacy setting).' It does not, however, tell the agent when to prefer `get_user` over `get_user_library` or `me`, so it lacks true alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_bookB
Get your library entry for a book: status, rating, reads.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Hardcover book slug (e.g. 'project-hail-mary'). | |
| book_id | No | Hardcover book ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only lists returned fields (status, rating, reads). Does not disclose if it is read-only, authentication needs, or potential errors.
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?
Single, clear sentence front-loads the core function. Efficient but could be slightly more structured.
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?
Adequate for a simple retrieval tool with two parameters and no output schema. However, lacks details on required parameters or error conditions.
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 descriptions for both parameters (book_id and slug). Description adds no extra meaning beyond 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?
Description clearly states the tool retrieves the user's library entry for a specific book, including status, rating, and reads. It is distinct from siblings like get_book (general) and get_user_library (all entries).
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 guidance on when to use vs alternatives like get_book or get_user_library. The context is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_libraryA
Get books from your library. Filter by reading status or finished-date range (start_date + end_date). Sort by rating, title, or updated date. Use sort='rating', order='desc' to get top-rated books. Use start_date + end_date to answer 'what did I read in May last year?'
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field: 'updated' (default), 'rating', or 'date_added'. | |
| limit | No | Max books to return (default 25, max 100). | |
| order | No | Sort direction: 'desc' (default) or 'asc'. | |
| offset | No | Offset for pagination (default 0). | |
| status | No | Status filter (e.g. 'Read', 'Currently Reading'). | |
| end_date | No | Latest finished_at date (ISO 8601, e.g. '2025-12-31'). Must be paired with start_date. | |
| start_date | No | Earliest finished_at date (ISO 8601, e.g. '2025-01-01'). Must be paired with end_date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It accurately describes the tool as read-only (getting library books) and mentions filtering and sorting, but doesn't disclose pagination limits (default 25, max 100) or that it only returns the current user's library, which could be inferred but not explicit.
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 three sentences, each serving a purpose: stating the function, listing filters/sorts, and providing usage examples. No redundant information, well-structured.
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 complexity (7 parameters, no output schema), the description covers core functionality but omits details about the response format (e.g., fields returned, data types). The inclusion of pagination parameters suggests a need for output format guidance, which is lacking.
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 description adds value by providing example usage for sort/order and date range pairing, which goes beyond the schema definitions. The examples clarify how to use parameters together.
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 'Get books from your library' and specifies filtering (reading status, finished-date range) and sorting options, distinguishing it from siblings like search_books or get_book. The example usage further clarifies its purpose.
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 provides explicit guidance on when to use filters (e.g., date range for 'what did I read in May last year?') and sorting (e.g., 'sort=rating, order=desc' for top-rated). However, it doesn't explicitly mention when not to use this tool or suggest alternatives like search_books for broader searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_reviewsB
List your reviews, newest first. Includes review text, rating, and book info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max reviews to return (default 25, max 100). | |
| offset | No | Pagination offset (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral traits. It only discloses ordering (newest first) but omits whether the operation is read-only, authentication requirements, or rate limits. Minimal disclosure.
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?
Two concise sentences, front-loaded with purpose. Every word adds value; no redundancy or fluff.
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 no output schema, the description adequately summarizes return content (text, rating, book info). Lacks mention of pagination behavior beyond parameters, but sufficient for a simple list 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 100%, so parameters are fully documented in the schema. The description adds no extra meaning beyond the schema's parameter descriptions, earning baseline score of 3.
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 lists user reviews, with ordering (newest first) and content (review text, rating, book info). It distinguishes from siblings by its specific resource focus, though not explicitly compared.
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 guidance on when to use this tool versus alternatives like get_my_lists or get_owned_books. The description implies it's for personal reviews but provides no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vibesB
List Hardcover 'vibes' — curated, themed book recommendation collections (e.g. 'Hidden Gem Fantasy'). Each vibe includes its books.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max vibes to return (default 10, max 50). | |
| offset | No | Pagination offset (default 0). | |
| featured | No | If true (default), return only featured vibes. | |
| books_per_vibe | No | Books to include per vibe (default 10, max 50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that each vibe embeds its books (relevant to books_per_vibe), but it says nothing about read-only safety, rate limits, or pagination behavior. It adds some shape-of-result context beyond the schema without fully covering 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?
Two tight sentences, zero waste, with the resource definition front-loaded so an agent grasps the tool in one pass.
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?
No output schema exists, so the description rightly notes the return shape ('each vibe includes its books'). Combined with fully covered parameters, this is adequate for a simple read-only list tool, though it could say more about default featured filtering and result volume.
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, offset, featured, and books_per_vibe are all already documented with defaults and maxes. The description adds nothing beyond the schema, which is the baseline-3 case; 'Each vibe includes its books' loosely relates to books_per_vibe but adds no syntax or semantics.
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 clear verb ('List') and a specific resource ('Hardcover vibes'), and defines the domain term as curated, themed recommendation collections with a concrete example. It doesn't explicitly contrast with siblings like get_list or get_trending_books, so it falls short of a 5, but the resource is 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?
No guidance on when to use this versus alternatives such as get_list or get_trending_books, and no prerequisites or exclusions stated. Use is only implied by the 'List' verb; the agent must infer the browsing/recommendation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meA
Get authenticated user info (id, username, name, books count).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly indicates a read operation ('Get') and implies authentication requirements via 'authenticated user info', but does not disclose error handling, rate limits, or what happens if unauthenticated.
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 a single, concise sentence that front-loads the essential information: action, resource, and key returned fields. No extraneous words.
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 has no parameters, no output schema, and is a straightforward self-info retrieval, the description provides sufficient context. It covers the main use case and returned fields, though it lacks details on error scenarios or response format.
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 zero parameters, and the schema coverage is 100%. The description adds value by specifying the exact fields returned, which compensates for the lack of parameter documentation.
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 action 'Get' and the resource 'authenticated user info', listing specific fields (id, username, name, books count). It distinguishes itself from siblings that target other entities like books, authors, or lists.
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 it should be used to retrieve current user profile details, but does not explicitly state when to use or not use it, nor mention alternatives. Given the simplicity of the tool, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_book_from_listB
Remove a book from a list. Use id or list_id + book_id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | list_book ID. If unknown, use list_id + book_id. | |
| book_id | No | Book ID (use with list_id to find list_book). | |
| list_id | No | List ID (use with book_id to find list_book). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It only states the removal action but does not mention side effects, required permissions, error cases, or what happens to the book (e.g., it remains in the library). This is insufficient for a mutation tool.
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 short sentences with no unnecessary words. Every sentence provides essential information, making it highly concise and well-structured.
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 no output schema and the tool's action (deleting an association), the description is incomplete. It lacks details on permissions, what happens to the book itself, and error handling (e.g., if the list_book doesn't exist).
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%, providing baseline 3. The description adds value by explaining the alternative identification methods ('Use id or list_id + book_id'), clarifying how the parameters relate. This goes beyond 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 clearly states the action (remove) and the resource (book from a list). However, it does not explicitly differentiate from siblings like delete_list or add_book_to_list, which would enhance clarity.
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 provides parameter usage guidance ('Use id or list_id + book_id') but no context on when to use this tool versus alternatives like delete_list or remove_book_from_list's inverse. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_booksC
Search Hardcover by title, author, or ISBN. Supports multiple entity types: books (default), authors, series, lists, users, publishers, characters, and prompts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| sort | No | Typesense sort expression, e.g. 'rating:desc' or 'users_count:desc' for most popular first. | |
| query | Yes | Search query (title, author name, ISBN, etc.). | |
| per_page | No | Results per page (default 10, max 25). | |
| filter_by | No | Typesense filter expression, e.g. 'release_year:>2020' or 'release_year:[2020..2024]'. | |
| query_type | No | Entity type to search (default: 'Book'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses little: no return format, no pagination behavior (page/per_page live only in the schema), no ranking or rate-limit notes. The one behavioral claim, multi-entity support, largely repeats the enum already present in the schema.
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?
Two tight sentences with the core capability front-loaded and the entity-type scope second. Nothing is padded or redundant, though the second sentence is essentially a summary of the query_type enum.
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?
With no annotations and no output schema, the description should do more to explain what a search returns and how results differ per entity type. Parameter documentation is covered by the schema, but the absence of any behavioral or result-shape context leaves a moderate gap for a 6-parameter search 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 100%, so the schema already documents query, page, per_page, sort, filter_by, and the query_type enum. The description only restates the query target (title/author/ISBN) and the entity types, adding no syntax or format detail beyond the schema, 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?
States a specific verb and resource with scope: searching Hardcover by title, author, or ISBN. It also names the supported entity types, so the agent can distinguish a free-text search from the get_* siblings that fetch a single entity. It stops short of explicitly contrasting itself with those getters.
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 or when-not-to-use guidance is given. It never says to prefer this over get_book/get_author when you have an ID rather than a query string, nor does it mention any prerequisites. The entity-type list hints at scope but is not framed as usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_edition_ownedA
Mark an edition as owned or not owned. Use get_edition to find the edition ID first.
| Name | Required | Description | Default |
|---|---|---|---|
| owned | Yes | true to mark as owned, false to un-own. | |
| edition_id | Yes | Edition ID (from get_edition). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It indicates a mutable action (to set ownership), but lacks details on effects (e.g., overwrites previous status, permissions required, confirmation messages). For a simple boolean toggle, this may be sufficient but is minimal.
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?
Two concise sentences: first states the main action, second gives a clear prerequisite. No redundant information; every word earns its place.
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 no output schema, the description does not explain return values, but for a simple mutation tool with two well-described parameters, the provided information is largely sufficient to use it correctly. Could be improved by noting what the tool returns or confirms.
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 parameters well-described. The description adds little beyond the schema: it restates the ownership marking and prerequisite. Baseline of 3 is appropriate as schema already explains parameters.
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?
Clearly states the action 'mark an edition as owned or not owned' and identifies the resource (edition). Additionally, provides a prerequisite (use get_edition to find edition ID), which helps distinguish it from sibling tools like get_owned_books.
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?
Explicitly instructs to use get_edition first to find the edition ID, providing clear context for when to use the tool. However, it does not mention when not to use it or compare with other ownership-related sibling tools like set_user_book.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_reading_goalB
Create or update a reading goal with target, metric, dates, and optional description/privacy.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Target count to reach by end_date. | |
| metric | Yes | Goal metric: 'book' or 'page'. | |
| end_date | Yes | End date (ISO 8601, e.g. '2026-12-31'). | |
| start_date | Yes | Start date (ISO 8601, e.g. '2026-01-01'). | |
| description | No | Optional goal description. | |
| privacy_setting_id | No | Optional privacy setting ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It indicates a mutation ('create or update') but fails to explain whether it overwrites existing goals, idempotency, required permissions, or side effects. This is insufficient for a write operation.
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 a single, concise sentence that front-loads the action and resource. However, it may be slightly too brief given the tool's complexity. Still, no wasted words.
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?
With 6 parameters, no output schema, and no annotations, the description should provide more context about return values, error handling, and update semantics. It currently lacks essential behavioral details for a mutation 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?
Input schema coverage is 100% with each parameter described. The description adds a high-level summary ('target, metric, dates, and optional description/privacy') but does not provide additional meaning beyond the schema. Baseline score of 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?
The description clearly states the action ('Create or update'), the resource ('reading goal'), and the key parameters (target, metric, dates, optional description/privacy). It effectively distinguishes from sibling tools that deal with books, lists, journals, etc., which are mentioned in the context.
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 does not provide any guidance on when to use this tool versus alternatives like 'get_reading_goal' or other mutation tools. It omits when to create vs. update, or any prerequisites or exclusions. No sibling differentiation is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_user_bookA
Set a book's status, rating, review, privacy, and private notes. Preserves unspecified fields.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | No | Rating (e.g. 4.0, 3.5). Omit to leave unchanged. | |
| status | No | Status name (e.g. 'Read') or numeric ID (1-5). | |
| book_id | Yes | Hardcover book ID. | |
| privacy | No | Privacy setting: 'Public', 'Followers', or 'Private' (or numeric ID 1/2/3). | |
| edition_id | No | Edition ID (from get_edition). Sets which edition you're reading. | |
| review_raw | No | Plain-text review content (converted to Slate format). | |
| reviewed_at | No | ISO date of the review (e.g. '2025-06-01'). | |
| private_notes | No | Private notes visible only to you. | |
| review_has_spoilers | No | Whether the review contains spoilers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals that unspecified fields are preserved (a partial update hint), but it omits prerequisite details (e.g., book must exist in user's library) and potential side effects (e.g., overwriting existing data). The description is adequate but not thorough.
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 consists of two short sentences (14 words) that front-load the main purpose. Every word is necessary; there is no fluff.
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 9 parameters, no output schema, and no annotations, the description is minimal. It does not cover return values, error conditions, or prerequisites like book ownership. However, the schema handles parameter details, so it reaches a minimally acceptable completeness.
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%, so the baseline is 3. The description adds 'Preserves unspecified fields' as behavioral context for the many optional parameters, but does not explain individual parameter semantics beyond what the schema provides.
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 verb 'Set' and the resource 'book's status, rating, review, privacy, and private notes', making its specific action evident. It distinguishes from siblings like add_user_book_read (new read), delete_user_book (deletion), and get_user_book (retrieval).
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 mentions 'Preserves unspecified fields', which implies partial updates, but does not explicitly contrast with siblings like add_user_book_read (adds a new read) or delete_user_book. No when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfollow_userB
Unfollow a Hardcover user by user_id or username.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Hardcover user ID to unfollow. | |
| username | No | Username to unfollow (resolved to an ID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says nothing about whether unfollowing a non-followed user errors out, whether the operation is idempotent, what permissions or authentication are needed, or what the response contains. For a mutation tool with zero annotation coverage this is a real gap.
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; the verb and resource appear first and the accepted inputs follow. Nothing is wasted.
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?
Adequate for a simple two-parameter mutation with a fully documented schema, but with no annotations and no output schema the description should at least state idempotency/error behavior and whether auth is required. An agent can call it, but cannot predict edge-case outcomes.
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%, so the schema already documents both parameters including the 'resolved to an ID' detail for username. The description adds only the OR relationship between the two parameters, which is the baseline expectation when the schema does the heavy lifting.
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 ('Unfollow') and resource ('a Hardcover user') plus the two accepted identifiers, which is enough for an agent to distinguish it from read-only siblings. It does not explicitly name follow_user as the inverse, so sibling differentiation is only implied by the name.
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 'by user_id or username' hints at the either/or input choice, but there is no guidance on when to prefer one identifier, no prerequisites, and no mention of follow_user as the alternative operation. Usage is inferable but not taught.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listA
Update an existing Hardcover list's name, description, or privacy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Hardcover list ID. | |
| name | No | New name. | |
| privacy | No | Privacy: 'public', 'followers_only', 'private'. | |
| description | No | New description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the update behavior but lacks additional behavioral context such as error states, permissions, or side effects. No annotations are provided, so the description carries full burden but is minimal.
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 a single concise sentence, front-loaded with the key action and resource. No unnecessary words.
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 description is minimal and adequate for a simple update, but lacks details on error handling, return behavior, or idempotency. Given no annotations or output schema, more context would improve completeness.
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 clear parameter descriptions. The description's mention of 'name, description, or privacy' adds no new meaning beyond the schema, so 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?
The description clearly identifies the tool as updating an existing Hardcover list, naming specific fields (name, description, privacy). It differentiates from siblings like create_list, delete_list, and get_list by using 'update'.
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 for modifying a list's fields but offers no explicit guidance on when to use this tool versus alternatives. No context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_user_book_readA
Update a reading date or progress entry. Preserves unspecified fields. Supports page progress and audiobook time tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The user_book_read ID to update. | |
| edition_id | No | Edition ID (required for audiobook progress tracking). | |
| started_at | No | Date started reading (ISO 8601). | |
| finished_at | No | Date finished reading (ISO 8601). | |
| progress_pages | No | Pages read so far. | |
| progress_seconds | No | Seconds of audiobook listened to so far. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses key behavioral trait: 'Preserves unspecified fields' indicating partial update semantics. Also reveals support for page and audiobook progress tracking. No annotations present, so description carries full burden; it adequately covers mutation effects but lacks details on side effects or authorization.
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?
Three sentences, each purposeful: first states action, second adds behavioral constraint, third lists capabilities. No redundant or filler content; front-loaded with core purpose.
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 moderate-complexity update tool with 6 parameters and no output schema, description covers purpose, partial update, and supported progress types. Could mention idempotency or return value expectations, but overall sufficient for competent usage.
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 covers all parameters (100%) so baseline is 3. Description adds value by summarizing partial update behavior and progress tracking context, which helps interpret optional parameters. Does not add new detail beyond schema for individual parameters, but high-level semantics are clarified.
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?
Description clearly states verb 'Update' and resource 'reading date or progress entry'. Distinguishes from sibling tools like 'add_user_book_read' or 'delete_user_book_read' by focusing on modification. Explicitly mentions preservation of unspecified fields and support for two progress types, adding specificity.
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?
Description implies use for modifying existing entries but does not explicitly state when to use versus alternatives like creating or deleting. No 'when not to use' or comparison to other update tools provided.
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.
7 tool updates
v0.7.1- Added
follow_user - Added
get_activity_feed - Added
get_trending_books - Added
get_user - Added
get_vibes - Changed
search_books2 fields changed- added
Input schema / properties / filter_byAdded value: +{ + "description": "Typesense filter expression, e.g. 'release_year:>2020' or 'release_year:[2020..2024]'.", + "type": "string" +} - added
Input schema / properties / sortAdded value: +{ + "description": "Typesense sort expression, e.g. 'rating:desc' or 'users_count:desc' for most popular first.", + "type": "string" +}
- Added
unfollow_user
2 tool updates
v0.6.0- Added
answer_prompt - Added
get_prompts
4 tool updates
v0.5.0- Changed
add_user_book_read1 field changed- added
Input schema / properties / edition_idAdded value: +{ + "description": "Edition ID (required for audiobook progress tracking).", + "type": "integer" +}
- Added
get_characters - Added
get_publisher - Changed
update_user_book_read1 field changed- added
Input schema / properties / edition_idAdded value: +{ + "description": "Edition ID (required for audiobook progress tracking).", + "type": "integer" +}
29 tool updates
v0.4.0- First observed
add_book_to_list - First observed
add_journal_entry - First observed
add_user_book_read - First observed
create_list - First observed
delete_journal_entry - First observed
delete_list - First observed
delete_user_book - First observed
delete_user_book_read - First observed
get_author - First observed
get_book - First observed
get_edition - First observed
get_list - First observed
get_my_lists - First observed
get_owned_books - First observed
get_reading_goal - First observed
get_reading_journal - First observed
get_reading_stats - First observed
get_series - First observed
get_user_book - First observed
get_user_library - First observed
get_user_reviews - First observed
me - First observed
remove_book_from_list - First observed
search_books - First observed
set_edition_owned - First observed
set_reading_goal - First observed
set_user_book - First observed
update_list - First observed
update_user_book_read
TDQS
Scored across 39 tools
Most tools have clearly distinct resource/action purposes, but there is some overlap among read surfaces: get_activity_feed, get_reading_journal, and get_user_reviews all expose review/activity data. Similarly, search_books can return authors, series, lists, and users that also have dedicated getter tools, though descriptions generally clarify the intended use.
The set mostly follows a predictable snake_case verb_noun pattern with clear prefixes like get_, set_, add_, update_, delete_, and create_. Minor deviations exist, such as the standalone 'me', 'get_reading_journal' versus 'add_journal_entry'/'delete_journal_entry', and 'get_my_lists' versus other get_user_* tools.
With 39 tools, the server is heavy relative to typical MCP tool sets and exceeds the 25+ threshold that usually signals over-expansion. While Hardcover is a broad domain, several tools could likely be consolidated or grouped to reduce selection burden.
Coverage is broad: books, editions, authors, publishers, users, lists, journal entries, reading goals, owned books, prompts, and social follow actions are all represented. Minor gaps remain, such as updating journal entries, deleting reading goals, managing followers/following lists, or removing prompt answers.
Maintenance
Related MCP Connectors
- LeafOAuthapp.readwithleaf
AI assistant integration for Leaf — track books, log reading sessions, and manage your library.
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
Search books and authors, fetch editions, browse subjects, and resolve cover images.
Search books, authors and series, get recommendations, and manage your own reading shelves.
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 gradedqualityCmaintenanceProvides AI assistants with direct access to your ebook library, enabling listing books, reading chapters, and searching across books via the Model Context Protocol.MIT
- FlicenseAqualityCmaintenanceEnables AI assistants to interact with BookLore self-hosted libraries, allowing natural language queries to search books, manage reading status, ratings, series, authors, and highlights.71-
- FlicenseAqualityDmaintenanceConnects AI assistants to the Open Library API for searching books and authors, retrieving metadata, and comparing works.12-