Skip to main content
Glama

set_user_book_read

Destructive

Log or edit reading dates and progress (pages or audiobook seconds). With id (a user_book_read id from get_user_book): edit that read, overwriting only the fields you pass, e.g. to fix a past finish date.

Instructions

Log or edit reading dates and progress (pages or audiobook seconds). With id (a user_book_read id from get_user_book): edit that read, overwriting only the fields you pass, e.g. to fix a past finish date. Without id: pass book_id or user_book_id; if the book has an unfinished read it is updated (progress, a later finish date, or the same start date), otherwise a new read is created, e.g. a re-read or a past read with its own dates. The book must already be in your library (add it with set_user_book). Returns the read entry with its id.

Input Schema

NameRequiredDescriptionDefault
idNouser_book_read ID to edit. Omit to log on a book.
book_idNoWithout id: book ID (auto-resolves your user_book).
edition_idNoEdition ID (required for audiobook progress tracking).
started_atNoDate started reading (ISO 8601, e.g. '2025-01-15').
finished_atNoDate finished reading (ISO 8601, e.g. '2025-02-20').
user_book_idNoWithout id: user_book ID if known (skips lookup).
progress_pagesNoPages read so far.
progress_secondsNoSeconds of audiobook listened to so far.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.8.0

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=true), but the description adds real context beyond them: partial-update semantics ('overwriting only the fields you pass'), the update-vs-create branch resolution logic, and the library-membership precondition. It stops short of warning about duplicate-read risk on repeated id-less calls, which matters given idempotentHint=false.

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?

Front-loaded with the verb and the primary mode split, then the branch details, then the return value. Dense but nearly every clause carries decision-relevant information; the parenthetical examples ('a re-read or a past read with its own dates') are the only mildly expendable 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?

With 8 optional parameters, no required fields, and no output schema, the description covers the decision logic (mode split), the precondition (library membership), and the return shape ('the read entry with its id'). Nothing an agent needs in order to call this correctly is missing.

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%, so baseline would be 3, but the description goes further by explaining how `id`, `book_id`, and `user_book_id` relate and are mutually exclusive by mode, and where `id` comes from (get_user_book). That interplay is not expressed in the schema descriptions, which only state each field in isolation.

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?

States a specific verb and resource ('Log or edit reading dates and progress (pages or audiobook seconds)') and immediately splits the two operating modes by presence of `id`. It also names the sibling that supplies the id (get_user_book) and the sibling that must run first (set_user_book), so an agent can route without opening any schema.

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?

Gives explicit when-to-use branches: with `id` to edit an existing read, without `id` to log a new one via book_id/user_book_id. It also states the precondition ('The book must already be in your library (add it with set_user_book)') and names the tool to call first, which is exactly the alternative-routing an agent needs.

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