Achriom
Server Details
The media memory layer for AI agents and their humans. Your AI client can search your collection, add and log what you've finished, update ratings and lists, and find patterns across everything you've read, watched, played, and listened to.
- Status
- Healthy
- Uptime
- 4.3% over 73 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 57 tools
Most tools have clear purposes and descriptions often explicitly point to the right alternative, but several clusters overlap: set_progress vs mark_tv_watched, log_event vs remember, get_taste vs get_taste_portrait vs get_user_profile, and preview_album vs get_track_previews. The research-scope tools are also underexplained relative to the rest of the surface.
Names are overwhelmingly consistent snake_case and usually follow a verb_noun pattern (get_by_status, set_review, bulk_update_status). Minor deviations like search, remember, and random_pick are still readable and do not create real confusion.
At 57 tools, the surface is very heavy even for a multi-media library. Many operations are useful, but the number of narrowly scoped get/set/update tools and niche features makes the set unwieldy for an agent.
Coverage is unusually broad: add/edit/delete, bulk operations, statuses, ratings, reviews, notes, dates, formats, lists, progress, recommendations, stats, taste profile, and search. Minor gaps exist, such as no bulk delete and limited progress support for podcasts/games, but core workflows are covered.
Available Tools
57 toolsadd_itemAdd to libraryAIdempotentInspect
Add a new item to the library. For best results, use lookup_item first to get the external_id. IMPORTANT: Use anime (not show) for ALL Japanese animation including series, movies, OVAs.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Release year | |
| title | Yes | The title to add | |
| format | No | Games only: physical (a scanned case/cartridge is physical) or digital. | |
| creator | No | Author/artist/director/creator | |
| platform | No | Games only: the platform the user owns/plays it on (e.g. "PlayStation 5", "Nintendo Switch", "PC"). Pass it when the user mentions one, e.g. from a scanned game case. | |
| media_type | Yes | Type of media. Use anime for Japanese animation (Cowboy Bebop, Spirited Away, etc), show for live-action/Western animation. | |
| external_id | No | External database ID for exact matching |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the recommended lookup workflow but says nothing about what happens on duplicate titles or what a successful add returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, the core action first and the classification warning front-loaded at the end. Every sentence carries information, though the all-caps emphasis is slightly louder than needed for content already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering idempotency and mutation semantics and a fully described 7-parameter schema, the description supplies the workflow and typing conventions an agent needs. Duplicate-handling behavior is the one gap, partially mitigated by idempotentHint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters are already documented in the schema, including the anime/show enum note the description repeats. The only added value is tying external_id to the lookup_item workflow, which is marginal against a fully described schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a new item to the library') that an agent can act on immediately. It is implicitly distinguishable from bulk_add_items and add_to_list, but never names those siblings to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to advice: call lookup_item first to obtain external_id, and apply the anime-vs-show classification rule. It stops short of stating when to prefer bulk_add_items or add_to_list over this single-add tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_listAdd to a listAIdempotentInspect
Add a library item to a list by title. Creates the list if it does not exist. The item must already be in the library (use add_item first if not).
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note about why this item is on the list | |
| title | No | The library item title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| list_name | Yes | The list to add to (case-insensitive; created if missing) | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false, so the safety profile is carried structurally. The description adds genuinely new behavior: the implicit list creation side effect and the library-membership prerequisite. It doesn't say what the ambiguous-title response looks like, though the schema parameter text does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary action, followed by the auto-create behavior and the prerequisite. Nothing redundant and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with full schema coverage and no output schema, the description covers the primary action, the side effect, and the precondition — everything needed to invoke it correctly without opening sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter descriptions are already rich (exact-title preference, item_id override, case-insensitive list_name). The description's only added hint is 'by title', so it neither regresses nor meaningfully extends the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Add a library item to a list') and immediately adds the two scope facts an agent needs: the list is auto-created and the item must already exist. This distinguishes it cleanly from add_item and create_list in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to the sibling: 'use add_item first if not' handles the precondition, and 'Creates the list if it does not exist' tells the agent not to call create_list first. Both the when-to-use and the when-to-use-something-else cases are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_add_itemsAdd items in bulkAIdempotentInspect
Add up to 250 items to the library in ONE call. Use this whenever the user provides a list of more than 3 items to add — never loop add_item. IMPORTANT: always pass year, and pass external_id whenever you know it. Without them each title is resolved by fuzzy text search, which silently picks the wrong version for any ambiguous title (Roma 1972 vs Roma 2018, remakes, reissues). A wrong match is expensive to undo, so resolve ids up front via lookup_item for anything ambiguous rather than adding bare titles. Returns honest counts: {added, skipped_duplicates, failed} plus a per-item result list. Always report the exact counts to the user; never claim success without reading them. Items are added with the default status; to set a different status on what you just added, call bulk_update_status with those exact titles in titles.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of items to add (mixed media types allowed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation safety and idempotency, but the description adds critical behavioral context beyond them: fuzzy title resolution can silently choose wrong versions, bad matches are expensive to undo, duplicate items are skipped, and results include honest per-item counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and usage rules, then layers in disambiguation risks, return shape, and follow-up status handling. Despite being dense, every sentence provides actionable guidance for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a bulk mutation tool with no output schema: it explains the return object shape, the default status behavior, error modes, and the follow-up tool for status changes. Annotations plus schema cover the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description meaningfully strengthens parameter guidance by saying to always pass year and external_id whenever known, explaining why those fields prevent silent misresolution—an important layer beyond the schema's optional phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource, and scope: add up to 250 items to the library in one call. It explicitly distinguishes itself from the add_item sibling by warning against looping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use guidance (lists of more than 3 items), an explicit alternative to avoid (never loop add_item), and a prerequisite workflow for ambiguous titles (resolve via lookup_item). It also routes status changes to bulk_update_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_log_eventsLog events in bulkAInspect
Log finish or re-watch/re-read/re-listen events for many items in one call (max 250). Each entry takes media_type plus title or item_id, and optionally event_type, event_date (YYYY-MM-DD, YYYY-MM, or YYYY), rating, notes. An ambiguous title is skipped and reported, never guessed. Use for imports that carry finish dates.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: ambiguous titles are skipped and reported rather than guessed, and there is a hard 250-entry ceiling. It does not state what a repeat call does (idempotentHint=false implies duplicates), nor how many entries succeed when some fail, which matters for a non-idempotent mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it does first, then entry shape and formats, then the safety behavior and intended use. No restatement of the title and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter bulk mutation with no output schema, the description covers entry composition, date formats, item limit, partial-failure handling for ambiguous titles, and the intended scenario. An agent can construct a correct payload and predict failure modes from this alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load and does it well: it enumerates media_type, title-or-item_id, and the optional event_type, event_date, rating, and notes, plus the accepted date formats (YYYY-MM-DD, YYYY-MM, YYYY). It omits any guidance on when to prefer item_id over title and on the rating scale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Log finish or re-watch/re-read/re-listen events') and immediately scopes it as bulk ('for many items in one call (max 250)'), which separates it cleanly from the single-item sibling log_event. The set of valid event kinds is spelled out, so an agent knows exactly what lands in the library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for imports that carry finish dates' gives a concrete triggering scenario, and the 250-item cap signals when to split work. It stops short of explicitly naming log_event as the single-item alternative or saying what to do for the non-bulk case, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_update_statusUpdate status in bulkADestructiveIdempotentInspect
Update status for a specific list of items, named one by one in titles (exact titles, case-insensitive, max 250 per call). This tool can ONLY update items it is given by name; there is no way to update a whole library in one call, and no parameter will make one appear. For a library-wide change, fetch the titles first (get_by_status) and update them in explicit batches, telling the user what each batch touches. Returns matched/unmatched counts; unmatched titles need individual update_status calls.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | New status, in the words update_status lists for this media type | |
| titles | Yes | Exact titles of the items to update (case-insensitive). Required — the update touches only these items. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that: the 250-item ceiling, partial-success semantics (matched/unmatched counts), and the instruction to tell the user what each batch touches. It stops short of stating that the status change is destructive/overwrites the prior value, which would have earned a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The hard constraint is front-loaded and each sentence does work — the "no parameter will make one appear" line defensively blocks a known agent hallucination. It is slightly redundant, repeating the 250 cap already in the schema and restating the titles semantics, but nothing is wasted overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk mutation with no output schema, the description covers scope limits, partial-failure handling, and the required follow-up path. Combined with annotations that declare destructiveness and idempotency, an agent has everything needed to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters are documented there, including exact/case-insensitive titles and the 250 max. The description largely restates that ("exact titles, case-insensitive, max 250 per call"), adding only the hint that `status` values must come from what update_status lists — which is also in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Update status for a specific list of items") plus the exact mechanism (`titles`, case-insensitive, max 250). It also explicitly carves out what it is not — unlike update_status, it cannot do library-wide changes — so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not ("no way to update a whole library in one call") and a concrete alternative workflow: fetch titles first via get_by_status, then apply in explicit batches. It also routes the residual case — unmatched titles — to individual update_status calls, which is exactly the 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.
clear_ratingClear a ratingADestructiveIdempotentInspect
Remove the user rating from one library item, leaving it unrated. The undo for update_rating.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact title of the item (or pass item_id) | |
| item_id | No | Library item id (UUID), as shown by get_details. Preferred over title. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds the outcome state (item becomes unrated rather than deleted), which is genuinely new information beyond the annotations. It stops short of mentioning error behavior for already-unrated items, but given idempotentHint that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the purpose front-loaded and the sibling relationship appended as a routing hint. Nothing could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-target mutation with full schema coverage and rich annotations, the description supplies purpose, outcome, and sibling routing. Only edge-case behavior (target missing, already unrated) is absent, which is a minor gap rather than a blocker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with media_type enumerated and item_id explicitly preferred over title. The description adds no parameter-level guidance beyond what the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove the user rating from one library item') plus the resulting state ('leaving it unrated'). It also explicitly contrasts with the update_rating sibling, so an agent can distinguish the two without consulting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'The undo for update_rating' gives a concrete selection rule: use this when the user wants to unrate rather than set a new value. It does not spell out exclusions (e.g., item not found, or whether an unrated item errors), but the intended usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listCreate a listAInspect
Create a named list. Lists are private, cross-media collections the user curates ("Halloween marathon", "Beach house"). Items from any media type can go on one list.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | List name | |
| description | No | Optional one-line description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context — that lists are private and can hold mixed media types — but says nothing about duplicate-name behavior, what is returned (e.g. a new list id), or visibility to other users.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, followed by just enough context to understand the object being created. No filler, though the example list names are marginally decorative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter creation tool with full schema coverage and clear annotations, the definition covers what is created and its nature. The only real gap is return behavior (whether a list id comes back for subsequent add_to_list calls), which the agent would need to chain correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema itself, so baseline is 3. The description confirms a name is required ('named list') but adds nothing about the optional description field or any constraints on either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a named list') and explains what a list is — a private, cross-media curated collection. This distinguishes it conceptually from sibling mutation tools like add_to_list or update_list, though it never names them directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the tool that must run before add_to_list or add_item, but the description never says so, nor does it contrast with update_list or delete_list. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventDelete a logged eventADestructiveIdempotentInspect
Delete a logged finish/re-watch/re-read event on one item. The undo for log_event. With no event_date, event_id, or all, and more than one event on the item, nothing is deleted and the events are listed with their ids.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Delete every logged event on the item. | |
| title | No | Exact title of the item (or pass item_id) | |
| item_id | No | Library item id (UUID), as shown by get_details. Preferred over title. | |
| event_id | No | Delete exactly this event, by the id delete_event reported. | |
| event_date | No | Delete the event(s) on this date: YYYY-MM-DD, or YYYY-MM / YYYY to cover a whole period. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavioral information the annotations cannot express: the no-selector case deletes nothing and instead returns the events with their ids for a follow-up call. It does not discuss permissions or partial-failure behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, then the sibling relationship, then the edge case. Every sentence carries distinct information; nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive six-parameter mutation with no output schema, the definition covers the identity of the operation, its inverse, and the most likely failure-to-act scenario along with what the agent gets back. The remaining details live in a fully described schema and explicit destructive annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds meaning the schema cannot: it establishes that event_date, event_id, and all are mutually exclusive selectors and explains the fallback when none is supplied. The item targeting (title vs item_id) is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and a specific resource (a logged finish/re-watch/re-read event on one item), which clearly separates it from delete_item and delete_review among the siblings. It also names log_event as its inverse, so the agent immediately knows the paired write operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The third sentence explicitly describes the ambiguous case (no event_date, event_id, or all with multiple events) and the resulting behavior, which tells the agent how to disambiguate. It stops short of naming sibling alternatives by name for the underlying item deletion or telling the agent which selector to prefer in normal cases, so it is clear context rather than a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_itemRemove from libraryCDestructiveIdempotentInspect
Delete an item from the library.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title to delete (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that – it doesn't say whether dependent data (lists, ratings, progress) is cleaned up, whether deletion is reversible, or whether confirmation is expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, front-loading the verb and target. It is efficient, though the brevity comes at the cost of the guidance noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with full schema coverage and complete safety annotations, the minimum is met. What's missing is the blast radius of a destructive operation – side effects on lists, reviews, or watch progress – which an agent should know before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself explains the title-vs-item_id precedence and the ambiguous-partial-match behavior. The description contributes nothing on parameters, which is the baseline-3 case when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (an item in the library), which is unambiguous on its own. It doesn't distinguish itself from close siblings like remove_from_list, delete_list, or delete_review, so the agent must infer that 'item' means a library entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus remove_from_list, delete_list, or delete_review, and no prerequisites or cautions are mentioned. The target of deletion is inferable only from the word 'library.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listDelete a listADestructiveIdempotentInspect
Delete one of the user's lists. Everything on it stays in the library. Only when the user asks to delete the list itself.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | Yes | The list to delete (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds the genuinely useful blast-radius detail that list membership survives the deletion. It doesn't state whether the list deletion itself is recoverable, which is the remaining behavioral question for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and immediately followed by the consequence and the usage trigger. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with full schema coverage and annotations carrying the safety flags, the description supplies the one thing structured fields can't: what happens to list contents. Only the reversibility of the list deletion itself is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents case-insensitive matching. The description adds nothing about the parameter beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete one of the user's lists") and implicitly separates itself from item-level siblings by noting the contents stay in the library. It never names remove_from_list or delete_item explicitly, so the sibling differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Only when the user asks to delete the list itself" is an explicit precondition, and "Everything on it stays in the library" signals the when-not case (don't use this to clear items). It stops short of naming the alternative tool to use for removing contents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reviewDelete a reviewADestructiveIdempotentInspect
Delete the user's review of one item (it also comes off their public page). Their rating and notes are untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact title of the item (or pass item_id) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds non-obvious side effects beyond that, namely removal from the public page and preservation of the underlying rating and notes. It does not say what happens on a second delete or whether the review is recoverable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the destructive effect stated first and the preservation guarantee second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter destructive tool with full schema coverage and no output schema, the description covers the key concerns (what disappears, what survives). A note on behavior when no review exists would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains title vs item_id precedence and the media_type enum. The description adds only 'of one item' — a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('the user's review of one item') and immediately bounds the effect ('rating and notes are untouched'), which separates it from clear_rating and update_notes in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical implies what this tool does *not* touch, giving partial routing guidance away from rating/notes tools, but no sibling is named and there is no explicit when-to-use or when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_itemEdit item detailsADestructiveIdempotentInspect
Correct an item in THIS user's library. new_title/new_creator save a personal override visible only to them; the shared catalog entry is untouched. fields sets any other detail the app's edit form allows, also as a personal override (book: title, author, summary, genres, cover_url; movie: title, director, cast_members, poster_url, backdrop_url, release_date, runtime_minutes, plot, genres; show: title, creator, cast_members, poster_url, backdrop_url, first_air_date, last_air_date, plot, genres, networks; album: title, artist, cover_url, release_date, total_tracks, duration_minutes, genres, label; anime: title, title_english, description, genres, studios, cover_url, banner_url; and the equivalents for podcasts, games and manga). Dates are YYYY-MM-DD, lists are arrays, images are https links, null puts a field back to the catalog's value. new_external_id relinks the item to a different catalog entry, which is the correct fix when the wrong film/show/album was added (re_enrich cannot fix a wrong match, it only refetches the same entry). Errors if no change field is supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Current title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| fields | No | Other details to set for this user, by field name. Values: string, number, array of strings, or null to revert to the catalog value. An unknown field is an error that lists the editable ones. | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| new_title | No | New title (if changing) | |
| media_type | Yes | Type of media | |
| new_creator | No | New author/artist/director/creator (if changing) | |
| new_external_id | No | New external ID to re-link item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: edits are personal overrides, the shared catalog is untouched, and null reverts a field to the catalog value, which meaningfully softens the destructiveHint=true signal. It also documents a concrete failure mode (error when no change field is given). It does not say what relinking via new_external_id does to existing overrides, nor what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded, which is good, but the middle collapses into one very long parenthetical enumerating ten media types' field lists, which is hard to scan and largely incompressible in prose form. Bullets or a summarized pattern would have carried the same information more cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with a nested free-form object, the description covers scope, formats, revert semantics, relinking, and error behavior well. The remaining gap is the return value, which matters because there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description still earns credit by enumerating the editable field names per media type (book, movie, show, album, anime, plus 'equivalents' for podcast/game/manga) and by specifying value formats: YYYY-MM-DD dates, arrays for lists, https links for images, null to revert. That is meaning the schema cannot convey because `fields` is an open-ended object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Correct an item in THIS user's library') and immediately distinguishes the personal-override scope from the shared catalog entry. It also separates itself from the closest sibling by noting re_enrich only refetches the same entry, so an agent can pick between them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance for the trickiest decision: use new_external_id when the wrong film/show/album was added, because re_enrich cannot fix a wrong match. It also states the error condition when no change field is supplied. It does not cover when to prefer this over status/date/rating siblings such as set_dates, set_format or bulk_update_status, leaving overlap for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expand_research_scopeSet research scopeBIdempotentInspect
Add an item to the current research corpus (focused research mode only).
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the item to add | |
| media_type | Yes | Type of media to add to the research scope |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description usefully adds the mode precondition, but says nothing about what happens on a duplicate item or whether anything is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the mode constraint parenthesized and front-loaded, no filler. It is efficiently structured, though very terse for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 fully documented params and an output schema absent, coverage is mostly adequate. What is missing is differentiation from add_item and any statement of the effect or return, leaving the agent to infer them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including descriptions for both title and media_type plus an 8-value enum, so the schema carries the semantics. The description adds no meaning beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (item to the current research corpus), and the mode qualifier narrows intent. It does not, however, distinguish this from the sibling add_item, which reads as nearly the same operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'focused research mode only' is a genuine usage precondition, but no guidance is given on when to pick this over add_item or bulk_add_items, nor how it relates to get_scope_info. Usage is implied rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_by_ratingList by ratingCRead-onlyIdempotentInspect
Get items filtered by user rating range.
| Name | Required | Description | Default |
|---|---|---|---|
| max_rating | No | Maximum rating (0.5-5, half-star increments) | |
| media_type | Yes | Type of media | |
| min_rating | No | Minimum rating (0.5-5, half-star increments) |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| query | No | |
| total | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds nothing beyond that — it does not say whose ratings are matched, what ordering is returned, whether results are paginated, or how an omitted min/max bounds the range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; nothing wastes space. Its brevity is efficient but tips into under-specification rather than crispness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a three-parameter filtered-list tool with many sibling retrieval tools, the description omits range-default behavior and sibling disambiguation, which the agent would need to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with enum values, ranges and half-star increments already documented, so the baseline is 3. The description adds only the notion that the range is a 'user rating,' and says nothing about the required media_type or the open-ended behavior when only one bound is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve items filtered by a user rating range. It is clear enough on its own, but it never contrasts itself with near-neighbors like get_by_status or search_library, leaving the boundary to be inferred from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to pick this over get_by_status (status-based retrieval) or search_library (broader filtering), and no mention of prerequisites. The agent has to guess which retrieval tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_by_statusList by statusBRead-onlyIdempotentInspect
Get items filtered by status. Books: unread, reading, finished, abandoned. Movies/shows: unwatched, watching, watched, abandoned. Anime: plan_to_watch, watching, completed, saved, on_hold, dropped (the movie words also work). Albums: unheard, listening, played, saved. Podcasts: want_to_listen, listening, caught_up, dropped. Games: unplayed, playing, played, saved, on_hold, abandoned. Pass status "all" for any media type to return items regardless of status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 50) | |
| status | Yes | Status to filter by, or "all" to return items regardless of status | |
| media_type | Yes | Type of media |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| query | No | |
| total | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, non-destructive operation, and the description does not contradict them. The description adds useful filtering context but does not discuss return ordering, pagination, or how the limit interacts with results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by the necessary status lists. The description is somewhat long, but the enumeration is largely justified because the status schema field has no enum of its own.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and rich annotations present, the description need not explain return values or safety behavior. Still, it is incomplete for one supported media type because manga status values are not provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters at a baseline level. The description adds valuable status vocabulary beyond the schema, but it omits manga statuses even though 'manga' is a valid media_type in the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get items filtered by status. It makes the tool's filtering role clear, but it does not explicitly distinguish this tool from siblings such as get_by_rating or search_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the status parameter, including per-media-type values and the special value 'all'. However, it does not state when to choose this tool over alternatives like get_by_rating, get_recently_added, or search_library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contextGet library contextARead-onlyIdempotentInspect
Summarise the user's Achriom library for pitching a conversation: item counts per media type, days since they last added something, a stage (empty, starting, building, established), and their taste signals. Reads only their Achriom library.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so "Reads only their Achriom library" largely restates what structured data already says. The enumeration of returned values (counts, days-since-last-add, stage buckets) adds some useful context but shades into return-value documentation rather than behavioral disclosure; nothing is said about cost, caching, or failure modes for a sparse/empty library.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action, the target, the intended use, and the payload. The parenthetical stage enumeration is dense but each element is load-bearing since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description must explain what comes back, and it does: counts per media type, recency in days, a four-value stage classification, and taste signals. That is enough to call it correctly, though it leaves the agent unsure how this differs from get_stats or get_taste when choosing among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema carries the full contract and there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly avoids inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Summarise") and resource (the Achriom library) and enumerates what the summary contains: per-media-type counts, recency, a stage bucket, and taste signals. It is clear what the tool produces, but it does not distinguish itself from heavily overlapping siblings like get_stats, get_taste, get_taste_portrait, or get_signals, several of which sound like subsets of this output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"For pitching a conversation" gives a genuine usage context and implicitly suggests this is the lightweight pre-conversation overview. However, there is no explicit when-to-use versus get_stats (counts) or get_taste/get_taste_portrait (taste signals), so an agent must guess which of these overlapping read tools to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_detailsGet item detailsARead-onlyIdempotentInspect
Get FULL details of an item FROM THE USER'S COLLECTION including AI analysis, user notes, rating, timeline, and all metadata. For albums: includes track list with durations. For box sets: lists ALL contained albums. Use this to answer specific questions about items the user owns.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title to look up (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| year | No | |
| title | Yes | |
| artist | No | |
| genres | No | |
| rating | No | |
| status | No | |
| themes | No | |
| tracks | No | |
| creator | No | |
| summary | No | |
| trailer | No | |
| cover_url | No | |
| media_type | Yes | |
| user_notes | No | |
| status_label | No | |
| claude_summary | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower; the description still adds real context about what is returned (AI analysis, notes, ratings, timeline, track lists with durations, box-set album expansion). It doesn't mention cost/rate limits or payload size for large box sets, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose and the scope qualifier before the per-media-type specifics. The capitalized emphasis (FULL, ALL) is slightly noisy but functional rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only detail fetch with a full-coverage schema and an output schema, this covers purpose, scope, and notable return shapes adequately. The only gap is routing versus the near-duplicate siblings (lookup_item, show_item), which the agent must resolve on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter is documented in the schema, including the item_id-overrides-title precedence and the ambiguous-partial-match behavior, so the description needn't compensate. Beyond media-type-specific output shapes (albums, box sets), it adds no parameter semantics of its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get FULL details of an item FROM THE USER'S COLLECTION') and scopes it to owned items, which separates it from search-type siblings. It does not distinguish itself from close neighbors like lookup_item or show_item, so an agent still has to guess among detail-oriented tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence ('Use this to answer specific questions about items the user owns') gives a usage context, and 'FROM THE USER'S COLLECTION' implies a precondition the item must already exist. However, there is no explicit when-not guidance or named alternative for lookup_item, show_item, or search_library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listGet a listARead-onlyIdempotentInspect
Show the user's lists. With a name: that list's items in order. Without: all lists with counts.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | List name (omit to see all lists) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, idempotent read; the description adds useful behavior beyond that data, namely ordered item output and count aggregation. It omits edge cases like what happens with an unknown list name, but overall it adds real context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main action, zero wasted words; the two modes are stated in parallel and immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional-parameter read tool with no output schema, the description covers both modes and what each returns. It could say a bit more about missing-name behavior, but nothing essential for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains that name is a list name omitted to see all lists; the description essentially restates this without adding format or matching semantics. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Show the user's lists') and splits the two modes precisely, making it easy to distinguish from mutation siblings like create_list, update_list, and delete_list. It doesn't explicitly name those siblings, so no full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional usage: supply a name to get that list's ordered items, omit it for all lists with counts. No exclusions or pointers to related read tools (search_library, get_details), which keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_addedList recently addedARead-onlyIdempotentInspect
List items by when they were ADDED to the library (newest first). Use for "show me the last N things I added", "my last 8 vinyl records", "what did I add recently". This is addition order — different from get_timeline, which orders by reading/watching dates. Returns title, creator, media_type, status, rating, and when each was added.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many items to return (default 10, max 50) | |
| media_type | No | Filter to one media type, or all (default all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile needs no repetition. The description contributes beyond that by disclosing sort direction and the exact returned fields (title, creator, media_type, status, rating, added date), which is meaningful behavioral context. It stops short of covering empty-result behavior or pagination beyond the schema's max limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: core behavior and ordering first, then example invocations, then the sibling disambiguation and return shape. No filler, and the most decision-relevant fact (addition order) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned fields. With only two optional, fully specified parameters and annotations covering safety, an agent has everything it needs to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (limit with min/max/default, media_type enum with default) are fully documented in the schema. The description never mentions limit or media_type, so it adds no meaning over structured data; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the ordering dimension ('List items by when they were ADDED to the library, newest first'). It also names the sibling it differs from (get_timeline) and how the orderings diverge, so the agent can distinguish them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrasings ('show me the last N things I added', 'my last 8 vinyl records') and an explicit exclusion: this is addition order, not reading/watching dates as in get_timeline. The when-to-use and when-to-prefer-alternative conditions are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsGet recommendationsARead-onlyIdempotentInspect
What people with overlapping taste also liked, drawn from other Achriom libraries in aggregate (never anyone's individual list). With no arguments: picks across all media based on everything the user has rated 4+ or finished, each with the titles that drove it. With based_on or item_id: "people who liked X also liked", seeded from something the user owns. Excludes what they already have. Each pick carries an external_id ready for add_item.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many picks (default 8, max 25). | |
| item_id | No | Library item id (UUID) to seed from, as shown by get_details. | |
| based_on | No | Title of something in the user's library to seed from (exact title preferred). | |
| media_type | No | Only return picks of this type. Omit for cross-media. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses important behavior: recommendations come from aggregate other-library data, never an individual's list; they exclude items the user already has; and each pick includes an external_id ready for add_item. It also explains the rating/finished basis for unseeded picks, which is meaningful context for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded, dense but efficient, and every sentence contributes: it defines the recommendation source, the no-argument behavior, the seeded behavior, exclusion rules, and the external_id handoff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only recommendation tool with no output schema, the description gives enough behavioral context to invoke it correctly and understand the main return fields. It could more fully describe the returned pick structure, but the essential recommendation logic and follow-up external_id are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so parameter documentation is strong. The description adds useful mode semantics for based_on and item_id as seed sources, though it does not discuss limit or media_type, which remain schema-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and behavior: recommendations derived from overlapping taste across aggregated libraries. It clearly distinguishes the no-argument mode from seeded modes, so an agent can understand what the tool returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains the two usage modes: no arguments for broad picks, and based_on or item_id for seeded recommendations. It does not name alternative sibling tools or when-not-to-use cases, but the mode selection is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scope_infoGet research scopeCRead-onlyIdempotentInspect
Get information about the current research scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorldHint=false, so the safety profile is fully covered. The description adds nothing on top of that — no indication of cost, caching, or whether the scope can change between calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler or redundancy. It is efficient but only because it omits content rather than because it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no parameters, so the description carries the entire burden of explaining what a caller receives and what 'scope' means in this domain. It delivers none of that, leaving the agent unable to judge whether the response is worth a call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the input schema is empty with full coverage, so there is nothing for the description to clarify. Baseline 4 applies; no parameter-level information is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The sentence restates the title almost verbatim ('Get research scope' → 'Get information about the current research scope') without saying what 'research scope' contains or what kind of information is returned. It is generic enough that an agent cannot distinguish it from get_context or get_signals on the basis of the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use condition, no exclusions, and no mention of the obvious sibling expand_research_scope, which is the mutating counterpart to this read. The agent is left to infer the intended trigger from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_show_progressGet show progressARead-onlyIdempotentInspect
Read a TV show's season-by-season watch progress and the next unwatched episode ("up next").
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The show title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description's marginal contribution is its disclosure of what comes back: a season-by-season breakdown plus an 'up next' episode. That is meaningful output-shape context beyond the structured fields, though it omits whether unwatched-only or all seasons are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the resource and the two returned artifacts front-loaded. No filler, no restatement of the title, and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work of sketching the return value (season-level progress and the next unwatched episode). For a two-optional-parameter read tool with full schema coverage and strong annotations, that is close to sufficient; only the shape of the season breakdown is left vague.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both title and item_id are already fully documented, including the ambiguous-partial-match candidate behavior and the id-precedence rule. The description adds nothing further about parameter interplay, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('a TV show's season-by-season watch progress') plus a distinctive payload ('next unwatched episode / up next'). It implicitly separates itself from the mutating set_progress and from metadata-oriented get_details, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word 'Read' signals this is the non-mutating counterpart to set_progress, but there is no explicit 'use this when...' or pointer to get_details for metadata versus this tool for progress. An agent can infer the context but gets no stated exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signalsGet taste signalsBRead-onlyIdempotentInspect
Get behavioral signals: theme repetition, consumption gaps, and recent activity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered and the description adds no contradiction. What it does add is the content of the result (theme repetition, consumption gaps, recent activity), which matters because there is no output schema. It stops short of explaining how those signals are computed, how far back 'recent' reaches, or how large the payload might be.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the resource type is front-loaded before the enumerated signal categories. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema, the key remaining job is describing what comes back, and the description does list three categories. But terms like 'theme repetition' and 'consumption gaps' are left undefined, and the tool's relationship to four similarly named taste/stats siblings is unaddressed, so the agent still cannot confidently choose or interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The absence of any parameters is itself consistent with the description, which offers no scoping or filtering options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and a specific resource ('behavioral signals') and enumerates three concrete signal types: theme repetition, consumption gaps, recent activity. That is well beyond a restatement of the name. It does not, however, distinguish itself from close siblings like get_taste, get_taste_portrait, get_stats, or get_timeline, so an agent must guess which of these overlapping analytics tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: no condition that selects this tool over get_taste, get_taste_portrait, get_stats, or get_timeline, and no stated prerequisites. The description simply names what comes back, leaving the routing decision entirely to inference from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsGet library statsARead-onlyIdempotentInspect
Get collection statistics including progress, rating distribution, genre/theme breakdown, and timeline. If no media_type specified, returns combined stats.
| Name | Required | Description | Default |
|---|---|---|---|
| media_type | No | Type of media (optional - omit for all) |
Output Schema
| Name | Required | Description |
|---|---|---|
| by_rating | No | |
| by_status | No | |
| top_genres | No | |
| top_themes | No | |
| total_items | Yes | |
| by_media_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds the aggregation behavior (combined stats when media_type is omitted), which is genuinely useful, but the enumerated stat categories largely restate what the existing output schema likely documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, no filler. The content list comes first and the default-behavior caveat follows, so the agent gets the essentials immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema and full annotation coverage, the description supplies what an agent needs to call it correctly. Only the lack of sibling routing guidance keeps it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter has an enum plus an inline "optional - omit for all" description. The description's note about combined stats when media_type is absent adds only slight meaning beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (collection statistics) and enumerates the stat categories returned: progress, rating distribution, genre/theme breakdown, timeline. It is clearly distinguishable from mutation siblings, though it does not explicitly separate itself from read siblings like get_timeline or get_by_rating whose names overlap with the listed stat types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"If no media_type specified, returns combined stats" gives a usable default-behavior hint, but there is no explicit guidance on when to use this aggregate tool versus per-dimension siblings such as get_by_rating, get_by_status, or get_timeline. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasteGet their taste in briefARead-onlyIdempotentInspect
Their taste in brief, across everything they read, watch, listen to and play: what they loved, the creators they return to, the genres they lean toward, what they are in the middle of, what they finished lately and what did not land, plus their Taste Portrait's essence when they have one. One call, no generation. Use it whenever knowing their taste would make your answer fit them better, including outside media (a trip, a gift, a reading list for a project).
| Name | Required | Description | Default |
|---|---|---|---|
| media_types | No | Only these types (omit for all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the added value here is "One call, no generation" — signalling a cheap precomputed read rather than an expensive synthesis step. It does not discuss size, latency, or what happens when no taste data exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what you get back, then the usage trigger. The long enumeration of taste facets is dense but each item informs the agent what is available; still, it could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned facets and the Taste Portrait essence, including the conditional "when they have one". An agent can decide and call correctly with nothing else needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single optional enum-array parameter, so the schema carries full meaning. The phrase "across everything they read, watch, listen to and play" loosely echoes the media types but never references the media_types filter or its omit-for-all behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource (their taste) with an explicit content inventory — loved items, returning creators, genres, in-progress, finished, misses, plus Taste Portrait essence. That inventory implicitly separates it from get_taste_portrait and get_stats, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it whenever knowing their taste would make your answer fit them better, including outside media (a trip, a gift, a reading list for a project)" gives explicit positive triggers with concrete examples beyond the media domain. It lacks any when-not guidance or named alternatives such as get_taste_portrait or get_signals for narrower needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taste_portraitGet Taste PortraitARead-onlyIdempotentInspect
Get the user's full Taste Portrait: their generated archetype, essence, core tension, preoccupations, the recommendation they don't own yet, and their blind spot. A compact version is already in your context; call this to go deeper when they ask about their portrait. Unlocks at 10 items; below that it returns how many more they need.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is free to add genuinely new behavior: a 10-item unlock threshold and the fact that below it the call returns a remaining-count instead of the portrait. That gating behavior is the single most useful thing an agent could know here and would be invisible otherwise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the return contents, then the usage trigger, then the gating caveat. No restatement of the title and no filler; every sentence changes how an agent would call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and safety already covered by annotations, the description supplies exactly the missing pieces: what comes back and what happens before the 10-item threshold. An agent has everything needed to decide whether to call it and to interpret a below-threshold response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain and the baseline is 4. Nothing in the description misleads about inputs, and the schema is trivially complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get the user's full Taste Portrait') and then enumerates the exact contents (archetype, essence, core tension, preoccupations, unowned recommendation, blind spot). It also explicitly distinguishes itself from the compact portrait already in context, so an agent can tell when this deeper call is the right one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this to go deeper when they ask about their portrait' gives a concrete trigger, and the compact-in-context note implies the alternative for shallow needs. It stops short of naming a sibling tool or stating an explicit when-not condition, so the routing is clear but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timelineGet history timelineBRead-onlyIdempotentInspect
Get timeline showing items started and finished over time.
| Name | Required | Description | Default |
|---|---|---|---|
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds the useful behavioral dimension that the timeline shows both started and finished items over time, but it omits ordering, date-range behavior, granularity, and any pagination or return-shape details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though the terse size contributes to gaps in behavioral and contextual detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations about return values, so the description must carry more weight for a timeline-query tool. It does not explain what the timeline actually contains, how started and finished items are represented, the time window, ordering, or granularity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single required parameter has a fully documented enum, so the schema does the parameter-level work. The description adds no syntax or meaning beyond the schema, which warrants the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('timeline') and scopes it to 'items started and finished over time', which is distinct from siblings like get_recently_added or get_stats. It does not explicitly contrast with any sibling, which keeps it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what the tool does but gives no indication of when to use it versus alternatives such as get_recently_added, get_show_progress, or get_stats. No exclusions, prerequisites, or alternative-selection guidance are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_previewsGet track previewsARead-onlyIdempotentInspect
Get playable 30-second audio previews for tracks from an album IN THE USER'S LIBRARY.
| Name | Required | Description | Default |
|---|---|---|---|
| max_tracks | No | Maximum tracks to return (default 5) | |
| album_title | Yes | Album title (partial match supported) | |
| track_numbers | No | Specific track numbers (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| artist | No | |
| source | No | |
| tracks | Yes | |
| cover_url | No | |
| album_title | Yes | |
| apple_music_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: previews are 30 seconds long, playable, and restricted to albums in the user's library. The annotations already cover read-only, idempotent, non-destructive, and closed-world behavior, so this additional detail is meaningful without needing to repeat safety traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It immediately states the resource and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, rich annotations, full schema coverage, and presence of an output schema, the description is largely complete. The main remaining gap is the absence of explicit usage alternatives, but that is partly covered by the library scoping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented. The description reinforces that album_title must refer to an album in the user's library, but it adds no further parameter semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: get playable 30-second audio previews for tracks from an album in the user's library. This clearly distinguishes it from general search, but it does not explicitly differentiate it from the sibling tool preview_album.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage constraint is that the album must be in the user's library, which is embedded as a scoping condition rather than guidance. There is no explicit when-to-use or when-not-to-use information, and no alternatives such as preview_album are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileGet taste profileARead-onlyIdempotentInspect
Read the taste profile Achriom keeps for this user: taste patterns, key facts, cross-media connections and preferences, gathered from their chats with the Achriom librarian and from save_insight. Achriom data only; it does not read Claude's or any other assistant's memory or history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds meaningful context beyond that: the data provenance (chats with the Achriom librarian and save_insight) and an explicit boundary on what it does not read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: contents and provenance first, scope exclusion second. Every clause adds information and nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of saying what comes back, and it does so by enumerating the profile's contents. The only real gap is a missing comparison against the other taste-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to disambiguate; the baseline applies. No misleading parameter hints are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) plus the resource and enumerates its contents: taste patterns, key facts, cross-media connections, preferences. However, it does not differentiate itself from the near-identical siblings get_taste and get_taste_portrait, which an agent must still disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope caveat ('Achriom data only; does not read Claude's memory or history') implies when the tool is valid, but there is no explicit when-to-use guidance or routing to alternatives like get_taste, get_taste_portrait or get_context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_eventLog a finish or repeatAInspect
Log a completion or a re-watch/re-read/re-listen with a date. Use when the user mentions finishing something again ("watched Heat again last night", "reread Dune"). The first finish is tracked by status; this records repeats so they show in history and stats.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional note about this viewing. | |
| title | No | The title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| rating | No | Optional rating for this viewing (0.5 to 5, half-stars). | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| event_date | No | Date it happened: YYYY-MM-DD, or just YYYY-MM or YYYY when that is all the user knows. Omit if unknown. | |
| event_type | No | What happened. Defaults to 'finished'. reread/relistened/rewatched all count as a repeat. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write, non-idempotent, non-destructive profile, so the bar is lower; the description still adds that records surface in history and stats, which is real effect information. It does not address duplicate logging or what happens if the same repeat is logged twice, which is the notable gap for a non-idempotent write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste: what it does, when to use it with examples, and how it relates to the status mechanism. The key distinction is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, no output schema, and annotations covering the safety profile, the description supplies everything needed to decide and invoke. Minor omission: it does not say whether the title must already exist in the library or what happens on an unknown title, though the schema hints at candidate resolution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so media_type, event_type, event_date, title, item_id, rating and notes are all already documented, including defaults and enums. The description only reinforces that a date accompanies the log; it adds no syntax or disambiguation beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Log a completion or a re-watch/re-read/re-listen with a date') and explicitly separates itself from status-based tracking: 'The first finish is tracked by status; this records repeats.' An agent can distinguish this from update_status or set_progress 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use when the user mentions finishing something again') plus two concrete utterance examples, and an explicit exclusion rule (first finishes go through status). The when/when-not/alternative structure is fully present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_itemLook up a titleARead-onlyIdempotentInspect
Search EXTERNAL databases (NOT the user's collection) to find items BEFORE adding them. Use search/get_details for items the user already owns. Data sources: Books=OpenLibrary, Movies=TMDB, Shows=TVDB (falls back to TMDB), Albums=Discogs, Anime=AniList, Games=IGDB. Use anime (not show) for Japanese animation.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Release/publication year to narrow search | |
| title | Yes | Title to search for | |
| creator | No | Author/artist/director to narrow search | |
| media_type | Yes | Type of media to search. Use anime for Japanese animation, show for live-action/Western series. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | Yes | |
| media_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, so safety is covered; the description adds genuinely new behavior: per-media-type provider routing and the TVDB→TMDB fallback. It does not cover failure modes or result counts, but an output schema exists. Note: the description's 'EXTERNAL databases' framing sits uneasily with openWorldHint=false — the annotation appears stale rather than the text being wrong, so this is not scored as a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-value distinction (external vs owned) before the provider list. Four short sentences, each doing work, though the closing anime/show sentence is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values are covered by the output schema, and routing plus alternatives are well explained. One real gap: the media_type enum includes podcast and manga, but neither appears in the data-sources list, so an agent gets no signal about where those are resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the four parameters is documented in the schema, so baseline 3 applies. The description's only added parameter guidance ('use anime not show') is already duplicated verbatim in the media_type schema description, so it adds no new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (search external databases to find items) with an explicit scope contrast: external sources, NOT the user's collection. It then enumerates the exact provider per media type (OpenLibrary, TMDB, TVDB, Discogs, AniList, IGDB), which makes it unmistakable versus siblings like search and get_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit timing ('BEFORE adding them') and names the alternative for the opposite case ('Use search/get_details for items the user already owns'). It also resolves the one enum ambiguity that would cause a miscall: anime vs show for Japanese animation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_tv_watchedMark episodes watchedADestructiveIdempotentInspect
Mark TV progress. Give season+episode to mark that episode; add through=true to mark everything up to it; give season only to mark the whole season; give neither to mark the whole show. Set watched=false to unmark.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The show title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| season | No | Season number | |
| episode | No | Episode number within the season | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| through | No | With season+episode, mark everything up to and including it | |
| watched | No | Defaults true; set false to unmark |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is not read-only, is idempotent, and is destructive. The description adds useful behavioral context by explaining that omitting season/episode marks the whole show and that watched=false unmarks. It does not add permission, error, or side-effect detail beyond the scope behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact paragraph with the core action front-loaded and each sentence carrying a distinct scope rule. There is no redundant restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with rich schema descriptions and annotations, the description supplies the essential invocation matrix for episodes, seasons, whole shows, and unmarking. Schema details cover title ambiguity, item_id addressing, and parameter formats, so no critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining parameter combinations: season+episode targets one episode, through extends that to everything up to it, season alone marks a whole season, and neither marks the whole show.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: marking TV progress at episode, season, whole-show, or unmark scope. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as set_progress or get_show_progress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear invocation guidance for each scope: season+episode, through=true, season only, neither, and watched=false. It does not mention when to prefer or avoid this tool versus alternative progress-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_albumPreview an albumARead-onlyIdempotentInspect
Preview any album from Apple Music WITHOUT adding to library. Use this to sample before committing to add. Returns playable 30-second previews.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Album title | |
| artist | Yes | Artist name | |
| max_tracks | No | Maximum tracks to preview (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
| artist | No | |
| source | No | |
| tracks | Yes | |
| cover_url | No | |
| album_title | Yes | |
| apple_music_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: it confirms no library mutation occurs and that results are 30-second playable previews, which the annotation set alone doesn't convey. Minor tension: 'any album from Apple Music' implies querying an external catalog while openWorldHint=false declares a closed domain, though the read-only/idempotent semantics are consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, and the critical constraint (no library side effect) is placed immediately after the purpose. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary, and the description covers the two things an agent most needs: no library mutation and the nature of the returned previews. For a 3-parameter read-only lookup with full schema coverage, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so title, artist, and max_tracks are already documented with defaults in the schema. The description adds no format guidance (e.g., exact-match vs fuzzy artist names, what happens when title is ambiguous), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Preview') plus resource ('any album from Apple Music'), and it distinguishes itself from the library-mutation siblings by stating 'WITHOUT adding to library'. It does not, however, differentiate itself from the closely related 'get_track_previews' sibling, so an agent cannot fully tell the two apart from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to sample before committing to add' gives a clear situational trigger, effectively routing agents away from add_item/add_to_list for exploratory browsing. It stops short of naming an explicit alternative or a when-not condition (e.g., versus get_track_previews for track-level sampling).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_pickPick something at randomBRead-onlyIdempotentInspect
Pick random item(s) for serendipitous discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many items (1-5, default 1) | |
| filter | No | Filter which items to pick from (default: all) | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool picks random item(s), but the annotations declare idempotentHint=true. Random selection implies repeated calls may return different results, directly contradicting the idempotency claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The core action is stated first, and the phrase 'for serendipitous discovery' adds intended use without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema fully documents all parameters, so the description provides enough context to understand the basic action. Still, it does not clarify when to choose this over sibling discovery/recommendation tools, and it leaves the idempotency contradiction unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so media_type, count, and filter are already well documented in the schema. The description adds no parameter-level meaning beyond the schema, which is acceptable as a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Pick random item(s)'. It conveys the distinctive random-selection behavior, but it does not explicitly differentiate itself from siblings like get_recommendations or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for serendipitous discovery' implies when the tool might be used. However, it gives no explicit when-not conditions and does not name alternatives such as search or get_recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_book_sectionRead a book passageARead-onlyIdempotentInspect
Read a specific section of an uploaded book by line numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | Yes | Ending line number (max 200 lines) | |
| book_title | Yes | Book title (partial match supported) | |
| start_line | Yes | Starting line number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description need not repeat it. The description adds only that the book must already be uploaded and that addressing is line-based; it says nothing about behavior on out-of-range line numbers, truncation, or return format, which is acceptable only because the annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, and the key qualifier ('by line numbers') is front-loaded. It is perhaps too short given the sibling ambiguity, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full annotation coverage and a fully described three-parameter schema, the description supplies what is structurally missing: the concept of an already-uploaded book and line-range addressing. The remaining gap is routing guidance against search_book_content, which keeps it below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: book_title (partial match), start_line, and end_line (max 200 lines) are all documented in the schema itself. The description confirms that start/end are line numbers but adds no format, ordering, or bounds information beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (read) and resource (a specific section of an uploaded book) plus the addressing mechanism (line numbers), so the operation is unambiguous. However, it never distinguishes itself from the close sibling search_book_content, which also reads book content, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by line numbers' implicitly signals that this is positional reading rather than content search, which is the key differentiator against search_book_content. But there is no explicit when-to-use/when-not-to-use statement, no note that you need line numbers in hand, and no mention of the alternative tool by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
re_enrichRefresh metadataADestructiveInspect
Re-fetch metadata from external sources for an item whose data is incomplete. This re-runs the SAME external lookup, so it will return the same result as before: it does NOT fix a wrong match. If the item is the wrong film/show/album entirely, use edit_item with new_external_id to relink it, which is the only thing that changes which entry is fetched.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title to re-enrich (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond annotations: it discloses that the lookup is re-run unchanged and will yield the same result, which prevents a wasted retry loop. However, annotations declare destructiveHint=true and idempotentHint=false, and the description never mentions that a refresh can overwrite existing or already-corrected metadata — the destructive aspect is undisclosed. The 'same result as before' framing also sits awkwardly against idempotentHint=false, though not enough to be a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what it does, then the caveat, then the redirect. Efficient overall; the last sentence runs long by carrying both the alternative and the rationale.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and only 3 simple params, so the description carries the semantic burden well, including ambiguous-match behavior and the relink path. The one omission an agent operating under destructiveHint=true would want — what existing data gets overwritten — is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so title vs item_id precedence and the candidate-on-ambiguous-match behavior are already fully documented in the schema. The description adds no further parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (re-fetch metadata from external sources) plus the exact condition (item data incomplete), and explicitly contrasts itself with edit_item. An agent can separate it from the ~56 siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives when-to-use (incomplete data), an explicit when-not (it does NOT fix a wrong match), and names the correct alternative with the exact tool and parameter (edit_item with new_external_id). This is the strongest kind of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberRemember what they read, watched or playedAInspect
Save something the person just told you about their own reading, watching, listening or playing, in one call: "just finished Severance, loved it", "started Dune", "gave up on that podcast", "rewatched Heat last night", "want to read Piranesi". Finds the title in their library (exact title, or item_id) or adds it, then sets what happened, the date and the rating. Use it for the person's own activity, not for titles you are only discussing or recommending. Afterwards tell them in a few words what you saved.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | When it happened: YYYY-MM-DD, or YYYY-MM or YYYY when that is all they said. Work it out from what they said ("last night" is yesterday). Omit if unknown. | |
| note | No | For again: a short note about this time, in their words | |
| year | No | Release year, when known; tells a remake from the original | |
| title | No | The title as they said it (exact title preferred) | |
| rating | No | Only when they gave one or said something that clearly maps to stars ("loved it" is not a number: ask, or leave it out) | |
| creator | No | Author/artist/director/creator, when known; helps find the right one | |
| item_id | No | Library item id (UUID), when you already have it. Title is then ignored. | |
| happened | Yes | finished (read/watched/played it), started (in the middle of it), want (wants to get to it), gave_up (stopped partway), again (another read/watch/listen of something they had finished before) | |
| media_type | Yes | Type of media. Use anime (not show) for Japanese animation. | |
| external_id | No | External id from lookup_item, for an exact match when adding |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare non-readOnly/non-destructive/non-idempotent; the description adds real behavior the agent can't infer — that the call may resolve an existing library title or create one, and that it sets happened/date/rating in a single call. It also prescribes a confirmation step after saving. It does not warn about duplicate risk given idempotentHint=false, which leaves one meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its scope, then examples, then the exclusion, then the follow-up. The example list is long but each example disambiguates a different 'happened' value, so they earn their place; the single run-on sentence carrying the workflow is the main readability cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, non-idempotent mutation with no output schema, the description covers what the tool does, the resolution-or-create workflow, scope boundaries, and post-call behavior — enough to invoke it correctly. Missing only edge-case guidance such as re-logging the same title twice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3; the description adds semantic meaning beyond the schema by describing the resolution order (title or item_id against their library, then set what happened/date/rating) and by tying the example phrasings to which fields they populate ('loved it' → no numeric rating).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (save) and a specific resource (the person's own reading/watching/listening/playing activity), and backs it with five concrete utterance examples that make the scope unmistakable. The phrase 'the person's own activity, not titles you are only discussing or recommending' cleanly separates it from add_item/log_event siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives a when-not-to-use rule ('not for titles you are only discussing or recommending') and frames the trigger as 'something the person just told you'. It stops short of naming the nearest alternatives (log_event, add_item, bulk_log_events), which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_listRemove from a listADestructiveIdempotentInspect
Remove an item from a list by title, or exactly by media_type + item_id. The item stays in the library.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The item title (exact title preferred; partial match supported) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored. | |
| list_name | Yes | The list to remove from | |
| media_type | No | Optional: only match entries of this type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety semantics are covered. The description adds genuinely non-obvious information beyond that: removal affects only list membership while the item remains in the library — critical context an agent would otherwise have to infer. It does not describe behavior when the item is not found, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the key scoping constraint. No redundant restatement of the tool name or schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented schema and annotations carrying the destructive/idempotent profile, the description only needs to add the non-obvious scope distinction, which it does. A brief note on no-match behavior would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents each parameter including the rule that item_id causes title to be ignored. The description restates the title vs. media_type+item_id pairing but adds no syntax, format, or edge-case detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb and resource ('Remove an item from a list') and immediately clarifies scope with 'The item stays in the library,' which distinguishes it from destructive siblings like delete_item. It does not name the inverse sibling (add_to_list) or contrast with delete_list/update_list, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two lookup modes (by title, or exactly by media_type + item_id), which is useful selection guidance for parameters. However it never states when to use this tool versus alternatives such as delete_item or update_list, and 'the item stays in the library' only implies the distinction rather than spelling it out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_insightSave an insightAInspect
Save one insight to the user's Achriom taste profile (read back by get_user_profile): a taste pattern, a fact about them, a cross-media connection, or a preference. Use only when the user asks you to remember or note something, or agrees when you offer to; do not save things they have not chosen to keep.
| Name | Required | Description | Default |
|---|---|---|---|
| insight | Yes | The insight to save. Be concise but specific. | |
| category | Yes | Category: taste_pattern (recurring themes/patterns), key_fact (personal context), cross_media_connection (links between media types), preference (how they want to interact) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write semantics (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds real value beyond them: it names the read-back path (get_user_profile), clarifies that each call stores exactly one insight, and imposes a consent requirement. It does not say what happens when the same insight is saved twice, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first establishes the action, target store, valid content types, and read path; the second establishes the consent gate. Nothing is redundant and the essential scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter write tool with full schema coverage and no output schema, the description covers the action, destination, read path, one-insight-per-call granularity, and the consent rule. The only meaningful gap is the lack of guidance relative to the overlapping 'remember' sibling and duplicate handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the category enum is fully documented with per-value meaning, so the schema carries the load and a 3 is the baseline. The description restates the four categories in prose but adds no format, length, or example guidance beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and destination ('Save one insight to the user's Achriom taste profile') and enumerates exactly what qualifies as an insight, plus names the sibling that reads it back (get_user_profile). It loses a point because it never distinguishes itself from the sibling tool 'remember', which an agent could reasonably confuse with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger and an explicit prohibition: use only when the user asks you to remember or agrees to an offer, and 'do not save things they have not chosen to keep.' That is stronger than most definitions. However, it offers no guidance on choosing between this and the sibling 'remember' tool, leaving the main ambiguity unresolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch your libraryARead-onlyIdempotentInspect
Search the USER'S COLLECTION by title, creator, genre, or theme. Literal keyword match only - the query must actually appear in the item's title/creator/genre/theme text, or it returns nothing. Returns items they own with status, ratings, and for box sets, the list of contained albums. Use this to answer questions about what the user has. For generic, thematic, mood, or conceptual queries (e.g. "something about grief", "a film podcast") where the exact wording may not appear in any field, use search_library instead - it searches by meaning, not keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (matches title, author/artist/director/creator, genres, or themes) | |
| filter | No | Filter by status or rating. Books: all, reading, finished, unread, abandoned, rated, unrated. Movies/shows: all, watching, watched, unwatched, abandoned, rated, unrated. Anime: also plan_to_watch, completed, saved, on_hold, dropped. Albums: all, listening, played, unheard, saved, rated, unrated. Games: all, playing, played, unplayed, saved, on_hold, abandoned, rated, unrated. | |
| media_type | Yes | Type of media to search |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| query | No | |
| total | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive, and closed-world. The description adds critical context the annotations cannot: literal-only matching, empty result on wording mismatch, and that box sets expand to contained albums. The one gap is pagination/result-limit behavior, but overall it substantially enriches the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Opens with the core scope, then the critical matching constraint, then the return summary, then the alternative-tool routing. Every sentence is load-bearing and front-loaded; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema already present, the description only needs matching semantics and alternatives — both are covered. An agent has everything needed to decide between `search` and `search_library` and to set expectations on empty results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (query, filter, media_type) are already documented. The description restates the searchable fields (title/creator/genre/theme) but adds no syntax, escaping, or filter details beyond the schema, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope ('USER'S COLLECTION') and names the sibling it differs from (`search_library`). An agent can tell instantly this is literal keyword search over owned items, not semantic search or item lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this ('questions about what the user has') and when not to, with concrete examples ('something about grief', 'a film podcast') routing to `search_library`. Every condition is stated, nothing inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_book_contentSearch inside booksARead-onlyIdempotentInspect
Semantic search within an uploaded book (EPUB/PDF). Uses AI embeddings to find relevant passages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (default 5, max 10) | |
| query | Yes | What to search for | |
| book_title | Yes | Book title (partial match supported) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior — matching is embedding-based/semantic rather than keyword — but says nothing about result format, ranking, or what happens when the title doesn't match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste: the resource and scope come first, the mechanism second. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 3-parameter read tool with no output schema, but it omits what a result looks like (passages only, or with page/chapter locations) and the failure mode when no book matches the title — both relevant to calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the partial-match behavior of book_title and the limit default/max, so the schema carries the parameter burden. The description adds no syntax or format guidance beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Semantic search within an uploaded book') and constrains scope to EPUB/PDF content, which implicitly separates it from library-wide siblings like search_library and search. It never names an alternative tool, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'within an uploaded book' — use when you already know the book and want passages. But there is no explicit when/when-not, no mention of read_book_section as the alternative for reading a known section, and no prerequisite note that the book must already be uploaded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_conversationsSearch past Achriom chatsARead-onlyIdempotentInspect
Search the user's past chats with the Achriom librarian inside the Achriom app, by meaning as well as keywords. It does not search Claude's or any other assistant's chat history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| query | Yes | What to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds a real behavioral trait beyond that — retrieval is semantic ('by meaning as well as keywords') — but says nothing about result ordering, whether older chats are truncated, or how the limit interacts with ranking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and scope, and the second sentence earns its place by eliminating a costly misidentification with other assistants' history. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only search with full schema coverage, the definition is nearly complete. Without an output schema, a brief note on what a result contains (the matched message plus context, excerpt length) would close the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both query and limit documented in the schema itself, so the baseline is 3. The description contributes no additional detail on how the query is interpreted semantically or what the default of 5 means for ranking breadth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (search) and resource (the user's past chats with the Achriom librarian) and bounds it by source. However it does not distinguish itself from the many search_* siblings (search, search_library, search_book_content, search_youtube) present in the toolset, leaving that ambiguity unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the scope statement: it applies to Achriom librarian chat history, not Claude's or other assistants'. The negative scoping is genuinely useful, but no positive when-to-use condition or named alternative is given for the other search-family tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_librarySearch library by meaningARead-onlyIdempotentInspect
Semantic search across the user's entire library by meaning, theme, or vibe. Searches every book/movie/album/show/anime/podcast/game as one corpus. Use for cross-media or thematic questions like "things about grief" or "noir mood", or any generic/conceptual query where the exact wording may not appear in the item's title/creator/genre text. For specific title/creator lookups, use the keyword search tool instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 25) | |
| query | Yes | Natural-language description of what to find (theme, mood, idea, vibe) | |
| media_type | No | Optional filter to a single media type | |
| min_similarity | No | Cosine similarity floor 0–1 (default 0.20). Lower for mood/affect queries (e.g. "something slow and quiet" → 0.15), higher for specific-entity queries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds meaningful behavioral context beyond that: search is semantic rather than literal, spans every media type as one corpus, and is intended for conceptual queries where exact wording may not appear. It does not describe result ordering or pagination, but the schema covers the limit and similarity floor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no waste. The scope and primary use case are front-loaded, followed immediately by the sibling distinction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only semantic search tool with full schema coverage and no output schema, this description contains everything needed to select and invoke it correctly: purpose, corpus scope, query style, examples, similarity tuning context in the schema, and the alternative keyword tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description illustrates the kind of natural-language query to pass but does not add syntax, format, or parameter-specific guidance beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: semantic search across the user's entire library by meaning, theme, or vibe. It distinguishes this from the sibling `search` tool by explicitly contrasting meaning-based search with keyword lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage guidance with examples such as "things about grief" and "noir mood", and it names the alternative for specific title/creator lookups: the keyword `search` tool. The conditions for choosing this tool versus that sibling are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_youtubeSearch YouTubeBRead-onlyIdempotentInspect
Search YouTube for relevant videos (interviews, trailers, analysis, music videos).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for YouTube | |
| max_results | No | Number of videos to return (1-5, default 3) |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| videos | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered structurally. The description adds only the content-type examples as behavioral context; it says nothing about external network calls, result ranking, quotas, or latency. Note the annotation openWorldHint=false is questionable for what is intrinsically an open web search, but that is an annotation defect rather than a description contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the verb and resource front-loaded and no filler. The parenthetical examples earn their place by scoping the content domain, though the whole description is arguably thinner than the tool's role warrants.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and annotations cover the safety profile for a two-parameter tool. What is missing is the disambiguation from the many other search-flavored siblings, which is the main thing an agent needs before invoking this one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `query` and `max_results` (including the 1-5 range and default 3) are already fully documented in the schema. The description adds no query-syntax guidance (e.g., channel filters, quoting) and no semantics for what counts as a 'relevant' video, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Search) plus resource (YouTube) with parenthetical examples of expected content types (interviews, trailers, analysis, music videos), which clarifies it is a video-content search rather than a generic one. It is distinguishable from search_library and search_conversations by the YouTube resource, though it never explicitly contrasts itself with the bare `search` sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states no when-to-use or when-not-to-use conditions and names no alternative. With siblings like `search`, `search_library`, and `search_conversations` present, an agent gets no signal about why it would pick YouTube search over those, leaving routing to inference from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_datesSet datesADestructiveIdempotentInspect
Set or clear the dates on one library item: started_at, finished_at, added_at. Each accepts YYYY-MM-DD, YYYY-MM, or YYYY (a year-only finish is kept as a year, not turned into January 1st), or "none" to clear. Use for imported histories that only carry years, and to fix a wrong date.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact title of the item (or pass item_id) | |
| item_id | No | Library item id (UUID), as shown by get_details. Preferred over title. | |
| added_at | No | When the item entered the library: YYYY-MM-DD, YYYY-MM, or YYYY. Use when importing from another app that recorded it. | |
| media_type | Yes | Type of media | |
| started_at | No | YYYY-MM-DD, YYYY-MM, YYYY, or "none" to clear. For albums this is the first listen. | |
| finished_at | No | YYYY-MM-DD, YYYY-MM, YYYY, or "none" to clear. For albums this is the last listen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds useful format behavior (year-only values preserved rather than normalized to January 1st) but never warns that setting a date overwrites existing values or what happens to fields left out of the call — the main destructive risk an agent needs flagged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the affected fields front-loaded and the format/clear semantics immediately after. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no output schema, the description covers the fields, accepted formats, and clearing behavior well. The remaining gap is what a call does to dates not mentioned in it and how item identification resolves between title and item_id, which leaves slight ambiguity about the write's scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning beyond the schema: it restates the accepted formats in one place and clarifies the non-obvious semantic that a year-only finish stays a year rather than becoming January 1st. Minor gap: it says nothing about title vs item_id selection, though the schema covers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (set or clear), a specific resource (dates on one library item), and enumerates the three fields affected. An agent can distinguish it from siblings like set_progress, set_format, or update_status without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit use cases: imported histories that only carry years, and correcting a wrong date. That is clear positive guidance but it never names an alternative tool (e.g., set_progress for current reading position) or states 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_favoriteMark a favoriteADestructiveIdempotentInspect
Mark or unmark one library item as a favorite (the heart in the app). Favorites are kept on the user's favorites list, created if they have none.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact title of the item (or pass item_id) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| favorite | Yes | true to favorite, false to unfavorite | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely new behavioral context: it is a two-way toggle (not just a set) and it will lazily create the favorites list when the user has none — a side effect the annotations do not reveal. It stops short of explaining why the call is flagged destructive or what happens if the item isn't found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, with the side effect in the second. The parenthetical UI hint is short and aids disambiguation rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation with no output schema and rich annotations, the description plus schema covers nearly everything an agent needs: the toggle semantics, identifier precedence, and the list-creation side effect. Minor gaps: no statement about failure modes (unknown title, ambiguous match) or what the response confirms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the title-vs-item_id precedence rule and the boolean's meaning, so the schema carries the weight. The description only reinforces that the boolean is bidirectional; it adds no format, casing, or resolution guidance beyond the schema — the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (mark/unmark) and a specific resource (one library item), plus a UI anchor ("the heart in the app"). The word "one" implicitly distinguishes it from the sibling set_profile_favorites, but that sibling is never named, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the per-item toggle vs. a bulk/list operation like set_profile_favorites or bulk_add_items, but no alternative is named and no when/when-not condition is stated. Nothing tells the agent which identifier path (title vs item_id) is preferred at the description level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_formatSet formatADestructiveIdempotentInspect
Record how the user has or consumes an item. Books (the default media_type): format = print, ebook, audiobook or ereader. Games: format = physical or digital, and/or platform. Movies, shows, anime and albums: the copies they own, as formats (movie/show/anime: 4K UHD, Blu-ray, DVD, VHS, LaserDisc, Digital; album: Vinyl, CD, Cassette, Digital), stores for a Digital copy (movie/show: Apple TV, Prime Video, Movies Anywhere, Google TV / YouTube, Fandango at Home, Microsoft Store; anime adds Crunchyroll Store; album: Bandcamp, iTunes, Amazon Music, Qobuz, 7digital) and an edition note. formats and stores replace the saved lists; an empty list clears them.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| format | No | Books: print, ebook, audiobook or ereader. Games: physical or digital. | |
| stores | No | Movies, shows, anime, albums: where a Digital copy lives, from the lists above (kept only with Digital in formats) | |
| edition | No | Movies, shows, anime, albums: an edition note such as "Criterion" or "2014 remaster" (80 characters max); an empty string clears it | |
| formats | No | Movies, shows, anime, albums: the physical/digital formats owned, from the lists above | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| platform | No | Games only: the platform they play it on, e.g. PS5, Switch, PC | |
| media_type | No | Type of media. Defaults to book. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true and idempotentHint=true already declared, the description adds real context: formats and stores replace the saved lists rather than augmenting them, and an empty list clears them. It does not state that omitted fields are left untouched, which would be useful for a partial-update tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the per-type detail. It is a single dense paragraph, and the long enumerations are justified because the schema references them, though the store lists run heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Eight optional params at full schema coverage, no output schema needed, and the description supplies the value vocabularies plus the replace-vs-clear semantics an agent needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes further by enumerating the accepted format and store values per media type — values the schema itself defers to ("from the lists above"), making the description load-bearing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: record how the user has/consumes an item, broken out per media type. It is clearly distinct from siblings like update_status or set_dates, though it never names the neighboring edit tool it overlaps with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the per-media-type breakdown, and it explains that formats/stores replace existing lists while an empty list clears them. However, it never says when to use this versus edit_item or add_item, nor which media_type to pick when ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_prioritySet priorityADestructiveIdempotentInspect
Set the priority of an item in the collection. High = want this next, normal = standard backlog, low = speculative or distant.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Title of the item (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| priority | Yes | Priority level | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the semantic meaning of the priority tiers but says nothing about what happens to the prior priority value, whether the item must already exist, or permission requirements — modest added value against an already-rich annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the action first, then the tier definitions. Nothing is wasted and the core operation is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, published annotations, and no output schema, the description covers the essentials for a simple attribute-setter. The one gap is that it never mentions how the target item is identified (exact title vs item_id, and how ambiguity is handled) — though the schema descriptions do carry that detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description meaningfully enriches the 'priority' enum: the schema only says 'Priority level' while the description defines high as 'want this next', normal as 'standard backlog', and low as 'speculative or distant'. That is genuine semantic value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set') and resource ('priority of an item in the collection'), which is unambiguous and readily separable from siblings like set_favorite, set_progress, or update_status that touch other attributes. It does not explicitly name or contrast a sibling, but the resource is distinct enough that no confusion arises.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explains what each priority level means, which implies usage ('high = want this next'), but it never states when to call this tool versus alternatives such as update_status or set_favorite, nor any prerequisites. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_profile_favoritesSet profile favoritesADestructiveIdempotentInspect
Choose the favorites shown for one media type on the user's public page, in order, up to 4, from their own library. Replaces the current choice; an empty list clears it.
| Name | Required | Description | Default |
|---|---|---|---|
| titles | No | Exact titles, first to last | |
| item_ids | No | Library item ids (UUIDs), first to last; use instead of titles | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is known. The description earns credit by spelling out exactly what the destruction looks like — full replacement of the prior selection, with an empty list as the clear operation — which is the key behavioral detail an agent needs. It stops short of permissions or per-item failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded with the operation and then the replacement/clearing semantics. No filler and no duplication of enum values or schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with full schema coverage, no output schema, and annotations carrying the safety profile, this covers scope, limit, ordering, sourcing and replacement behavior adequately. What's missing is sibling disambiguation against set_favorite and whether media_type must already have library items.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the 4-item cap, first-to-last ordering, the titles-vs-item_ids choice, and the media_type enum. The description mostly restates those facts; only 'from their own library' adds a constraint the schema does not encode, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Choose') and a precisely scoped resource ('the favorites shown for one media type on the user's public page'), plus ordering, a 4-item cap and library sourcing. It implicitly separates itself from the near-namesake set_favorite by emphasizing the public-page, per-media-type, ordered, multi-item nature, but it never names that sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Useful in-tool guidance is present: it replaces the current choice and an empty list clears it, so the agent knows this is a whole-set write, not an additive one. However, with a sibling literally named set_favorite, the absence of any 'use set_favorite for a single favorite instead' routing is a real gap for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_progressSet progressBDestructiveIdempotentInspect
Update how far the user is through an in-progress item. Books: current page, the page count of their copy, and/or a reading percentage (for audiobooks and e-readers). Shows: current season + episode. Anime: episodes watched. Manga: chapter and/or volume read up to.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Title of the item (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| volume | No | Last volume read (manga only) | |
| chapter | No | Last chapter read (manga only) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media (progress only applies to books, shows, anime and manga) | |
| page_count | No | Pages in the copy they are reading (books only); null clears it | |
| current_page | No | Current page number (books only) | |
| current_season | No | Current season number (shows only) | |
| current_episode | No | Current episode number within the season (shows only) | |
| episodes_watched | No | Total episodes watched so far (anime only) | |
| reading_progress | No | Percent read, 0 to 100 (books only, for formats without pages); null clears it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, so the safety profile is partly covered structurally. The description, however, never discloses that existing progress is overwritten or that null clears values, and gives no return-value information for a mutation with 11 params. It adds the per-format field mapping but not the destructive consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and followed by an efficient per-format breakdown. No filler, though the bullet-like enumeration is dense relative to the schema it duplicates.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers which fields apply to which media type, which is the main complexity, but for a destructive 11-param mutation with no output schema it omits overwrite semantics, partial-update behavior, and the item_id-vs-title resolution path. Adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, including media-specific scoping and null-clearing. The description largely restates that mapping (books → page/percentage, shows → season+episode) without adding syntax, precedence between title and item_id, or cross-field constraints. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update how far the user is through an in-progress item') and enumerates the per-media-type progress fields, so the operation is unambiguous. It does not differentiate itself from plausible siblings such as mark_tv_watched or update_status, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'in-progress item' implies usage, and the media-type breakdown hints at applicability, but there is no explicit when-to-use guidance, no exclusions, and no routing to alternatives like mark_tv_watched or get_show_progress for shows/anime.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_reviewWrite a reviewADestructiveIdempotentInspect
Write or replace the user's review of something they have finished. Private by default; visibility public puts it on their public page and on the title's page, after a community check. Only make it public when the user asks. Use update_notes for private jottings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The review text, in the user's own words (1 to 10,000 characters) | |
| title | No | Exact title of the item (or pass item_id) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| spoiler | No | true when it gives away the plot | |
| media_type | Yes | Type of media | |
| visibility | No | Defaults to private |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (non-readonly, idempotent replace, potentially destructive), it discloses the default-private posture and that public reviews go through a 'community check' before appearing on the user's page and the title's page. That moderation consequence is real context an agent can't get from the flags; the nature or latency of that check is left vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation, then the safety-relevant default, then the pointer to the sibling. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with full schema coverage and no output schema, the description covers the operation, the replace semantics, and the risky visibility choice. It leaves the 'community check' undefined and says nothing about failure modes, which is a minor but noticeable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns an extra point by explaining the consequence of the visibility enum (public page + title page after community check) rather than just repeating 'Defaults to private'. Other parameters (spoiler, item_id, media_type) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('Write or replace the user's review') and bounds the scope to 'something they have finished', which separates it from delete_review and from the logging siblings. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit visibility decision rule ('Only make it public when the user asks') and points to update_notes for private jottings, which is a genuine alternative. It stops short of contrasting with update_rating or log_event, so the sibling routing is only partly covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_itemShow an itemARead-onlyIdempotentInspect
Open one item from the user's library in Achriom. Use when they ask to see, open, go to or pull up an item. Returns a link to the item's page in the Achriom app (and opens it directly when the Achriom app itself is the client).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title to show (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, so the bar is lower, but the description still adds real value: it discloses the return value (a link to the item page) and the conditional side effect of opening the item in the app. It does not cover failure behavior when an item is missing, which limits it to a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, followed by the trigger condition and the return value. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description fills that gap by explaining what the caller gets back (a link, plus direct opening when the app is the client). Combined with 100% schema coverage on the three parameters, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the id/title precedence and ambiguous-match behavior are fully documented in the schema itself. The description adds nothing about parameters beyond 'one item', which is adequate since the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Open one item from the user's library in Achriom' — which is unambiguous. It does not explicitly contrast with close siblings like get_details or lookup_item, so an agent must infer the difference, keeping it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when they ask to see, open, go to or pull up an item' gives concrete triggering user phrasings, which is strong positive guidance. No exclusions or alternatives (e.g. when to prefer get_details instead) are offered, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listEdit a listADestructiveIdempotentInspect
Change a list: rename it (new_name), set or clear its description, set who can see it (visibility: private, link = anyone with the share link, public = also on the user's public page), and edit one entry's note or position. Only change visibility when the user asks; public list names and descriptions are checked before they go on the public page.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | One entry on the list to change. It must already be on the list (use add_to_list first). | |
| new_name | No | New name for the list | |
| list_name | Yes | The list to change (case-insensitive) | |
| visibility | No | Who can see the list | |
| description | No | New description; an empty string clears it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, but the description adds meaningful behavior beyond them: public list names/descriptions are checked before publication, and clearing is possible. It does not cover failure modes or response behavior, so it stops short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and appropriately sized: every clause identifies a capability or constraint, with no filler. The single long sentence is dense but readable; bullet structure would help marginally but is not required.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, a nested item object, no output schema, and rich annotations, the description covers the mutation surface, visibility semantics, and public-page check. Minor gaps such as name-collision behavior or return details keep it from 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real meaning by explaining the visibility enum distinction (link = anyone with the share link, public = also on the user's public page). Nested item fields such as title/item_id remain schema-only, keeping it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Change a list') and enumerates exactly what can be edited: name, description, visibility, and one entry's note/position. This clearly scopes it apart from create_list, delete_list, and add_to_list, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage constraint: 'Only change visibility when the user asks.' It also implies the tool is for existing lists and existing entries, but does not name alternative tools for adding entries or editing notes elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_notesUpdate notesCDestructiveIdempotentInspect
Add or update personal notes for an item.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | The notes to save (replaces existing notes) | |
| title | No | The title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state destructiveHint=true and idempotentHint=true, so the safety profile is declared. The description adds nothing beyond the name: it says 'add or update' without disclosing that existing notes are replaced, and it does not explain the title-vs-item_id resolution behavior, which is a meaningful operational trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler and is front-loaded. It is arguably too terse given the destructive replacement behavior, but it is structurally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with rich annotations and 100% schema coverage, the description is minimally adequate. However, it omits that notes replacement is destructive and does not clarify how item_id and title interact in practice, leaving important context to the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already well documented in the schema, including that notes replaces existing content and how title vs item_id is resolved. The description adds no parameter-level meaning beyond the schema, which meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: adding or updating personal notes on an item. It is clear enough to distinguish from generic writes, but it does not explicitly differentiate from sibling tools like set_review, save_insight, or remember, which also store user-authored text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus set_review, save_insight, remember, or edit_item. The only implied usage is that the target must be a library item, but no alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ratingRate an itemBDestructiveIdempotentInspect
Set or update user rating. Supports half-stars: 0.5 to 5.0 in 0.5 increments (e.g. 3.5).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title to rate (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| rating | Yes | Rating from 0.5 to 5 stars, in half-star increments (e.g. 3.5) | |
| season | No | Shows only: rate this one season instead of the whole show (with episode, rate one episode). | |
| episode | No | Shows only, with season: rate this one episode. Rating an episode marks it watched. | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a destructive, idempotent, non-read-only mutation, so the safety profile is largely covered. The phrase 'Set or update' hints that an existing rating is overwritten, but the description never explicitly says the prior rating is replaced or clarifies what 'destructive' means in this context. The half-star example duplicates schema constraints rather than adding behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action and the rating constraint front-loaded; every clause is purposeful and there is no boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple six-parameter mutation with full schema coverage and annotations supplying the safety profile, the description is minimally sufficient. However, it omits practical context an agent needs, such as whether a prior rating is replaced and how this relates to clear_rating, leaving the description thinner than it should be for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains title matching, item_id precedence, rating range, and season/episode conventions. The description only restates the half-star constraint that is already encoded in the schema, adding almost no parameter meaning beyond structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Set or update user rating'), so an agent immediately knows the tool's job. It does not differentiate from siblings such as clear_rating or set_review, keeping it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus clear_rating (to remove a rating), set_review (for review text), or update_status. The agent is left to infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_statusUpdate statusBDestructiveIdempotentInspect
Update status. Books: unread, reading, finished, abandoned. Movies/shows: unwatched, watching, watched, abandoned. Anime: plan_to_watch, watching, completed, saved, on_hold, dropped (the movie words also work). Albums: unheard, listening, played, saved. Games: unplayed, playing, played, saved, on_hold, abandoned.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title to update (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing) | |
| status | Yes | New status value | |
| item_id | No | Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly. | |
| media_type | Yes | Type of media |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, but the description says nothing about what the destructive overwrite means (prior status lost), whether an unknown status is rejected, or what happens when the title is ambiguous. The status lists are content, not behavioral disclosure, so it adds little beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line purpose followed by dense per-type lists; nearly every token carries information since the status enum is missing from the schema. Minor inefficiency in the prose phrasing ('the movie words also work') rather than a table-like layout.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no annotations explaining consequences and no output schema, the description should state whether updates overwrite previously set statuses or how failures surface. It also leaves two of the eight declared media types (podcast, manga) without any documented status values, which is an incompleteness an agent will hit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the 'status' property is an unconstrained string with only 'New status value' — the description is the sole source of its allowed enum values, which is substantial added meaning. The gap is that podcast and manga appear in media_type's enum yet have no status vocabulary listed, and the 'movie words also work' aliasing rule is only half-explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs the verb 'update' with the resource 'status' and then enumerates the concrete status vocabularies per media type, which makes the effect tangible. It does not distinguish itself from siblings like bulk_update_status or set_progress, and the opening sentence alone is a near-restatement of the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus bulk_update_status, set_progress, mark_tv_watched, or update_rating. The agent must infer from sibling names alone that this is the single-item path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
49 tool updates
- Changed
add_item3 fields changed- added
Input schema / properties / formatAdded value: +{ + "description": "Games only: physical (a scanned case/cartridge is physical) or digital.", + "enum": [ + "physical", + "digital" + ], + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - added
Input schema / properties / platformAdded value: +{ + "description": "Games only: the platform the user owns/plays it on (e.g. \"PlayStation 5\", \"Nintendo Switch\", \"PC\"). Pass it when the user mentions one, e.g. from a scanned game case.", + "type": "string" +}
- Added
add_to_list - Changed
bulk_add_items4 fields changed- changed
Input schema / properties / items / items / properties / external_id / descriptionPrevious value: -"External database ID for exact matching: ISBN (book), TMDB ID (movie/show), Discogs ID (album), AniList ID (anime)."New value: +"External database ID for exact matching: ISBN (book), TMDB ID (movie), TMDB or TVDB ID (show), Discogs ID (album), AniList ID (anime), IGDB ID (game)." - added
Input schema / properties / items / items / properties / formatAdded value: +{ + "description": "Games only: physical or digital copy.", + "enum": [ + "physical", + "digital" + ], + "type": "string" +} - changed
Input schema / properties / items / items / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - added
Input schema / properties / items / items / properties / platformAdded value: +{ + "description": "Games only: the platform the user owns it on (e.g. \"PlayStation 5\").", + "type": "string" +}
- Added
bulk_log_events - Changed
bulk_update_status5 fields changed- removed
Input schema / properties / filterRemoved value: -{ - "description": "Which items to update", - "enum": [ - "all", - "unrated", - "rated" - ], - "type": "string" -} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / status / descriptionPrevious value: -"New status"New value: +"New status, in the words update_status lists for this media type" - added
Input schema / properties / titlesAdded value: +{ + "description": "Exact titles of the items to update (case-insensitive). Required — the update touches only these items.", + "items": { + "type": "string" + }, + "maxItems": 250, + "minItems": 1, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "media_type", - "status" -]New value: +[ + "media_type", + "status", + "titles" +]
- Added
clear_rating - Added
create_list - Added
delete_event - Changed
delete_item4 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title to delete (partial match supported)"New value: +"The title to delete (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +]
- Added
delete_list - Added
delete_review - Changed
edit_item5 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "additionalProperties": { + "items": { + "type": "string" + }, + "type": [ + "string", + "number", + "array", + "null" + ] + }, + "description": "Other details to set for this user, by field name. Values: string, number, array of strings, or null to revert to the catalog value. An unknown field is an error that lists the editable ones.", + "type": "object" +} - added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"Current title (partial match supported)"New value: +"Current title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +]
- Changed
expand_research_scope1 field changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +]
- Changed
get_by_rating2 fields changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Items from the user's own library matching the request.", + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "creator": { + "type": [ + "string", + "null" + ] + }, + "genres": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "type": "string" + }, + "media_type": { + "enum": [ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" + ], + "type": "string" + }, + "rating": { + "type": [ + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "themes": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "title": { + "type": "string" + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "title", + "media_type" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "total": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
get_by_status3 fields changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / status / descriptionPrevious value: -"Status to filter by"New value: +"Status to filter by, or \"all\" to return items regardless of status" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Items from the user's own library matching the request.", + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "creator": { + "type": [ + "string", + "null" + ] + }, + "genres": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "type": "string" + }, + "media_type": { + "enum": [ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" + ], + "type": "string" + }, + "rating": { + "type": [ + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "themes": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "title": { + "type": "string" + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "title", + "media_type" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "total": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
get_details5 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title to look up (partial match supported)"New value: +"The title to look up (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Full detail for one item in the user's library, including AI analysis.", + "properties": { + "artist": { + "type": [ + "string", + "null" + ] + }, + "claude_summary": { + "type": [ + "string", + "null" + ] + }, + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "creator": { + "type": [ + "string", + "null" + ] + }, + "genres": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "type": "string" + }, + "media_type": { + "enum": [ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" + ], + "type": "string" + }, + "rating": { + "type": [ + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "null" + ] + }, + "status_label": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "themes": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "title": { + "type": "string" + }, + "tracks": { + "items": { + "additionalProperties": true, + "properties": { + "duration_ms": { + "type": [ + "number", + "null" + ] + }, + "preview_url": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "track_number": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "type": "array" + }, + "trailer": { + "additionalProperties": true, + "properties": { + "title": { + "type": "string" + }, + "videoId": { + "type": "string" + } + }, + "type": "object" + }, + "user_notes": { + "type": [ + "string", + "null" + ] + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "title", + "media_type" + ], + "type": "object" +}
- Added
get_list - Added
get_recently_added - Added
get_recommendations - Added
get_show_progress - Changed
get_stats2 fields changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Aggregate statistics for the user's collection.", + "properties": { + "by_media_type": { + "additionalProperties": true, + "properties": { + "albums": { + "type": "number" + }, + "anime": { + "type": "number" + }, + "books": { + "type": "number" + }, + "games": { + "type": "number" + }, + "movies": { + "type": "number" + }, + "podcasts": { + "type": "number" + }, + "shows": { + "type": "number" + } + }, + "type": "object" + }, + "by_rating": { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + "by_status": { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + "top_genres": { + "items": { + "additionalProperties": true, + "properties": { + "count": { + "type": "number" + }, + "genre": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "top_themes": { + "items": { + "additionalProperties": true, + "properties": { + "count": { + "type": "number" + }, + "theme": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total_items": { + "type": "number" + } + }, + "required": [ + "total_items" + ], + "type": "object" +}
- Added
get_taste - Added
get_taste_portrait - Changed
get_timeline1 field changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +]
- Changed
get_track_previews1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Album track list with 30-second preview URLs where available.", + "properties": { + "album_title": { + "type": "string" + }, + "apple_music_url": { + "type": [ + "string", + "null" + ] + }, + "artist": { + "type": [ + "string", + "null" + ] + }, + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "source": { + "type": [ + "string", + "null" + ] + }, + "tracks": { + "items": { + "additionalProperties": true, + "properties": { + "duration_ms": { + "type": [ + "number", + "null" + ] + }, + "preview_url": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "track_number": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "album_title", + "tracks" + ], + "type": "object" +}
- Changed
log_event5 fields changed- changed
Input schema / properties / event_date / descriptionPrevious value: -"Date it happened, YYYY-MM-DD. Omit if unknown."New value: +"Date it happened: YYYY-MM-DD, or just YYYY-MM or YYYY when that is all the user knows. Omit if unknown." - added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title (partial match supported)"New value: +"The title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +]
- Changed
lookup_item2 fields changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Candidate matches from external catalogs, with external_id for exact adds.", + "properties": { + "media_type": { + "type": "string" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "results": { + "items": { + "additionalProperties": true, + "properties": { + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "creator": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "external_id": { + "type": "string" + }, + "source": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "external_id", + "title" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "results" + ], + "type": "object" +}
- Added
mark_tv_watched - Changed
preview_album1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Album track list with 30-second preview URLs where available.", + "properties": { + "album_title": { + "type": "string" + }, + "apple_music_url": { + "type": [ + "string", + "null" + ] + }, + "artist": { + "type": [ + "string", + "null" + ] + }, + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "source": { + "type": [ + "string", + "null" + ] + }, + "tracks": { + "items": { + "additionalProperties": true, + "properties": { + "duration_ms": { + "type": [ + "number", + "null" + ] + }, + "preview_url": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "track_number": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "album_title", + "tracks" + ], + "type": "object" +}
- Changed
random_pick1 field changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +]
- Changed
re_enrich4 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title to re-enrich (partial match supported)"New value: +"The title to re-enrich (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +]
- Added
remember - Added
remove_from_list - Changed
search3 fields changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter by status or rating. Books: all, reading, finished, unread, abandoned, rated, unrated. Movies/shows/anime: all, watching, watched, unwatched, abandoned, rated, unrated. Albums: all, listening, played, unheard, saved, rated, unrated."New value: +"Filter by status or rating. Books: all, reading, finished, unread, abandoned, rated, unrated. Movies/shows: all, watching, watched, unwatched, abandoned, rated, unrated. Anime: also plan_to_watch, completed, saved, on_hold, dropped. Albums: all, listening, played, unheard, saved, rated, unrated. Games: all, playing, played, unplayed, saved, on_hold, abandoned, rated, unrated." - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Items from the user's own library matching the request.", + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "cover_url": { + "type": [ + "string", + "null" + ] + }, + "creator": { + "type": [ + "string", + "null" + ] + }, + "genres": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "type": "string" + }, + "media_type": { + "enum": [ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" + ], + "type": "string" + }, + "rating": { + "type": [ + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "themes": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "title": { + "type": "string" + }, + "year": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "id", + "title", + "media_type" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "total": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
search_library1 field changed- changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +]
- Changed
search_youtube1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Relevant public videos for the query.", + "properties": { + "query": { + "type": [ + "string", + "null" + ] + }, + "videos": { + "items": { + "additionalProperties": true, + "properties": { + "channelTitle": { + "type": [ + "string", + "null" + ] + }, + "thumbnailUrl": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "videoId": { + "type": "string" + } + }, + "required": [ + "videoId", + "title" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos" + ], + "type": "object" +}
- Added
set_dates - Added
set_favorite - Changed
set_format10 fields changed- added
Input schema / properties / editionAdded value: +{ + "description": "Movies, shows, anime, albums: an edition note such as \"Criterion\" or \"2014 remaster\" (80 characters max); an empty string clears it", + "type": "string" +} - changed
Input schema / properties / format / descriptionPrevious value: -"How the user read it"New value: +"Books: print, ebook, audiobook or ereader. Games: physical or digital." - changed
Input schema / properties / format / enumPrevious value: -[ - "print", - "ebook", - "audiobook", - "ereader" -]New value: +[ + "print", + "ebook", + "audiobook", + "ereader", + "physical", + "digital" +] - added
Input schema / properties / formatsAdded value: +{ + "description": "Movies, shows, anime, albums: the physical/digital formats owned, from the lists above", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - added
Input schema / properties / media_typeAdded value: +{ + "description": "Type of media. Defaults to book.", + "enum": [ + "book", + "movie", + "show", + "anime", + "album", + "game" + ], + "type": "string" +} - added
Input schema / properties / platformAdded value: +{ + "description": "Games only: the platform they play it on, e.g. PS5, Switch, PC", + "type": "string" +} - added
Input schema / properties / storesAdded value: +{ + "description": "Movies, shows, anime, albums: where a Digital copy lives, from the lists above (kept only with Digital in formats)", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / title / descriptionPrevious value: -"The book title (partial match supported)"New value: +"The title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "title", - "format" -]New value: +[]
- Added
set_hidden - Changed
set_priority4 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"Title of the item (partial match supported)"New value: +"Title of the item (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title", - "priority" -]New value: +[ + "media_type", + "priority" +]
- Added
set_profile_favorites - Changed
set_progress9 fields changed- added
Input schema / properties / chapterAdded value: +{ + "description": "Last chapter read (manga only)", + "type": "integer" +} - added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / descriptionPrevious value: -"Type of media (progress only applies to books, shows, and anime)"New value: +"Type of media (progress only applies to books, shows, anime and manga)" - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "show", - "anime" -]New value: +[ + "book", + "show", + "anime", + "manga" +] - added
Input schema / properties / page_countAdded value: +{ + "description": "Pages in the copy they are reading (books only); null clears it", + "minimum": 0, + "type": [ + "integer", + "null" + ] +} - added
Input schema / properties / reading_progressAdded value: +{ + "description": "Percent read, 0 to 100 (books only, for formats without pages); null clears it", + "maximum": 100, + "minimum": 0, + "type": [ + "number", + "null" + ] +} - changed
Input schema / properties / title / descriptionPrevious value: -"Title of the item (partial match supported)"New value: +"Title of the item (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - added
Input schema / properties / volumeAdded value: +{ + "description": "Last volume read (manga only)", + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +]
- Added
set_review - Changed
show_item4 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title to show (partial match supported)"New value: +"The title to show (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title" -]New value: +[ + "media_type" +]
- Added
update_list - Changed
update_notes4 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title (partial match supported)"New value: +"The title (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title", - "notes" -]New value: +[ + "media_type", + "notes" +]
- Changed
update_rating6 fields changed- added
Input schema / properties / episodeAdded value: +{ + "description": "Shows only, with season: rate this one episode. Rating an episode marks it watched.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - added
Input schema / properties / seasonAdded value: +{ + "description": "Shows only: rate this one season instead of the whole show (with episode, rate one episode).", + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / title / descriptionPrevious value: -"The title to rate (partial match supported)"New value: +"The title to rate (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title", - "rating" -]New value: +[ + "media_type", + "rating" +]
- Changed
update_status4 fields changed- added
Input schema / properties / item_idAdded value: +{ + "description": "Library item id (UUID), as shown by get_details. When given, title is ignored and the row is addressed exactly.", + "type": "string" +} - changed
Input schema / properties / media_type / enumPrevious value: -[ - "book", - "movie", - "album", - "show", - "anime" -]New value: +[ + "book", + "movie", + "album", + "show", + "anime", + "podcast", + "game", + "manga" +] - changed
Input schema / properties / title / descriptionPrevious value: -"The title to update (partial match supported)"New value: +"The title to update (exact title preferred; an ambiguous partial match returns candidates with ids instead of guessing)" - changed
Input schema / requiredPrevious value: -[ - "media_type", - "title", - "status" -]New value: +[ + "media_type", + "status" +]
2 tool updates
- Added
set_priority - Added
set_progress
2 tool updates
- Removed
get_taste_profile - Removed
recommend
2 tool updates
- Added
get_taste_profile - Added
recommend
2 tool updates
- Added
log_event - Added
set_format
2 tool updates
- Changed
get_by_rating6 fields changed- changed
Input schema / properties / max_rating / descriptionPrevious value: -"Maximum rating (1-5)"New value: +"Maximum rating (0.5-5, half-star increments)" - changed
Input schema / properties / max_rating / minimumPrevious value: -1New value: +0.5 - added
Input schema / properties / max_rating / multipleOfAdded value: +0.5 - changed
Input schema / properties / min_rating / descriptionPrevious value: -"Minimum rating (1-5)"New value: +"Minimum rating (0.5-5, half-star increments)" - changed
Input schema / properties / min_rating / minimumPrevious value: -1New value: +0.5 - added
Input schema / properties / min_rating / multipleOfAdded value: +0.5
- Changed
update_rating3 fields changed- changed
Input schema / properties / rating / descriptionPrevious value: -"Rating from 1 to 5 stars"New value: +"Rating from 0.5 to 5 stars, in half-star increments (e.g. 3.5)" - changed
Input schema / properties / rating / minimumPrevious value: -1New value: +0.5 - added
Input schema / properties / rating / multipleOfAdded value: +0.5
1 tool update
- Changed
search_library1 field changed- changed
Input schema / properties / min_similarity / descriptionPrevious value: -"Cosine similarity floor 0–1 (default 0.3)"New value: +"Cosine similarity floor 0–1 (default 0.20). Lower for mood/affect queries (e.g. \"something slow and quiet\" → 0.15), higher for specific-entity queries."
1 tool update
- Added
search_library
1 tool update
- Added
bulk_add_items
29 tool updates
- First observed
add_item - First observed
bulk_update_status - First observed
delete_item - First observed
edit_item - First observed
expand_research_scope - First observed
get_by_rating - First observed
get_by_status - First observed
get_context - First observed
get_details - First observed
get_scope_info - First observed
get_signals - First observed
get_stats - First observed
get_timeline - First observed
get_track_previews - First observed
get_user_profile - First observed
lookup_item - First observed
preview_album - First observed
random_pick - First observed
re_enrich - First observed
read_book_section - First observed
save_insight - First observed
search - First observed
search_book_content - First observed
search_conversations - First observed
search_youtube - First observed
show_item - First observed
update_notes - First observed
update_rating - First observed
update_status
Publisher details
- Operator
- TMAI, LLC · Publisher source
- Operator website
- https://www.achriom.com
- Vendor relationship
- First-party
- Documentation
- https://achriom.com/mcp
- Trust center
- Unknown
- Restrictions
- Requires a free Achriom account (sign in with OAuth). No paid plan, admin approval or custom OAuth app needed.
Related MCP Connectors
A self-improving memory layer. Your memory, notes, tasks and goals, remembered everywhere.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
A second brain for your AI agent. Shared memory for your team's AI agents, plus public and private knowledge bases — works with ChatGPT, Claude, Cursor and any MCP client.
- CachejayOAuthcom.cachejay
Memory for your AI: what you saw on screen, said in calls and worked on, searchable by agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceTracks movies, books, and TV shows with ratings and preferences, providing intelligent cross-media recommendations. Automatically fetches metadata from OMDB, Google Books, and TMDB to help manage watchlists and analyze viewing patterns.1-
- AlicenseBqualityAmaintenanceYour portable AI memory layer. Classify, store, and recall what matters across models, tools, and devices.318MIT
- AlicenseBqualityBmaintenanceEnables natural language tracking and exploration of books, movies/TV, quotes, podcasts, and personalized recommendations, using Google Cloud Firestore as a private, intelligent entertainment memory and AI curator.19MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients like Claude, ChatGPT, and Cursor to search, read, and write back to one cross-model Markdown library of saved articles, videos, PDFs, notes, and conversations. Hosted remote server with OAuth 2.1 or Agent-key auth and read_only, edit, or full permission tiers.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.