Skip to main content
Glama
chepetime

Calibre Librarian MCP Server

by chepetime

Calibre Librarian MCP Server

MCP

Model Context Protocol (MCP) server that surfaces your Calibre catalog to Claude via xmcp.

Requirements

  • Node.js: v24.13.0 (auto-managed if you use nvm use).

  • pnpm: version 10.28.0 or newer.

  • Calibre CLI tools: calibredb and ebook-convert must be installable on your PATH.

  • Environment variables:

    • CALIBRE_LIBRARY_PATH – absolute path to your Calibre library directory.

    • CALIBRE_DB_COMMAND – location of the calibredb executable (e.g., /opt/homebrew/bin/calibredb).

    • FAVORITE_SEARCH_ENGINE_URL – base URL used when the server offers external book lookups (defaults to DuckDuckGo: https://duckduckgo.com/?q=).

Related MCP server: obsidian-mcp-server

Setup

  1. Clone and enter the repo:

    git clone https://github.com/chepetime/calibre-librarian-mcp.git
    cd calibre-librarian-mcp
  2. Install dependencies with pnpm:

    pnpm install
  3. Copy the sample environment file and fill in your paths:

    cp .env.example .env

Update the variables so the server can reach your Calibre library.

The env is just for local development. For Claude Desktop, you'll need to configure the server in the Claude Desktop settings.

Local development workflow

Use these scripts while iterating locally:

  • pnpm run dev – watches files and serves the MCP server over stdio.

  • pnpm run lint – type-checks and lints the project.

  • pnpm test – runs the full unit test suite once.

  • pnpm test:watch – reruns tests whenever source files change.

Build for Claude Desktop (no Docker)

Follow this flow when you want Claude Desktop (or any MCP client) to run the compiled server directly:

  1. Build the project so dist/stdio.js exists:

    pnpm run build
  2. (Optional) Run the built output locally for a quick smoke test:

    pnpm start  # equivalent to: node dist/stdio.js
  3. Configure Claude Desktop by editing ~/Library/Application Support/Claude/claude_desktop_config.json (or via the in-app UI). Set command to node, include the absolute path to dist/stdio.js as the first args entry, and provide the required environment variables:

{
  "globalShortcut": "",
  "mcpServers": {
    "calibre-librarian": {
      "command": "node",
      "args": ["/Users/you/path/to/calibre-librarian-mcp/dist/stdio.js"],
      "env": {
        "CALIBRE_LIBRARY_PATH": "<Absolute path to your>/Calibre",
        "CALIBRE_DB_COMMAND": "/opt/homebrew/bin/calibredb",
        "FAVORITE_SEARCH_ENGINE_URL": "https://duckduckgo.com/?q="
      }
    }
  },
  "preferences": {
    "quickEntryShortcut": "off",
    "menuBarEnabled": false
  }
}

After Claude Desktop reloads, it will list calibre-librarian as an available MCP server whenever MCP-enabled conversations start.

Docker deployment

Run the server in a container with Calibre pre-installed when you prefer an isolated environment.

Quick start

# Build the image
docker build -t calibre-librarian-mcp .

# Run with your Calibre library mounted
docker run -it \
  -v /path/to/your/calibre/library:/library:ro \
  -e CALIBRE_LIBRARY_PATH=/library \
  calibre-librarian-mcp

Docker Compose

  1. Copy and customize docker-compose.yml.

  2. Set your library path and launch the stack:

    export CALIBRE_LIBRARY_PATH=/path/to/your/calibre/library
    docker compose up --build

Claude Desktop with Docker

To let Claude Desktop run the container directly, point it at docker run:

{
  "mcpServers": {
    "calibre-librarian": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "/path/to/your/calibre/library:/library:ro",
        "-e",
        "CALIBRE_LIBRARY_PATH=/library",
        "calibre-librarian-mcp"
      ]
    }
  }
}

Note: Remove :ro from the volume mount and add -e CALIBRE_ENABLE_WRITE_OPERATIONS=true to enable write operations.

Tool Catalog & Examples

Installing the MCP CLI

The examples below use the mcp CLI published by Anthropic. Install (or run) it with any of the following options:

  • Global install (recommended if you call MCP tools frequently):

    npm install -g @anthropic-ai/mcp-cli
    # now `mcp --help` should work
  • One-off execution without a global install:

    npx @anthropic-ai/mcp-cli --help
    # or
    pnpm dlx @anthropic-ai/mcp-cli --help

CLI usage

All tools can be invoked from MCP Inspector or the CLI:

mcp call calibre-librarian <toolName> '<json payload>'

Prompts (e.g., merge_duplicates, library_cleanup, search_library) use the companion command:

mcp prompt calibre-librarian library_cleanup '{"focus":"missing covers"}'

Swap library_cleanup for any prompt listed below, and replace calibre-librarian with the server name you configured in mcp.json.

Library Overview & Metadata

Tool

Example

list_sample_books

mcp call calibre-librarian list_sample_books '{"limit":5}'

get_book_details

mcp call calibre-librarian get_book_details '{"bookId":42}'

get_library_stats

mcp call calibre-librarian get_library_stats '{}'

get_all_tags

mcp call calibre-librarian get_all_tags '{"sortBy":"count","minCount":5}'

get_custom_columns

mcp call calibre-librarian get_custom_columns '{"includeDisplay":true}'

Search & Discovery

Tool

Example

search_books

mcp call calibre-librarian search_books '{"query":"author:Sanderson and tag:fantasy","limit":10}'

search_books_by_title

mcp call calibre-librarian search_books_by_title '{"title":"stormlight","exact":false}'

search_authors_by_name

mcp call calibre-librarian search_authors_by_name '{"name":"ng","sortBy":"count"}'

get_books_by_author

mcp call calibre-librarian get_books_by_author '{"author":"Robin Hobb","sortBy":"series","ascending":true}'

get_books_by_author_id

mcp call calibre-librarian get_books_by_author_id '{"authorId":17}'

get_books_by_series

mcp call calibre-librarian get_books_by_series '{"series":"The Expanse","exact":true}'

get_books_by_tag

mcp call calibre-librarian get_books_by_tag '{"tag":"cozy mystery","limit":25}'

search_books_by_tag_pattern

mcp call calibre-librarian search_books_by_tag_pattern '{"pattern":"*punk","limit":10}'

Full-Text & Content Access

Tool

Example

full_text_search

mcp call calibre-librarian full_text_search '{"query":"\"winter is coming\"","matchAll":false}'

search_book_content

mcp call calibre-librarian search_book_content '{"bookId":12,"query":"quantum","contextChars":120}'

fetch_excerpt

mcp call calibre-librarian fetch_excerpt '{"bookId":8,"maxChars":1500}'

Cleanup & Duplicate Workbench

Tool

Example

find_duplicates

mcp call calibre-librarian find_duplicates '{"mode":"author_title","threshold":0.85}'

compare_books

mcp call calibre-librarian compare_books '{"bookIds":[101,205],"fields":["title","series","formats"]}'

quality_report

mcp call calibre-librarian quality_report '{"checks":["missing_cover","missing_tags"],"limit":20}'

merge_duplicates prompt

mcp prompt calibre-librarian merge_duplicates '{"bookIds":[101,205]}'

library_cleanup prompt

mcp prompt calibre-librarian library_cleanup '{"focus":"missing covers"}'

search_library prompt

mcp prompt calibre-librarian search_library '{"query":"hopepunk","searchType":"tag"}'

Smart Maintenance Recipes

Tool

Example

normalize_author_sort

mcp call calibre-librarian normalize_author_sort '{"preview":true,"limit":25}'

bulk_retag

mcp call calibre-librarian bulk_retag '{"query":"author:Sanderson","action":"add","tags":"cosmere","preview":true}'

library_maintenance

mcp call calibre-librarian library_maintenance '{"operation":"check"}'

missing_book_scout

mcp call calibre-librarian missing_book_scout '{"readingList":"Dune\n1984\nThe Hobbit","searchEngine":"annas_archive"}'

Metadata Editing & Custom Columns

Requires CALIBRE_ENABLE_WRITE_OPERATIONS=true

Tool

Example

set_custom_column

mcp call calibre-librarian set_custom_column '{"bookId":42,"column":"#reading_status","value":"Started"}'

set_metadata

mcp call calibre-librarian set_metadata '{"bookId":42,"title":"The Final Empire (Revised)","tags":["cosmere","favorite"]}'

Setup & Configuration Tools

Tool

Example

generate_claude_config

mcp call calibre-librarian generate_claude_config '{"enableWrites":false}'

Environment Variables

Variable

Required

Default

Description

CALIBRE_LIBRARY_PATH

Yes

Absolute path to your Calibre library directory

CALIBRE_DB_COMMAND

No

calibredb

Path to the calibredb executable

CALIBRE_COMMAND_TIMEOUT_MS

No

15000

Timeout for calibredb commands in milliseconds

CALIBRE_ENABLE_WRITE_OPERATIONS

No

false

Enable metadata editing tools (set_metadata, etc.)

FAVORITE_SEARCH_ENGINE_URL

No

https://duckduckgo.com/?q=

Base URL for external book search links

MCP_SERVER_NAME

No

Calibre Librarian MCP

Server name shown in MCP clients

Resources

The server exposes these MCP resources:

URI

Description

calibre://library/info

Library configuration and statistics

calibre://library/custom-columns

Custom column definitions

calibre://docs/inspector-guide

MCP Inspector verification guide

Troubleshooting

"calibredb: command not found"

The server can't find the Calibre CLI tools. Solutions:

  • macOS (Homebrew): brew install calibre or set CALIBRE_DB_COMMAND=/Applications/calibre.app/Contents/MacOS/calibredb

  • macOS (App): CALIBRE_DB_COMMAND=/Applications/calibre.app/Contents/MacOS/calibredb

  • Windows: CALIBRE_DB_COMMAND=C:\Program Files\Calibre2\calibredb.exe

  • Linux: Install Calibre via package manager, usually adds calibredb to PATH

"Library path does not exist"

Verify your CALIBRE_LIBRARY_PATH:

# Check the path contains metadata.db
ls "$CALIBRE_LIBRARY_PATH/metadata.db"

"Write operations are disabled"

Write tools (set_metadata, set_custom_column, bulk_retag with preview:false, etc.) require:

CALIBRE_ENABLE_WRITE_OPERATIONS=true

Add this to your .env file or Claude Desktop config.

"Command timed out"

For large libraries, increase the timeout:

CALIBRE_COMMAND_TIMEOUT_MS=60000  # 60 seconds

"Full-text search returns no results"

Calibre FTS must be enabled:

  1. Open Calibre

  2. Go to Preferences → Searching

  3. Enable Full text searching

  4. Click Re-index all books

Server not appearing in Claude Desktop

  1. Verify the config file path:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  2. Check JSON syntax is valid

  3. Restart Claude Desktop completely

  4. Check Claude Desktop logs for errors

Testing with MCP Inspector

Use the built-in verification guide:

# Start dev server
npm run dev

# In another terminal, run inspector
npx @anthropic/mcp-inspector

Or use the generate_claude_config tool to get your configuration.

License

MIT

Available Tools

26 tools
bulk_retagBulk retagA
Destructive

Add, remove, or replace tags for books matching a search query. Useful for bulk organization tasks like categorizing all books by an author or cleaning up tag names.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTags to add/remove (comma-separated). For 'replace' action, format as 'old_tag:new_tag'.
limitNoMaximum books to process (default: 50).
queryYesCalibre search query to find books to retag. Examples: 'author:Sanderson', 'tag:fiction', 'series:Cosmere'.
actionYesAction to perform: 'add' tags to existing, 'remove' specific tags, 'replace' old tag with new.
previewNoIf true (default), only show what would be changed. Set to false to apply changes.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions the preview parameter (default true) to show changes without applying them, and that setting preview to false applies changes. This aligns with the destructiveHint annotation. However, it could further emphasize the irreversible nature of the action when preview is false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two sentences that convey purpose and usage. There is no redundancy or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers key aspects like action types, preview mode, and limit. However, it does not explain the return format (e.g., summary of changes) or edge cases like empty query results. Given the complexity and destructive nature, slightly more detail could be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters have descriptions in the schema (100% coverage). The description adds minimal extra value, such as providing search query examples. Since the schema already covers semantics well, the description does not significantly enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool adds, removes, or replaces tags for books matching a search query. It uses a specific verb and resource, and distinguishes from sibling tools like search or get operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides examples of when to use the tool, such as categorizing all books by an author or cleaning up tag names. However, it does not explicitly state when not to use it or compare with alternatives like individual retagging.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_booksCompare booksA
Read-onlyIdempotent

Compare metadata between multiple books side-by-side. Useful for deciding which duplicate to keep, verifying metadata consistency, or identifying differences between editions. Highlights differences between books.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoSpecific fields to compare. If not provided, compares all common fields.
bookIdsYesList of 2-5 book IDs to compare.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, not destructive. The description adds 'highlights differences between books' which reinforces the read-only nature. No contradictions and sufficient context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences front-load the action and use cases. Every word contributes value; no redundant or extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two parameters, clear annotations, no output schema needed), the description fully covers what the tool does, when to use it, and its behavior. No missing information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear descriptions for both parameters (bookIds range 2-5, fields optional list). The main description adds minimal extra meaning; it mentions side-by-side and differences but does not enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Compare' and the resource 'metadata between multiple books'. It distinguishes from siblings like find_duplicates and set_metadata by focusing on side-by-side comparison for deduplication and consistency checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit contexts: deciding duplicates, verifying consistency, identifying edition differences. It implies when to use, though it does not explicitly state when not to use or mention alternatives like find_duplicates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_excerptFetch book excerptA
Read-onlyIdempotent

Fetch a short text excerpt from a book's content. Extracts the beginning of a book to preview its content. Useful for checking writing style, confirming the right book, or getting a taste of the content.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookIdYesCalibre book ID to fetch excerpt from.
formatNoPreferred format to extract from. If not specified, uses the first available format.
maxCharsNoMaximum characters to return (default: 2000, max: 10000). Keeps excerpts brief.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that it fetches a 'short' excerpt from the 'beginning' for preview, which is consistent and helpful. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences), front-loaded with the core action, and each sentence serves a distinct purpose: purpose, scope, and use cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple retrieval tool with full schema coverage and clear annotations. It explains what, why, and when to use, requiring no further elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are fully documented in the schema. The description does not add any additional meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a short text excerpt from a book's content' and specifies it extracts the beginning, distinguishing it from sibling tools like full_text_search or get_book_details. Use cases are listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear use cases ('checking writing style, confirming the right book, or getting a taste'), but does not explicitly state when not to use it or compare to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_duplicatesFind duplicatesA
Read-onlyIdempotent

Find potential duplicate books in the library. Helps identify books that may have been added multiple times with slight variations in metadata. Returns groups of potentially duplicate books for review.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoDetection mode: 'title' (similar titles), 'author_title' (same author + similar title), 'identifier' (matching ISBN/ASIN).author_title
limitNoMaximum number of duplicate groups to return (default: 20).
bookIdNoOptional: Check for duplicates of a specific book. If not provided, scans entire library.
thresholdNoSimilarity threshold for title matching (0-1). Higher = stricter matching. Default: 0.8.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by clarifying that the tool returns groups of potentially duplicate books for review, which is a behavioral trait beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that are front-loaded with the main action. Every word adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters and no output schema, the description adequately explains the purpose and return type. It covers the main use case, though it could mention that groups include similarity scores or details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description briefly mentions detection modes but does not add significant meaning beyond the schema parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds potential duplicate books in the library, with specific verb 'find' and resource 'duplicate books'. It distinguishes from siblings like search_books or compare_books by focusing on deduplication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for deduplication but does not explicitly state when to use this tool versus alternatives like compare_books or search_books. No when-not or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_claude_configGenerate Claude configA
Read-onlyIdempotent

Generate Claude Desktop configuration for this MCP server. Outputs the JSON snippet to add to your Claude Desktop config file.

ParametersJSON Schema
NameRequiredDescriptionDefault
serverPathNoPath to the MCP server entry point. If not provided, attempts to detect it.
libraryPathNoCalibre library path. If not provided, uses current CALIBRE_LIBRARY_PATH.
enableWritesNoEnable write operations in the generated config.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds that it outputs a JSON snippet, but does not disclose additional behavioral traits such as permissions or 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words, effectively communicating the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and non-destructive nature, the description is adequate. It explains both the action and the output, though it could briefly mention that no side effects occur.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 meaning beyond the parameter descriptions already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates Claude Desktop configuration for this MCP server and outputs a JSON snippet, which is distinct from all sibling tools that deal with Calibre book operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for adding config to Claude Desktop, but it does not provide explicit guidance on when or when not to use this tool, nor does it mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_tagsGet all tagsA
Read-onlyIdempotent

List all tags in the Calibre library with book counts. Useful for exploring available categories, finding popular tags, or planning tag-based organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortByNoSort tags by name (alphabetical) or count (most used first).name
minCountNoOnly show tags with at least this many books (default: 0, show all).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by noting that book counts are returned, which is beyond the annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action, and each sentence provides useful information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, high schema coverage, and clear annotations, the description is fairly complete. It could optionally describe the return format in more detail, but the current level is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 both parameters fully. The description does not add extra meaning beyond the 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'all tags in the Calibre library with book counts'. It distinguishes itself from sibling tools, none of which list all tags, so the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions use cases like exploring categories and planning organization, providing some context. However, it does not explicitly state when to use this tool versus alternatives, nor does it include when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_book_detailsGet book detailsA
Read-onlyIdempotent

Get detailed metadata for a specific book by its Calibre ID. Returns title, authors, tags, formats, identifiers, publication info, and more.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookIdYesThe Calibre book ID to retrieve details for.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds value by listing some return fields (title, authors, tags, etc.), but does not cover all possible return data or error behavior. It is adequate but not rich in behavioral detail beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences that immediately convey the action, target, and output. No wasted words, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one parameter and no output schema, the description covers the main purpose and return fields. It could mention error handling (e.g., missing book ID) but overall is fairly complete given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a clear description for the single parameter 'bookId'. The tool description does not add additional meaning or context beyond what is in the schema. With 100% schema coverage, baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'detailed metadata', and the specific identifier 'Calibre ID'. It distinguishes from sibling tools that retrieve books by author, tag, or series, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly guides usage by specifying 'by its Calibre ID', indicating when to use this tool. However, it does not explicitly state when not to use it or mention alternative tools for other lookup scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_books_by_authorGet books by authorA
Read-onlyIdempotent

Get all books by a specific author. Returns book details including title, series, tags, and formats. Use search_authors_by_name first if you need to find the exact author name.

ParametersJSON Schema
NameRequiredDescriptionDefault
exactNoIf true, match the exact author name. If false (default), perform a partial/contains search.
limitNoMaximum number of results to return (default: 50, max: 100).
authorYesAuthor name to search for. Partial matches supported (e.g., 'Tolkien' finds books by 'J.R.R. Tolkien').
sortByNoField to sort results by (default: title).title
ascendingNoSort in ascending order (default: true).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that it returns book details (title, series, tags, formats), which is useful context but does not disclose any behavioral traits beyond what annotations imply (e.g., no mention of rate limits or pagination).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences: first states the purpose, second provides a usage hint. Every sentence earns its place with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 adequately covers what it returns and provides a workflow hint. It is complete enough for a read-only tool with good annotations, but could mention sorting/limiting behavior more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 does not add any additional meaning to the parameters beyond what is already in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all books by a specific author, specifying the verb 'get' and resource 'books by author'. It mentions a sibling tool (search_authors_by_name) but does not explicitly distinguish from get_books_by_author_id or search_books, which are also siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using search_authors_by_name first for exact name lookup, providing a clear usage guideline. However, it lacks guidance on when not to use this tool (e.g., if you have author ID) or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_books_by_author_idGet books by author IDA
Read-onlyIdempotent

Get all books by a specific Calibre author ID. More precise than searching by name when dealing with authors who have similar names. Use search_authors_by_name to find author IDs first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 50, max: 100).
sortByNoField to sort results by (default: title).title
authorIdYesCalibre author ID. Use search_authors_by_name to find author IDs.
ascendingNoSort in ascending order (default: true).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. Description adds minimal extra context (precision advantage, workflow step) but does not elaborate on return behavior, error handling, or pagination details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no unnecessary words. First sentence states core function, second provides context and actionable guidance. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple list retrieval, the description covers purpose, usage context, and parameter semantics adequately. Could optionally note return format (list of books) to improve completeness, but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented there. The description's mention of 'specific Calibre author ID' echoes the schema's description for authorId without adding new semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Get' and resource 'books by a specific Calibre author ID'. It clearly distinguishes from sibling tools like 'get_books_by_author' by emphasizing precision with exact IDs and directs users to 'search_authors_by_name' for ID lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (when author ID is known) and why it's better than name-based search. Names the alternative 'search_authors_by_name' for finding IDs, providing clear workflow guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_books_by_seriesGet books by seriesA
Read-onlyIdempotent

Get all books in a series with proper reading order. Books are sorted by series index to show the correct sequence. Useful for finding what books are in a series and planning reading order.

ParametersJSON Schema
NameRequiredDescriptionDefault
exactNoIf true, match the exact series name. If false (default), perform a partial/contains search.
limitNoMaximum number of results to return (default: 50, max: 100).
seriesYesSeries name to search for. Partial matches supported (e.g., 'Stormlight' finds 'The Stormlight Archive').

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds behavioral detail beyond annotations by specifying that books are sorted by series index, which is valuable context not available in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no waste, front-loaded with the core purpose. Every sentence is informative and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 covers purpose, usage, and sorting. It does not describe the return format, but with well-known sibling tools like get_book_details, the agent can infer expected fields. Minor gap but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 extra meaning by noting 'Partial matches supported' for the series parameter and reinforcing the sorting behavior, which adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all books in a series with proper reading order' and mentions sorting by series index, distinguishing it from sibling tools like search_books or get_books_by_author.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states it is 'useful for finding what books are in a series and planning reading order,' providing clear usage context, but does not explicitly state when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_books_by_tagGet books by tagA
Read-onlyIdempotent

Get all books with a specific tag. Useful for browsing themed collections or finding books in a category. Use get_all_tags to discover available tags first.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag to search for. Use get_all_tags to see available tags in your library.
exactNoIf true (default), match the exact tag. If false, perform a partial/contains search.
limitNoMaximum number of results to return (default: 50, max: 100).
sortByNoField to sort results by (default: title).title
ascendingNoSort in ascending order (default: true).

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. Description adds the behavioral detail that it returns all books with a given tag, which is consistent. Adds moderate value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded with the core purpose and a key usage tip. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, list-style tool with good annotations and full schema coverage, the description is complete enough. It covers what the tool does, when to use it, and a prerequisite action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage, so parameters are well-documented. Description adds value by noting that get_all_tags should be used first to discover tags, aiding correct usage of the tag parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get all books with a specific tag' with specific verb and resource, and distinguishes itself from sibling tools like get_books_by_author or search_books by focusing on tag-based retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to first use get_all_tags to discover available tags, providing clear context on when to use. Does not mention alternatives like search_books_by_tag_pattern, but the guidance is helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_custom_columnsGet custom columnsA
Read-onlyIdempotent

List all custom columns defined in the Calibre library. Custom columns allow users to add their own metadata fields (e.g., 'Read Status', 'Owned Format', 'Priority'). Returns column names, labels, and data types.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailsNoIf true, include detailed information about each column (data type, display options). Default: false.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive. Description adds context about the nature of custom columns and return fields, which is consistent and adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action, no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (no output schema, single optional parameter), the description sufficiently covers the tool's purpose and output. Could mention that column definitions are returned, not the actual values for books, but that's minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the details parameter fully described. Description does not add extra meaning beyond the schema, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'List' and resource 'custom columns'. Explanation of what custom columns are and what is returned (names, labels, data types) distinguishes it from sibling tools like get_all_tags or get_book_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States what the tool does but does not explicitly guide when to use it vs alternatives like set_custom_column or search_books. No when-not or exclusion clauses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_library_statsGet library statisticsA
Read-onlyIdempotent

Get library statistics including total book count, format breakdown, tag counts, author counts, and series counts. Useful for understanding the composition of your Calibre library.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description supplements this by listing the returned statistics, adding value beyond the annotations. It does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver the purpose and usage efficiently without any fluff. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description sufficiently explains the tool's outputs. It might benefit from mentioning that it aggregates data across the library, but it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema coverage is effectively 100%. The description adds no parameter info, but none is needed. Baseline is 4 given no param burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves library statistics and lists specific metrics (total book count, format breakdown, etc.), making the purpose unambiguous and distinguishing it from sibling tools that retrieve individual records or perform searches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains it is useful for understanding library composition, providing clear context for when to use it. However, it does not explicitly mention when not to use it or suggest alternatives, which keeps it from a top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

library_maintenanceLibrary maintenanceB
Destructive

Run Calibre library maintenance operations: check integrity, backup metadata to OPF files, embed metadata into book files, or vacuum the database. Some operations modify files.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookIdsNoComma-separated book IDs for embed_metadata. If not provided, processes all books.
operationYesMaintenance operation: 'check' (verify library integrity), 'backup_metadata' (save to OPF files), 'embed_metadata' (write metadata into book files), 'vacuum' (compact database).
onlyMissingCoversNoFor embed_metadata: only process books without embedded covers.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true and readOnlyHint=false. The description adds 'Some operations modify files' which aligns with the destructive hint but adds little context. It does not specify which operations are destructive or what other side effects occur (e.g., database compaction, metadata changes).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently lists the operations. It is concise and front-loaded, though slightly more structure (e.g., separating operations) could improve clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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, the description covers the core purpose and operations. However, it lacks information about expected outputs (e.g., success messages, logs), error handling, or prerequisites like library path. This gap reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains each parameter adequately. The description provides a brief mapping of operations but does not add new details beyond what is in the schema. Thus, baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs Calibre library maintenance operations and enumerates four specific operations (check, backup metadata, embed metadata, vacuum). This distinguishes it from sibling tools like set_metadata or compare_books.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists the operations but does not explicitly state when to use this tool versus alternatives like set_metadata or bulk_retag. The usage context is implied but lacks explicit guidance on when not to use it or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sample_booksList sample booksB
Read-onlyIdempotent

List a few books from the configured Calibre library using calibredb list.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of rows to return from the Calibre library.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds only the implementation detail 'using calibredb list', which provides minimal extra transparency. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 12 words, extremely concise and front-loaded with the core action. Every word is necessary and there is no wasted verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, the description lacks essential context such as what the output looks like (e.g., returned fields, format) and how 'sample books' are selected (e.g., random or first N). With no output schema, the description should fill this gap but does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already fully documents the single parameter 'limit' with default and description. The description adds no additional semantic value beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'list' and resource 'sample books from the configured Calibre library', making the tool's action unambiguous. However, it does not explicitly differentiate from sibling tools like search_books or get_book_details, so it falls short of a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention context, limitations, or exclusions, leaving the agent to infer usage without any explicit framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

missing_book_scoutMissing book scoutA
Read-onlyIdempotent

Check a reading list against your Calibre library. Reports which books you own and generates search links for missing titles. Great for processing 'to-read' lists or book recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
fuzzyMatchNoIf true (default), use fuzzy title matching. If false, require exact title match.
readingListYesReading list to check. One book per line. Format: 'Title' or 'Title by Author'. Example: The Hobbit by J.R.R. Tolkien Dune 1984 by George Orwell
searchEngineNoSearch engine for missing books: 'default' (uses FAVORITE_SEARCH_ENGINE_URL), 'annas_archive', 'goodreads', 'amazon', 'libgen'.default

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and idempotentHint=true, so the tool is known to be safe. The description adds behavioral context by stating the output includes a report of owned books and search links for missing titles, which goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The first sentence provides the core purpose, and the second gives a use-case example. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description hints at the return value (reports and search links) and covers the main functionality. It is complete enough for an agent to understand the tool's role without missing critical details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 all three parameters with descriptions. The tool's description does not add new parameter-specific information beyond summarizing the overall purpose, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks a reading list against the Calibre library, reports owned books, and generates search links for missing ones. This specific verb+resource combination distinguishes it from sibling search tools like search_books or compare_books.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Great for processing to-read lists or book recommendations,' providing clear context for when to use it. It does not specify when not to use it or list alternatives, but the context is sufficient for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

normalize_author_sortNormalize author_sortA
Destructive

Find and fix inconsistent author_sort values. Calibre uses author_sort for proper alphabetization (e.g., 'Tolkien, J.R.R.' for 'J.R.R. Tolkien'). Preview changes before applying.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum books to process (default: 50).
previewNoIf true (default), only show what would be changed. Set to false to apply changes.
authorIdNoOptional: Only normalize books by a specific author ID. Use search_authors_by_name to find IDs.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true, and the description adds value by explaining the preview option and the concept of author_sort normalization. It correctly characterizes the tool as potentially destructive and provides mitigation (preview). It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action. Every sentence is informative without redundancy. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity with no output schema. The description explains the purpose and preview feature but doesn't detail what 'inconsistent' means or the normalization logic. It is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description doesn't add extra meaning beyond the schema, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Find and fix' and the resource 'inconsistent author_sort values'. It provides an example of the correct format, making the purpose unambiguous. No sibling tool has this specific normalization focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when author_sort values are inconsistent, and it advises to preview changes before applying. This gives clear context, though it doesn't explicitly state when not to use it or compare to alternatives. The sibling list doesn't contain a similar tool, so no differentiation is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quality_reportQuality reportA
Read-onlyIdempotent

Generate a quality report for the library, identifying books with missing metadata, covers, or other issues. Helps prioritize cleanup tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum books to show per category (default: 25).
checksNoSpecific quality checks to run. If not provided, runs all checks.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and idempotentHint=true. The description confirms it's a report that identifies issues, adding no behavioral traits beyond what annotations offer. No contradiction, but limited additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the primary action and purpose, making it efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks information about the output format or return structure. For a report tool, an agent would benefit from knowing if the result is a list of books, counts per category, or downloadable file. This gap reduces completeness given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both limit and checks adequately described in the input schema. The description echoes 'missing metadata, covers, or other issues' which aligns with the checks enum, but adds no new parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a quality report and identifies books with missing metadata, covers, or other issues. It distinguishes itself from siblings like get_library_stats or find_duplicates by focusing on multiple quality checks for cleanup prioritization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for identifying cleanup tasks but provides no explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned, leaving the agent to infer context from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_authors_by_nameSearch authors by nameA
Read-onlyIdempotent

Search for authors by name pattern. Returns matching authors with their book counts. Useful for finding authors when you only remember part of their name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAuthor name pattern to search for. Case-insensitive partial match (e.g., 'sanderson' finds 'Brandon Sanderson').
limitNoMaximum number of results to return (default: 25, max: 100).
sortByNoSort results by name (alphabetical) or count (most books first, default).count

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and idempotentHint, indicating safe, non-destructive behavior. The description adds detail about case-insensitive partial matching and return of book counts, which enhances understanding beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two clear sentences, front-loading the action and then adding a usage hint. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema), the description provides enough context: it explains the search mechanism and return content. Mentioning limit and sort behavior would enhance completeness, but it's adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all three parameters. The description does not add significant new meaning beyond the schema's parameter descriptions, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for authors by name pattern and returns matching authors with book counts. It uses specific verbs and resources, and distinguishes itself from sibling tools like search_books and get_books_by_author.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is 'useful for finding authors when you only remember part of their name,' which provides context for use. However, it does not explicitly state when not to use this tool or suggest alternative tools for other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_book_contentSearch book contentA
Read-onlyIdempotent

Search for text within a specific book's content. Plain-text fallback when Calibre FTS is not available. Extracts the book to text and searches for matches with surrounding context.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to search for within the book content. Case-insensitive.
bookIdYesCalibre book ID to search within.
maxMatchesNoMaximum number of matches to return (default: 10, max: 20).
contextCharsNoCharacters of context to show around each match (default: 150).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds valuable behavioral context: the tool may extract the book to plain text as a fallback and returns matches with surrounding context. This goes beyond the annotations by disclosing potential resource usage and the search strategy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The first sentence states the core purpose, and the second provides crucial behavioral details. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description implies the return format (matches with context) but does not explicitly describe the output structure. Given the absence of an output schema, full transparency would require detailing what the response contains. The description is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents all parameters. The description mentions 'surrounding context' which is already captured in the contextChars parameter description. Baseline 3 is appropriate as the description does not significantly add parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching for text within a specific book's content. It also explains the fallback mechanism when Calibre FTS is unavailable, which adds precision. The verb and resource are unambiguous, distinguishing it from sibling tools like full_text_search that may search across books.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when searching inside a specific book's content, but it does not explicitly state when not to use it or compare it with alternatives like full_text_search. Sibling tools exist for broader searches, but no guidance is provided for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_booksSearch booksA
Read-onlyIdempotent

Search books in the Calibre library using Calibre's query language. Supports field-specific searches (title:, author:, tag:, series:, publisher:, format:, rating:, etc.) and boolean operators (and, or, not).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 25, max: 100).
queryYesSearch query using Calibre's query language. Examples: 'title:"lord of the rings"', 'author:Sanderson', 'tag:fiction', 'series:cosmere', or combine with 'and'/'or': 'author:Tolkien and tag:fantasy'.
sortByNoField to sort results by (default: title).title
ascendingNoSort in ascending order (default: true).

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating safe read operation. Description adds detail about search syntax (field-specific, boolean operators) but does not disclose additional behavioral traits beyond what is in the schema (e.g., pagination limit of 100 is in schema). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with main purpose, efficient and concise. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does not hint at the return format (e.g., list of book IDs or titles). For a search tool, mentioning what information is returned or that get_book_details may be needed for full metadata would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions. The description reinforces examples for the query parameter but adds minimal new semantics 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool searches books in a Calibre library using Calibre's query language, and lists specific fields and operators. This distinguishes it from sibling tools like search_books_by_title or full_text_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on the search syntax and fields, but does not explicitly guide when to use this tool versus alternatives like full_text_search or search_books_by_title. No when-not or exclusion criteria are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_books_by_tag_patternSearch books by tag patternA
Read-onlyIdempotent

Search for books by tag pattern. First finds all tags matching the pattern, then returns books with any of those tags. Useful for exploring related categories (e.g., 'fiction' finds books tagged 'Fiction', 'Science Fiction', 'Historical Fiction', etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of book results to return (default: 50, max: 100).
sortByNoField to sort results by (default: title).title
patternYesTag pattern to search for. Case-insensitive partial match (e.g., 'sci' matches 'Science Fiction', 'Sci-Fi').
ascendingNoSort in ascending order (default: true).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context: it performs a two-step process (find tags then find books) and explains the pattern matching's behavior (e.g., 'fiction' matches 'Science Fiction'). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core purpose, then explain the mechanism with an example. Every sentence serves a purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters and no output schema, the description adequately explains the tool's behavior and use case. It could mention default pagination (limit 50) or sorting, but the schema already documents defaults. Minor gap: no mention of result format or edge cases (e.g., no matching tags).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add significant meaning beyond what the schema already provides for each parameter (e.g., pattern description is nearly identical). It shows no additional parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: searching books by a tag pattern, which first finds matching tags then returns books with those tags. It distinguishes itself from siblings like get_books_by_tag (exact match) and search_books (general search) by explaining the two-step process and providing a concrete example.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an example and notes it's 'useful for exploring related categories,' implying when to use it. However, it does not explicitly state when not to use it or mention alternative sibling tools (e.g., search_books for non-tag searches, get_books_by_tag for exact tag). Still, the context is helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_books_by_titleSearch books by titleA
Read-onlyIdempotent

Search books by title with wildcard support. Simpler interface than search_books for quick title lookups. By default performs partial/contains matching (e.g., 'ring' finds 'The Lord of the Rings').

ParametersJSON Schema
NameRequiredDescriptionDefault
exactNoIf true, match the exact title. If false (default), perform a wildcard/contains search.
limitNoMaximum number of results to return (default: 25, max: 100).
titleYesTitle search pattern. Supports partial matches by default (e.g., 'lord' finds 'The Lord of the Rings').
sortByNoField to sort results by (default: title).title
ascendingNoSort in ascending order (default: true).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context beyond annotations by explaining wildcard support and default partial matching. It provides a concrete example ('ring' finds 'The Lord of the Rings'), which helps the agent understand the search behavior without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with the main action and key differentiator in the first sentence. Every sentence adds value: the first states the core function, the second clarifies the default behavior and provides an example. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters (one required), no output schema, and is a search tool, the description could be more complete by mentioning return format or pagination. However, the annotations cover safety, and the schema already documents parameters and defaults. The description focuses on the key differentiator (wildcard, simpler interface), which is appropriate for a quick-lookup tool. Missing return value details slightly lower the score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying the wildcard behavior and providing a concrete example of partial matching. While the schema already describes each parameter, the description's summary and example enhance understanding, warranting a score of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Search books by title with wildcard support.' It specifies the verb (search) and resource (books by title), and distinguishes from the sibling tool 'search_books' by noting it is a 'Simpler interface' for 'quick title lookups.' This provides a precise and differentiated purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use this tool over alternatives: 'Simpler interface than search_books for quick title lookups.' It also demonstrates default partial matching with an example ('ring' finds 'The Lord of the Rings'), guiding the agent on expected behavior. No explicit when-not-to-use, but the comparison is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_custom_columnSet custom column valueA
Destructive

Update a custom column value for a book. WARNING: This modifies your Calibre library. Use get_custom_columns to see available columns and get_book_details to verify the book before updating.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesNew value for the custom column. For boolean columns use 'true'/'false'. For multiple-value columns, separate values with commas.
appendNoIf true, append value to existing values (for multiple-value columns). If false (default), replace existing value.
bookIdYesCalibre book ID to update.
columnYesCustom column name (without the # prefix). Use get_custom_columns to see available columns.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set destructiveHint=true; description adds a warning about modifying the library. No additional behavioral details beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient two-sentence description. First sentence states purpose, second provides warning and usage tip. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with 4 parameters and no output schema, the description covers purpose, warning, and parameter specifics. References complementary tools for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds value by explaining how to format values for boolean and multiple-value columns, and clarifies the 'append' parameter's behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Update a custom column value for a book.' It uses a specific verb and resource, and distinguishes from siblings like set_metadata by focusing on custom columns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use get_custom_columns and get_book_details before updating. Provides clear context but does not explicitly list 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.

set_metadataSet book metadataA
Destructive

Update metadata fields for a book. WARNING: This modifies your Calibre library. Only specified fields will be updated; others remain unchanged. Use get_book_details first to see current values.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoNew tags. Comma-separated list (e.g., 'fiction, fantasy, epic'). Replaces existing tags.
titleNoNew title for the book.
bookIdYesCalibre book ID to update.
ratingNoRating from 0-10 (Calibre uses 0-10 scale internally, displayed as 0-5 stars).
seriesNoSeries name. Set to empty string to remove from series.
authorsNoNew author(s). For multiple authors, separate with '&' (e.g., 'Author One & Author Two').
commentsNoBook description/comments. Supports HTML.
languagesNoLanguage(s) as ISO 639 codes, comma-separated (e.g., 'eng' or 'eng, spa').
publisherNoPublisher name.
seriesIndexNoPosition in series (e.g., 1, 2, 3). Only used if series is also set.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description warns that the tool modifies the library, reinforcing the destructiveHint annotation. It also clarifies that only specified fields are changed, which adds valuable behavioral context beyond the annotation's simple destructive flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at three sentences: first states purpose, second warns about modification, third recommends a precursor. No unnecessary words, easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and no output schema, the description covers key behavioral aspects (destructive, partial update) and usage context. Missing return value description is acceptable given no output schema, but could be slightly more comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 all parameters thoroughly. The description does not add per-parameter details but provides general behavior about partial updates, which is adequate but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Update metadata fields for a book' with a clear verb and resource. It distinguishes from sibling tools like get_book_details (reading) and bulk_retag (bulk operation) by focusing on individual metadata updates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using get_book_details first to see current values, which is helpful. However, it does not explicitly mention alternatives for bulk updates (e.g., bulk_retag) or when not to use this tool, leaving some room for improvement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between several search variants (search_books, search_books_by_title, search_books_by_tag_pattern) and between get_books_by_author and get_books_by_author_id. Descriptions help differentiate, but an agent might occasionally misselect when looking for a simple book lookup.

Naming Consistency5/5

All tools use a consistent snake_case verb_noun pattern (e.g., bulk_retag, compare_books, fetch_excerpt). The naming is predictable and makes the action-object relationship clear across the entire set.

Tool Count3/5

With 26 tools, the server is on the heavy side. While the scope of a Calibre library manager can justify many operations, some tools feel redundant (e.g., multiple search variants), and the count exceeds the typical well-scoped range of 3-15.

Completeness4/5

The tool surface covers most core library operations: search, retrieval, updates, duplicates, quality reports, and maintenance. Minor gaps include lack of direct CRUD for series or publishers, but these can be managed via metadata updates.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching, reading, and managing a Calibre ebook library through natural language, with features like metadata search, full-text search, content extraction, and library management.
    221
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude.ai to your local Obsidian vault for full CRUD access, search, and daily note creation via the Model Context Protocol.
    15
    14
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Bridges your Calibre e-book library with AI assistants via the Model Context Protocol, enabling natural-language library management, semantic search, RAG, and agentic workflows.
    41
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI assistants with direct access to your ebook library, enabling listing books, reading chapters, and searching across books via the Model Context Protocol.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chepetime/calibre-librarian-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server