hearthis
OfficialProvides tools for interacting with the hearthis.at API as a user account, enabling browsing and discovery, searching tracks and genres, managing tracks and sets, uploading and editing audio, interacting with users and groups, and sending messages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hearthissearch hearthis.at for ambient tracks and show me the top three"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hearthis-mcp
MCP server for hearthis.at - lets an AI assistant (Claude, or any MCP client) browse, search, upload, edit and message on hearthis.at as your account.
Available for hearthis.at Premium members only. The API refuses requests of this server from accounts
without Premium (403 premium_required).
Setup
Needs Node.js 20 or newer.
npx hearthis-mcp loginAsks for your hearthis.at e-mail and password once and prints your API key pair plus the line to add the server to your MCP client. The password is not stored; the key pair acts as your account - keep it secret.
Claude Code:
claude mcp add hearthis -e HEARTHIS_KEY=… -e HEARTHIS_SECRET=… -- npx -y hearthis-mcpOther clients (mcpServers entry):
{ "hearthis": { "command": "npx", "args": ["-y", "hearthis-mcp"], "env": { "HEARTHIS_KEY": "…", "HEARTHIS_SECRET": "…", "HEARTHIS_UPLOAD_DIR": "/Users/me/Music/Uploads" } } }HEARTHIS_UPLOAD_DIR is optional (see below). A command line with the pair stays in your shell history - the config
file keeps it out.
Lost or leaked key pair? In your hearthis.at profile settings, under Combine your accounts, switch on Renew the
key on save and save. Every client with the old pair loses access; run npx hearthis-mcp login again.
Related MCP server: Spotify MCP Node Server
Tools
Area | Tools |
Account & discovery |
|
Tracks |
|
Own tracks |
|
Users |
|
Sets |
|
Groups |
|
Messages |
|
Tools that delete, overwrite, undo or publish carry the MCP destructiveHint, so clients ask before running them;
only purely additive ones (comments, reactions, messages, adding to a set, creating a group) do not. Not included on purpose:
registration, password reset, account deletion, payments, billing address and subscription changes - do
those on the website.
Track lists come back with the essential fields of each track; get_track returns the full object. No answer
ever contains your key pair.
Uploads stay private unless the assistant sets private=false. Only audio files (and JPG/PNG covers) can be
sent; set HEARTHIS_UPLOAD_DIR to allow files from that folder only.
Limits
The hearthis.at API limits the requests of this server per account and per action (messages, comments, uploads, …)
and answers 429 above them. The server waits on its own for short Retry-After pauses (up to 20 s) and reports
longer ones. Long calls (uploads) send progress notifications, and a cancelled call aborts its request.
Feedback
Issues and pull requests: https://github.com/HearthisAt/hearthis-mcp. API documentation: https://hearthis.at/api/ (for Premium members).
Development
npm install
npm run build
node test/live-smoke.mjs path/to/env-file # read-only calls against the live API
node test/live-write.mjs path/to/env-file # reversible writes on the test account, each turned backThe env file needs HEARTHIS_TEST_EMAIL and HEARTHIS_TEST_PASSWORD of a Premium account.
Available Tools
51 toolsadd_to_setAdd to setA
Adds a track to an existing set (set_id), or creates a new set with that name (new_set_name).
| Name | Required | Description | Default |
|---|---|---|---|
| set_id | No | ||
| track_id | Yes | ||
| new_set_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description usefully discloses the dual create/add behavior, which goes beyond the annotations, but says nothing about duplicate-track handling, name collisions, or permission requirements for a mutating, open-world 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?
A single well-formed sentence with no filler, and the primary add-to-existing case is stated first with the alternative following. 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?
For a 3-parameter mutation with no output schema and only hint-level annotations, this is the minimum viable description. Missing are the mutual-exclusivity/precedence rule, required permissions, and duplicate/error behavior an agent would want before calling.
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 must compensate; it does partially by giving semantic meaning to set_id and new_set_name (mutually exclusive alternatives). track_id and the exclusivity rule itself are left unstated, so coverage is incomplete rather than absent.
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 (adds) plus resource (track to a set), and it explicitly covers the second mode (creates a new set). This clearly distinguishes it from siblings like remove_from_set, delete_set, and edit_set without needing to open 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?
The parenthetical mapping shows which parameter triggers which mode (set_id = existing, new_set_name = new), which is implicit usage guidance. However, it never says what happens if both are supplied or neither, and it gives no exclusions or prerequisites (e.g. ownership of the set).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
badge_settingsBadge settingsBDestructive
Shows badges on the profile (badges_public) and the weekly mail about new badges (email_badges). Only the fields given change.
| Name | Required | Description | Default |
|---|---|---|---|
| email_badges | No | ||
| badges_public | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is a non-read-only, destructive, non-idempotent, open-world operation. The description adds the helpful partial-update behavior 'Only the fields given change,' but it does not explain what is destructive, what permissions are required, or what the result of a call looks like.
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 short and every clause contributes parameter meaning or partial-update behavior. It could be better front-loaded with an explicit action verb, but it avoids bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-boolean settings tool, the description covers both parameters and partial updates, and the annotations cover safety and mutability. However, it remains incomplete about the actual update action and the implications of destructiveHint=true, which matters for an agent deciding whether to call 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 0%, so the description must carry parameter meaning, and it does explain both booleans: badges_public controls showing badges on the profile, and email_badges controls the weekly new-badge email. It also clarifies that omitted fields are left unchanged, though it does not explicitly spell out true/false direction.
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 identifies the badge-related resource and names both setting fields, but it never states a clear action verb such as update, set, or configure. The phrase 'Shows badges on the profile' describes the effect of a setting rather than the tool's operation, leaving the purpose partially vague despite a recognizable resource.
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 gives no guidance on when to use this tool, when not to use it, or which alternatives exist among the settings-like siblings. The partial-update note is useful but does not substitute for usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_track_imageCopy track imageADestructive
Copies the cover or background image of another own track onto this own track.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ | |
| from_track_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the risk profile is known. The description adds the ownership constraint (both tracks must be 'own' tracks), which is genuine context beyond annotations, but it does not state that an existing image is overwritten or what happens if the source track has no image.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler, and the verb plus resource are front-loaded. The 'another own track onto this own track' construction is slightly clumsy but costs little.
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, the description covers what is copied, from where, and to where, while annotations carry the destructive/idempotency profile. The main remaining gap is the overwrite semantics for the destination track's existing image.
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 only 50%: `track` and `author` are documented as permalinks, while `from_track_id` (an integer ID) and `kind` have no schema descriptions. The description's 'cover or background' clarifies the `kind` enum values, but it leaves the permalink-vs-numeric-ID distinction between `track`/`author` and `from_track_id` unexplained — a likely source of invocation errors.
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 (copies) with a specific resource (cover or background image) and both the source and destination track. An agent can distinguish it from set_track_cover and remove_track_cover, though the phrase 'another own track onto this own track' is awkwardly worded.
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: reuse an image from another track instead of uploading a new one. No explicit when-not guidance, no mention of the sibling alternatives (set_track_cover, remove_track_cover), and no stated prerequisite that both tracks must belong to the caller beyond the embedded word 'own'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_groupCreate groupC
Creates a group owned by the account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| sort | No | ||
| genre | No | Genre slug | |
| private | No | Closed group: only moderators add tracks | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so safety is covered. The description's only addition is the ownership note; it says nothing about whether creation is idempotent, what limits exist on group creation, or how private/closed groups behave, which matters for a mutation tool with five parameters.
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, but it is under-specified rather than concise — brevity comes at the cost of any actionable detail about the operation.
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 five-parameter mutation tool with 40% schema coverage and no output schema, the description omits optional-field semantics and any statement of what is returned or what happens on failure. It is not complete enough to call the tool confidently without reading the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, so the description is expected to compensate for undocumented parameters, but it mentions none of the five. The 'sort' enum values and the 'name' uniqueness expectations are left entirely unexplained.
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 ('Creates a group') and adds ownership scope ('owned by the account'). The distinct create verb naturally separates it from siblings like edit_group, delete_group, get_group, and list_groups, though no sibling is named 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?
There is no guidance on when to use this versus edit_group or join_group, no prerequisites, and no mention of account or permission requirements for creating a group. The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_commentDelete commentBDestructive
Deletes a comment of the account (or any comment on an own track).
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ | |
| comment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description's real contribution is the authorization rule — you may delete your own comment, or any comment on a track you own — which is genuinely beyond what annotations convey. It still omits irreversibility/confirmation and error behavior when the comment is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the scope constraint front-loaded; nothing wasted. It is arguably under-specified rather than over-long, but structurally clean.
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, non-idempotent mutation with three required parameters and no output schema, the description gives the permission model but not the failure/return semantics (no-op vs error on a nonexistent comment) or any warning about permanence. Adequate to pick the tool, thin for calling 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 67% and the description says nothing about track, author, or comment_id. The uncovered parameter is comment_id, the single identifier that determines which record is destroyed, so the description leaves the most consequential input undefined in both schema and prose.
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 + resource ("Deletes a comment") with a scope qualifier that distinguishes deleting your own comment from deleting any comment on a track you own. It is clearly distinguishable from the sibling post_comment. The phrase "of the account" is slightly awkward, but the parenthetical resolves it.
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 what may be deleted but never says when to use this versus an alternative (e.g., moderation workflows, or what to do if the wrong comment id is supplied). No exclusions, prerequisites, or confirmation guidance are given for an irreversible operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_conversationDelete conversationBDestructive
Deletes a whole conversation for both sides. Ask the user for confirmation first.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the deletion affects the entire conversation for both participants, and user confirmation is required.
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, front-loaded sentences with no wasted language. The scope and confirmation requirement are both stated 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 destructive tool with no output schema and a single undocumented required parameter, the description is incomplete. It should clarify what user_id represents, how the conversation is selected, and whether deleted content is recoverable.
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 must explain the sole parameter, user_id. It does not mention user_id at all, nor does it explain how the target conversation is identified, leaving the required parameter completely ambiguous for a destructive operation.
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 ("Deletes a whole conversation") and clarifies the scope with "for both sides," which distinguishes it from deleting individual comments or messages. It does not explicitly differentiate itself from sibling conversation tools like read_conversation or list_conversations, but the core purpose is clear.
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 important procedural precondition: "Ask the user for confirmation first." However, it does not state when to use this tool versus alternatives, nor does it explain prerequisites such as permissions or whether the deletion is permanent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_groupDelete groupADestructive
Owner only: deletes a group. Ask the user for confirmation first.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds value beyond that with the authorization requirement ('Owner only') and a required confirmation step, both of which are behavioral facts the annotations don't convey. It stops short of saying what else is destroyed (members, group tracks), which is the one remaining 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?
Two short sentences with zero waste; the permission constraint is front-loaded and the confirmation instruction follows immediately. Nothing to trim.
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, non-idempotent mutation with no output schema, the description covers permission and confirmation but omits the blast radius — whether group members, tracks, or content are removed with the group. An agent has enough to call it safely but not enough to advise the user on consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter (group_id) with 0% schema description coverage, and the description says nothing about it. The parameter name is self-explanatory in context, so the risk of misuse is low, but the description adds no semantic value over the bare 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 ('deletes a group') plus a scope qualifier ('Owner only'), which distinguishes it from siblings like delete_set and delete_track. It's clear what the tool does, though it doesn't explicitly name the closest alternative for contrast.
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 concrete pre-condition ('Owner only') and an explicit procedural instruction ('Ask the user for confirmation first'), which is genuinely actionable usage guidance. It doesn't mention alternatives, but deletion is unambiguous enough that this is not a major gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_setDelete setADestructive
Deletes a set of the account (the tracks stay). Ask the user for confirmation first.
| Name | Required | Description | Default |
|---|---|---|---|
| set_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses that member tracks are NOT deleted with the set, which is non-obvious and prevents an agent from assuming cascading deletion, and it mandates user confirmation.
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 clauses, front-loaded with the action, then the non-destructive side effect, then the confirmation protocol. No filler and nothing 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, non-idempotent single-parameter mutation with no output schema, the description covers the key risk (tracks survive) and the confirmation step. It still omits how to source set_id and whether deletion is reversible, which an agent needs to call 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?
There is one parameter (set_id) with 0% schema description coverage, so the schema contributes nothing about its meaning or how to obtain a valid value. The description never mentions set_id or where set identifiers come from (e.g., list_my_sets), leaving the single required input effectively undocumented.
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 ('Deletes a set of the account') and adds a scope clarification that separates it from delete_track: '(the tracks stay)'. It does not explicitly name sibling alternatives like edit_set or remove_from_set, but the operation itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit interaction prerequisite ('Ask the user for confirmation first'), which is genuinely actionable. However, it offers no routing guidance versus adjacent tools such as edit_set, remove_from_set, or delete_track, so when-to-use is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_trackDelete trackADestructive
Deletes an own track. Ask the user for confirmation first.
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered; the description adds the non-obvious operational requirement of user confirmation and the ownership restriction implied by "own". It stops short of stating that the deletion is permanent or what happens to the track in sets/playlists.
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 filler, and the destructive action is stated before the confirmation instruction. Nothing could be trimmed 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 one-parameter destructive tool with annotations already disclosing destructiveness, the description covers the essential extra: ask for confirmation and only own tracks qualify. Only the irreversibility and downstream effects on sets/playlists are 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 0% and the single parameter track_id is never mentioned, so the description does not compensate for the undocumented schema. An agent must infer that track_id identifies the track to delete purely from the tool name.
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 ("Deletes an own track") with an ownership scope qualifier that distinguishes it from the neighboring delete_comment, delete_set, and delete_group tools. It does not explicitly say how it differs from remove_track_cover or remove_from_set, but the name plus scope makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one concrete procedural rule ("Ask the user for confirmation first"), which is real guidance for a destructive call. However it says nothing about when to prefer an alternative (e.g. removing a track from a set vs deleting it outright) or any preconditions like ownership.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_groupEdit groupBDestructive
Changes a group by the rules of its edit page - only the fields given change. Owner and editors; private only the owner. member_notify=true mails the members about every new sound - only switch it on when the user asked.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| open | No | Members may add sounds | |
| sort | No | ||
| genre | No | ||
| notify | No | Mail the owner about new sounds | |
| approve | No | New sounds wait for approval | |
| editors | No | User ids of the editors - replaces the list; owner only | |
| private | No | ||
| group_id | Yes | ||
| permalink | No | ||
| description | No | ||
| member_notify | No | Mail the members about new sounds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the description is not responsible for basic safety signaling. It adds useful behavioral context: partial update semantics, permission constraints for owner/editors and private groups, and a caution about member_notify.
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 compact and front-loads the core action. Some phrasing is terse or cryptic, such as 'by the rules of its edit page', but there is little wasted 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?
This is a destructive 12-parameter mutation with no output schema and low schema description coverage. The description covers partial-update behavior and some permissions, but leaves many parameters and return behavior 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 only 42% across 12 parameters, so the description must compensate for undocumented fields. It clarifies member_notify and permission-related constraints, but it does not explain most parameters such as name, sort, genre, permalink, description, group_id, or private boolean semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Changes a group') and clarifies that this is a partial update because 'only the fields given change'. It does not explicitly distinguish the tool from siblings such as create_group or delete_group, but the intended operation is still clear.
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 provides important context: owner/editor permissions, a restriction for private groups, and a caution to enable member_notify only when requested. However, it does not explicitly state when to use this tool versus alternatives like create_group or delete_group.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_profileEdit profileADestructive
Changes the profile of the account by the rules of its settings page - only the fields given change. Options of a plan the account does not have keep their value. E-mail, password, profile address, payouts, podcast and fan subscriptions change only on the website; the answer lists such fields under ignored.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| links | No | Replaces all links of the profile; [] removes them | |
| place | No | ||
| genres | No | Genre slugs (list_genres), the first is the main genre | |
| caption | No | Crew, label or subline below the name | |
| No | |||
| No | |||
| is_group | No | A group, organization, label or band | |
| highlight | No | Hex colour without # (Premium) | |
| description | No | Profile text (Markdown) | |
| support_url | No | Donation or support link | |
| track_footer | No | Text shown below every own sound | |
| hide_followers | No | Premium | |
| hide_following | No | Premium | |
| default_bitrate | No | Above 192 Premium | |
| default_private | No | New uploads start private (Pro and Premium) | |
| default_comments | No | New uploads allow comments (Pro and Premium) | |
| default_download | No | New uploads are downloadable | |
| featured_track_id | No | Own public sound shown first, 0 = none | |
| use_profile_as_cover | No | Profile picture as cover of uploads without one | |
| default_hide_statistics | No | New uploads hide their statistics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the lower bar applies; the description still adds real value by explaining the patch semantics, that plan-gated options retain their value rather than being wiped, and that skipped fields are returned under 'ignored'. It does not explain why the operation is flagged destructive or what is reversible.
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 core semantics and then the constraints on which fields are accepted. Slightly awkward phrasing ('Options of a plan the account does not have keep their value') costs a point but there is 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 21-parameter mutation tool with no output schema, the description covers the essential risks: partial updates, plan gating, and the 'ignored' response field. It does not mention idempotency caveats or the auth/permission context implied by openWorldHint, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 81%, so the schema already documents most of the 21 fields (links replacement, genre slugs, hex colour, Premium gating). The description names no individual parameters and adds only the aggregate rule that only supplied fields change, so it neither supplements nor compensates meaningfully.
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 ('Changes the profile of the account') and scopes it to the settings-page rules. It implicitly distinguishes itself from edit_track and edit_group by naming profile, but never states explicitly that it edits the authenticated account's own profile or contrasts with 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?
It gives actionable when-not guidance: e-mail, password, profile address, payouts, podcast and fan subscriptions 'change only on the website', so an agent knows not to attempt them. It also states the partial-update rule ('only the fields given change'). It lacks an explicit pointer to any alternative tool, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_setEdit setCDestructive
Changes a set of the account by the rules of its edit page - only the fields given change. Owner and moderators; privat only the owner.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| open | No | Others may add sounds | |
| sort | No | ||
| genre | No | Genre slug (list_genres) | |
| set_id | Yes | ||
| private | No | ||
| permalink | No | Last part of the set link | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false. The description adds useful partial-update semantics ("only the fields given change") and permission constraints, but the garbled phrase "privat only the owner" and the opaque reference to "rules of its edit page" leave the mutation behavior only partially explained.
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 short and front-loads the core action, which is good. But the second clause "by the rules of its edit page" is vague filler and "privat only the owner" is malformed, reducing clarity without adding useful 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?
This is a destructive, open-world mutation tool with 8 parameters and only 38% schema coverage, and it has no output schema. The description covers partial updates and permissions but omits parameter meaning, expected effects, and error/authorization behavior, leaving significant gaps for an agent to call 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 only 38% across 8 parameters, so the schema leaves several fields (name, sort, set_id, private, description) undocumented. The description does not explain any individual parameter, adding only the general "only the fields given change" note, which is insufficient to compensate for the coverage gap.
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 ("Changes a set of the account") and clarifies partial-update behavior ("only the fields given change"). However, "by the rules of its edit page" is vague and defers the actual semantics to an external page, so an agent cannot fully determine what the tool does from the definition 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?
It mentions who may invoke it ("Owner and moderators; privat only the owner"), which is authorization context rather than usage guidance. It does not explain when to choose this over siblings like edit_track, add_to_set, or delete_set, nor does it state preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_trackEdit trackBDestructive
Changes settings of an own track - everything the edit page can change, by the same rules. Only the fields given change; options the account cannot use (plan, fan programme, transcript) keep their value. private=false publishes the track and notifies followers. answer.waiting=true: the title matched a copyright keyword and the sound waits for approval.
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | No | ||
| tags | No | ||
| genre | No | Genre slug or label (list_genres) | |
| title | No | The link stays - use permalink to change it | |
| hidden | No | Hide from the profile and the lists | |
| artists | No | User ids of the artists on the sound - every newly tagged artist gets an e-mail; only tag artists the user named | |
| bitrate | No | Before the first encoding only; later streaming_quality | |
| license | No | ||
| more_by | No | ||
| podcast | No | Include in the podcast feed | |
| private | No | ||
| related | No | Show related sounds | |
| version | No | e.g. Extended Mix | |
| buy_link | No | ||
| comments | No | ||
| featured | No | Switch a bought feature on or off | |
| latitude | No | ||
| location | No | ||
| template | No | Player theme | |
| track_id | Yes | ||
| genre_own | No | ||
| longitude | No | ||
| permalink | No | Last part of the track link; the old link keeps redirecting | |
| subgenres | No | ||
| subtitles | No | ||
| tracklist | No | One chapter per line: [HH:MM:SS] Artist - Title | |
| block_size | No | ||
| release_at | No | Scheduled release, future - only for a private sound never published; empty clears | |
| block_space | No | ||
| description | No | Markdown | |
| musical_key | No | Musical key, e.g. Abm | |
| ai_generated | No | ||
| downloadable | No | ||
| release_date | No | Original release date YYYY-MM-DD | |
| stats_hidden | No | ||
| unpublish_at | No | Scheduled unpublish, future - only for a public sound; empty clears | |
| version_type | No | ||
| download_gate | No | Who may download | |
| embed_domains | No | Sites allowed to embed the sound | |
| show_analysis | No | Show the detected tempo and key | |
| youtube_start | No | Seconds | |
| youtube_video | No | YouTube link behind the player | |
| auto_tracklist | No | ||
| buy_link_title | No | ||
| fans_only_play | No | ||
| waveform_color | No | ||
| waveform_style | No | ||
| download_secret | No | ||
| download_filename | No | ||
| fans_only_download | No | ||
| waveform_highlight | No | ||
| fans_only_tracklist | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructive, open-world, and non-idempotent behavior. The description adds useful context: partial updates, account-plan limitations, publishing that notifies followers, and a copyright approval wait. The unexplained 'answer.waiting=true' reference slightly muddies transparency because that field is not in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and tightly worded, with no unnecessary repetition. The final 'answer.waiting=true' sentence is cryptic but still 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 52-parameter mutation with no output schema, the description is too high-level. It covers some side effects and account constraints but does not compensate for the low schema description coverage or explain validation, authorization, and return behavior sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 52 parameters and only 42% schema description coverage, so the description needs to compensate. It only clarifies private=false and the generic partial-update rule, leaving most parameters undocumented by either schema or description.
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: 'Changes settings of an own track,' with the scope 'everything the edit page can change.' It is clearly distinguishable from upload_track, delete_track, and get_track, though it does not explicitly name sibling alternatives.
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: edit an own track and send only the fields that should change. However, it gives no explicit when-not guidance or alternatives such as delete_track, upload_track, or edit_set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cast_urlCast URLA
A signed MP3 URL of a track for a cast receiver, valid 12 hours; fetching it counts as a play of this account.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: the URL is signed, expires after 12 hours, and fetching it counts as a play for the account. This explains why readOnlyHint is false and gives the agent important side-effect context, though it omits auth requirements or rate-limit 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 compact sentence with no wasted wording, and the most important behavioral detail, the play-count side effect, is included alongside the return value and validity period.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with complete schema coverage and no output schema, the description explains the return value, its validity window, and the important side effect. Nothing essential for correct invocation appears to be 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%, and both required parameters are fully documented in the input schema. The description does not add parameter-level meaning beyond what the schema already provides, 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 states a specific resource and return type: a signed MP3 URL of a track for a cast receiver. It is clear what the tool provides, though it does not explicitly distinguish itself from nearby siblings such as get_track, get_track_part, or streaming_quality.
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 a cast receiver' gives clear usage context, and the 12-hour validity plus play-count side effect help an agent understand when this is appropriate. However, it does not explicitly state when not to use it or name alternatives for ordinary playback or track metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsEventsARead-only
Upcoming events (gigs, live shows), or one event with its id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Event id - returns only that event | |
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD, default today | |
| page | No | Page, starting at 1 | |
| count | No | Items per page (max 100) | |
| author_id | No | Only events by or with this user id | |
| followed_only | No | Only events of followed artists |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that results can be upcoming events or a single event by id, but it does not disclose return shape, pagination behavior, or date-filter defaults beyond what the schema already 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?
The description is a single front-loaded sentence with zero waste. It immediately communicates the resource and the two primary access modes.
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 seven-parameter read tool with no output schema, the description is minimal. The rich schema covers parameter semantics, but the description does not explain return format, pagination behavior, or how date filters and followed_only interact with the default listing.
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 seven parameters are already documented in the schema. The description reinforces the id parameter's meaning by saying it returns one event, but adds no new semantics beyond the schema 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?
The description clearly states the resource (events) and distinguishes two use modes: upcoming event list vs. retrieving a single event by id. It lacks explicit verb phrasing and sibling differentiation, but no sibling tool is obviously a direct events alternative.
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: use this for upcoming events or a single event by id. There is no explicit guidance about when to prefer this over alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fan_subscriptionsFan subscriptionsBRead-only
subscribed: the fan subscriptions the account pays. subscribers: the account's fans with statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| type | No | subscribed | |
| count | No | Items per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only that 'subscribers' includes statistics, with no mention of pagination behavior, authentication needs, rate limits, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and wastes no words, but it is fragmentary and does not front-load the tool's overall purpose. It reads as two enum definitions rather than a structured tool description.
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 list tool with annotations covering safety and schema descriptions for pagination, the description is minimally adequate. However, it omits the overall listing purpose and any return-shape context, which matters more because there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description compensates for the undocumented 'type' enum by defining both 'subscribed' and 'subscribers'. The 'page' and 'count' parameters are already documented in the schema, so the description adds meaningful value where it is most needed.
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 defines the two modes of the tool but never states the overall action explicitly, relying on the name and title to convey that it lists fan subscriptions. It distinguishes the two result sets but does not differentiate this tool from 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?
Explaining what 'subscribed' and 'subscribers' mean implies which type value to choose, but there is no explicit guidance on when to use this tool versus alternatives or when not to use it. Pagination usage is left entirely to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedFeedBRead-only
Newest public tracks on hearthis.at, or the popular ones (optionally within one genre).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| type | No | recent | |
| count | No | Items per page (max 50) | |
| genre | No | Genre slug for type=popular, e.g. "techno" (see list_genres) | |
| duration_max | No | Maximum length in minutes | |
| duration_min | No | Minimum length in minutes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and reach are covered. The description adds that results are public tracks and that the popular mode is the one affected by genre, but it says nothing about pagination limits, ordering guarantees, or result volume.
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, and the two modes are stated before the optional qualifier. It is efficient, if a touch too terse to carry behavioral context.
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?
Six optional parameters, no output schema, and only two annotations: the description covers the core selection semantics but leaves return shape, pagination behavior, and the duration filters entirely to the schema. Adequate, not 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 83%, so the schema already documents page, count, genre, and both duration bounds. The description's only added semantic is that genre is meaningful in the popular mode, which the schema also states; the duration filters are never mentioned in the description.
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 concrete resource (public tracks on hearthis.at) and the two modes it serves — newest vs popular — with an optional genre narrowing. An agent can tell what it returns, though it never contrasts itself with near neighbors like get_genre_tracks or get_home_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it reads as the browse/discovery feed, and 'optionally within one genre' hints at when to pass a genre. There is no explicit statement of when to prefer this over search, get_genre_tracks, or get_home_section, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_genre_tracksGenre tracksBRead-only
Tracks of one genre, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| count | No | Items per page (max 50) | |
| genre | Yes | Genre id or slug from list_genres | |
| duration_max | No | ||
| duration_min | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value by specifying the sorting order ('newest first'), which is a key behavioral trait not found in the annotations. Since the annotations only cover safety (readOnlyHint), this description provides essential functional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is highly concise, stating the core function and the primary sorting mechanism in a single, efficient sentence with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While it defines the core output, it is not fully complete. It doesn't guide the agent on how to optimally use the five input parameters (e.g., setting duration filters or pagination) to achieve specific results beyond the basic retrieval.
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 description is extremely brief and only applies to the general concept of 'genre.' Given that 40% of the input schema descriptions are missing, the description offers no semantic guidance to help an agent utilize parameters like `duration_min` or `count` effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource being returned ('Tracks') and the specific condition applied ('of one genre'). It differentiates this tool by specifying the sorting behavior ('newest first') which aids in selection.
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 usage is implied by the function name and the list of sibling tools. It lacks explicit guidance on when this specific tool should be called versus a generic search or list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groupGroupCRead-only
A group: info (metadata and own permissions), tracks (paged), members (owner first).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| part | No | info | |
| count | No | Items per page (max 50) | |
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds two genuine behavioral facts beyond the schema: tracks are paged and members are returned owner-first. It says nothing about auth requirements or how pagination interacts with part.
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?
It is short and front-loads the resource, with no wasted words, but the telegraphic fragment style makes it cryptic rather than efficient; a single well-formed sentence would carry more at the same length.
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 a branching part enum producing three different response shapes, the description should say more about what each part returns and that page/count apply only to the tracks part. As written an agent can guess the branch but not the payload.
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 50%, so the description must carry weight. It does map the part enum values to their content ('info' = metadata and own permissions, 'tracks' = paged, 'members' = owner first), which is real added meaning, but page/count/group_id semantics 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 fragment 'A group: info..., tracks..., members...' names the resource and its sub-parts, and the name get_group supplies the verb. But it never states plainly that it retrieves a single group's details, nor does it distinguish itself from siblings like list_groups or get_user.
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 list_groups (listing many) or get_user, and no prerequisites or exclusions are mentioned. The only implicit cue is the part enum in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_home_sectionHome sectionBRead-only
One section of the hearthis.at home screen: stories (banners), latest_artists (featured artists), moods, newcomers (first upload in the last 7 days), genres_today (sounds per genre in the last 24 h), premium (plans and running promotion).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| count | No | newcomers (max 20) and genres_today (max 50) | |
| genre | No | newcomers only: genre id from list_genres | |
| section | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. It adds useful behavior context by explaining each section’s content and recency windows, such as newcomers being uploads in the last 7 days and genres_today covering the last 24 hours.
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 tight sentence with no filler, and the section meanings are front-loaded. It is slightly dense as a long sentence but remains efficient and scannable enough for a tool with six enum values.
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 partially compensates by explaining what each section contains, but it does not describe the response structure or pagination behavior. It is adequate for selecting the section, but an agent still lacks some details needed to interpret the returned data.
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 75%, and the schema describes page, count, and genre, so parameter documentation is mostly handled structurally. The description meaningfully explains the section enum values, which the schema only lists, but it adds little about page, count, or genre beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as one section of the hearthis.at home screen and enumerates every valid section with a short meaning. It is specific enough for an agent to understand what will be returned, though it does not explicitly contrast itself with siblings such as get_feed.
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 lists the available sections but gives no guidance on when to call this tool versus alternatives. There are no exclusions, prerequisites, or suggested sibling tools; the only routing hint, list_genres for genre ids, appears in the schema rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listen_historyListen historyCRead-only
Tracks the account listened to recently.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Items per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety characteristics are covered. The description adds the useful recency scope ('recently'), but does not disclose return behavior, ordering, or how pagination works despite the count parameter.
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?
It is a single compact sentence with no wasted text, but the phrasing is awkward and the key concept, retrieved listening history, is not front-loaded as clearly as it could be.
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 should clarify what is returned, such as track entries, ordering, and pagination behavior. Instead it only says the account listened recently, leaving the agent without enough context about the result shape.
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 count parameter is already fully documented as items per page with a maximum of 100. The description adds no additional parameter semantics, which is acceptable given the 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 implies the resource is the current account's recent listening history, but the verb 'Tracks' is misleading for a read operation and does not clearly say 'retrieve' or 'list.' It also does not distinguish this tool from nearby retrieval tools such as get_feed or get_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like get_feed or get_track, nor any stated prerequisites or exclusions. The recency wording implies a use case, but the agent must infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listen_laterListen laterBRead-only
The Listen later list of the account, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| count | No | Items per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact — results are ordered newest first — but says nothing about pagination defaults, total counts, or what an entry contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single eleven-word sentence with zero padding, front-loading the resource and appending the ordering qualifier. Appropriately sized for a trivial two-optional-parameter read.
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 paginated read with full schema coverage, annotations, and no output schema, the description covers what the tool returns and its ordering. Only the shape of an individual listen-later entry is left unstated, a minor gap given no output schema exists.
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 page and count fully documented including the max of 100 and default of 20. The description adds no meaning beyond the schema, which is acceptable at this coverage level but earns only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('The Listen later list of the account') and a scope/ordering qualifier ('newest first'), so the agent knows exactly what is returned. It does not name the sibling set_listen_later as the mutation counterpart, but the get/set naming pair makes the distinction reasonably obvious.
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 explicit when-to-use guidance, no mention of when not to use it, and no reference to alternatives such as set_listen_later for adding/removing items. Usage is only weakly implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_setSetCRead-only
All tracks of a set.
| Name | Required | Description | Default |
|---|---|---|---|
| permalink | Yes | Set permalink from list_my_sets, e.g. "199387-7" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description carries a lower burden. But the description adds no behavioral context beyond the annotations—no mention of pagination, ordering, auth requirements, or what 'all tracks' means in practice. It repeats the resource rather than adding transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded fragment with no filler. It is appropriately sized for a simple tool, though its brevity contributes to gaps handled in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with full schema coverage and readOnly annotations, the description is minimally adequate. It does not describe the return shape or whether the track list is paginated, which would be useful since no output schema exists.
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 'permalink' parameter is well documented with an example. The description adds no parameter semantics, but the baseline of 3 applies when the schema already carries parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says it returns 'all tracks of a set,' which conveys the resource and that it is a read of a set's contents. However, it omits the verb and does not distinguish this from siblings like list_my_sets, get_track, or add_to_set. It is a vague but not misleading statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as list_my_sets (to find a set) or get_track (to inspect a track). There are no prerequisites or exclusions mentioned, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trackTrackBRead-only
Metadata of one track: title, artist, genre, duration, counts, stream and artwork URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only, external-data nature is covered. The description adds useful behavioral value by listing the returned field set (including stream and artwork URLs) in the absence of an output schema, but it says nothing about error behavior for unknown permalinks or whether private tracks require auth.
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 fragment with zero filler, front-loading the resource before the field list. It is a noun phrase rather than a complete sentence, which slightly weakens the leading verb signal, but every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two fully documented required parameters, no nested objects, and no output schema, the field enumeration in the description covers the main gap an agent would face. It stops short of covering error/empty cases or relationship to sibling retrieval tools, which is 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%, and the schema already explains the permalink format for both 'author' and 'track' with URL examples. The description adds no parameter guidance beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (one track) and enumerates the returned fields: title, artist, genre, duration, counts, stream and artwork URLs. It is clear what the tool fetches, but it does not contrast itself with the adjacent get_track_part or get_set, so sibling differentiation is left implicit.
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, no prerequisite/auth context, and no mention of the closely related get_track_part alternative. An agent must infer the usage 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.
get_track_partTrack partBRead-only
More about one track: playlist (chapters / tracklist), transcript (AI transcript), related (similar tracks), reactions (emoji reactions) or comments.
| Name | Required | Description | Default |
|---|---|---|---|
| part | Yes | ||
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral content by explaining what each part returns, but says nothing about auth needs, missing/private tracks, rate limits, or response shape — notable given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the resource and then the enumerated variants — every clause carries information and nothing is repeated from structured 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?
For a read-only, three-required-param tool with no output schema, the description covers what each part yields but not what the response looks like or how it relates to get_track. Adequate to invoke, thin on what to expect back.
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 67%: author and track have permalink examples, but the part enum has no per-value description in the schema. The description compensates by defining all five enum values, which is exactly the gap the schema leaves.
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 the resource (a part of one track) and enumerates all five part values with a gloss for each (chapters/tracklist, AI transcript, similar tracks, emoji reactions, comments), so an agent knows exactly what content comes back. It stops short of an explicit verb or a direct contrast with the sibling get_track, leaving the read-vs-detail relationship implicit.
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 reach for this tool versus get_track, and no prerequisites (author + track permalinks are both required). The only guidance is the implicit 'more about one track' framing, which is not enough to route between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userUserCRead-only
A profile, or one of its lists: tracks, likes, reposts, following, followers, playlists, connected, badges.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | ||
| page | No | Page, starting at 1 | |
| count | No | Items per page (max 50) | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only that the tool can return a profile or one of several lists; it does not disclose pagination behavior, auth requirements, or other operational traits beyond what annotations and schema already imply.
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 short phrase with no filler, and the core resource is front-loaded. However, it is a sentence fragment and its enumeration largely repeats the schema enum, so it is concise but not maximally 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?
The schema documents most parameters, and annotations cover the read-only nature of the call. The description gives a high-level return concept but does not explain pagination, the required author permalink, or what a returned profile or list actually contains.
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 75%, so the baseline is 3. The description enumerates the list enum values, but this duplicates the schema's enum and adds no extra meaning about the author parameter, pagination, or how list selection changes the response.
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 identifies the resource clearly: a user profile or one of its associated lists, and enumerates the list types. It lacks an explicit verb and does not name or distinguish itself from relevant siblings such as whoami or get_feed, but the intended retrieval target is understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not say, for example, when to use whoami instead, or when to request a list rather than a profile, leaving selection entirely to inference from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_approveApprove a sound in a groupB
Owner and editors: publishes a sound that waits for approval; the members are told about it.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | ||
| track_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it discloses that only owners/editors may perform the action and that members are notified as a side effect. It does not contradict the annotations, though it omits reversibility and error 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?
It is a single, front-loaded sentence with the role restriction first and the effect second. The phrasing is slightly awkward, but there is no wasted verbiage.
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 mutation with annotations and no output schema, the description covers permissions and one side effect but leaves parameter semantics and success/failure behavior underspecified. It is adequate but incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both required integer parameters. It only vaguely implies a group and a sound/track, without clarifying group_id versus track_id or any format expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: publishing an approval-pending sound in a group, and mentions the resulting member notification. It is clear enough to distinguish from generic group actions, though it does not explicitly name alternatives among the many group-related 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?
The phrase 'Owner and editors' gives an important permission prerequisite, implying when the tool is usable. However, it gives no explicit when-to-use guidance relative to alternatives like group_track or group_member_role, and no exclusions or failure conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_blockBlock / unblock in a groupADestructive
Owner and editors: blocks a user from a group (they leave it and cannot join or add) or lifts the block.
| Name | Required | Description | Default |
|---|---|---|---|
| block | Yes | ||
| user_id | Yes | ||
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond annotations: the blocked user leaves the group and cannot join or add. Combined with the permission note, this tells the agent the blast radius of the destructive action. It does not describe reversibility beyond 'lifts the block' or any side effects on existing content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the actor permission, no filler, and the essential effect in a compact parenthetical.
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 output schema, the description covers who can call it and the practical effect. It falls short on the boolean parameter semantics and on whether unblocking restores prior membership state.
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 must clarify the three parameters. It implies group_id and user_id contextually, but never states the critical mapping of the boolean 'block' parameter (true = block, false = unblock), leaving the most important parameter ambiguous.
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 ('blocks a user from a group ... or lifts the block'), making the toggle nature clear. It is distinguishable from siblings like group_member_role and group_approve, though it does not explicitly contrast with them.
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?
'Owner and editors' gives a prerequisite, which is useful, but there is no explicit guidance on when to use this versus group_member_role or group_approve, nor any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_member_roleGroup member roleADestructive
Owner only: makes a member an editor or a plain member, or blocks them (use group_block to lift a block).
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| user_id | Yes | ||
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent, so the safety profile is covered. The description adds genuinely useful context the annotations lack: the owner-only authorization requirement and the asymmetric behavior that blocking happens here but must be lifted via group_block.
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 the permission gate first and the alternative tool named last. Zero waste.
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 tool with annotations covering the safety profile, the description covers authorization, enum meaning, and the cross-tool block/unblock workflow. It lacks edge-case behavior (re-applying the same role) but is otherwise sufficient to call 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 0%, so the description must carry the burden. It does explain the non-obvious enum, mapping 'editor', 'plain member', and 'blocked' to the role values, but says nothing about group_id/user_id beyond what their names imply, nor about behavior when setting a role the user already holds.
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 ('makes a member an editor or a plain member, or blocks them') and names the sibling group_block it is not equivalent to. An agent can distinguish this from group_block without opening 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?
Gives a hard precondition ('Owner only') and routes the unblock case to group_block, which is a concrete when/when-not signal. It does not explicitly state the reverse case (when to call group_block instead of this tool for blocking), so it falls just short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_trackAdd / remove group trackADestructive
Adds a track to a group (add=true) or removes it (add=false). Owner, editors and the sound's author are published at once; others wait while the group asks for approval. Adding notifies the members and may mail the owner.
| Name | Required | Description | Default |
|---|---|---|---|
| add | Yes | ||
| group_id | Yes | ||
| track_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety bar is partly covered; the description goes beyond them by disclosing the approval workflow and the notification/mail side effects. It does not explain why the operation is non-idempotent, nor whether removing a track affects the track itself, but the added behavioral context is substantial for a 3-sentence definition.
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 with the operation and its flag mapping front-loaded, followed by permission and side-effect details in descending order of importance. No boilerplate or restatement of the 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?
With no output schema, the agent could still want to know what comes back (published immediately vs pending approval in the response), and the definition doesn't say. Otherwise the essential picture — what it mutates, who is affected, what downstream effects fire — is present and matches the annotation profile.
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 must compensate. It fully documents the non-obvious 'add' flag (add=false means remove), but group_id and track_id carry no explanation beyond their names and integer ranges. One of three parameters receives real semantic treatment, so this is only partial compensation.
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 pair ('Adds a track to a group') and immediately disambiguates the direction via the 'add=true / add=false' mapping. The 'group' resource scope separates it from the set-management siblings (add_to_set, remove_from_set) without the agent needing to open 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?
The description gives clear operating context: which callers get published instantly versus which are queued for approval, and that adding triggers member notifications and possibly an owner email. That is genuinely decision-relevant framing. It stops short of explicitly routing the agent to alternatives (e.g., join_group, group_approve) or stating when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_groupJoin / leave groupADestructive
Joins a group (join=true) or leaves it (join=false). The owner cannot leave.
| Name | Required | Description | Default |
|---|---|---|---|
| join | Yes | ||
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, non-idempotent, and open-world, so the baseline is lower. The description adds the useful owner-cannot-leave constraint, but does not explain membership prerequisites, approval behavior, permissions, or side effects beyond the basic join/leave action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary action and then the boolean mapping and owner restriction. No wasted 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?
Annotations cover safety traits, but for a group-membership mutation the description omits prerequisites such as whether the caller must already be a member, whether approval is required, and what happens on failure. It is adequate but incomplete for a destructive group 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 0%, so the description must carry parameter meaning. It fully explains the join boolean semantics, but group_id is left implicit even though its purpose is obvious from the tool name and 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 states a specific verb and resource, and explains that the same tool both joins and leaves via the join boolean. It clearly separates the two operations but does not differentiate itself from nearby group-management siblings such as group_member_role or group_approve.
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 explains how to invoke join vs leave through join=true/false, and gives one important conditional rule: the owner cannot leave. It does not say when to use this instead of related tools like group_approve, group_member_role, or group_block.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsConversationsARead-only
Direct-message conversations of the account, most recent first, with unread counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint and openWorldHint already establish the safety profile, so the description's job is to add context, and it does: results are ordered most-recent-first and carry unread counts. It stops short of saying whether the listing is paginated or capped, which is the only meaningful remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource first and the ordering/return traits trailing. Nothing is repeated from the title or annotations and no words are 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 zero-parameter list tool with no output schema and full annotation coverage, the description supplies enough to call it correctly and anticipate the shape of the results. Pagination or result-cap behavior is the one omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is an empty object, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter claims are made or contradicted.
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 resource (direct-message conversations of the account) and scope, and adds ordering plus unread counts, so an agent can distinguish it from read_conversation, poll_messages, and send_message. It does not explicitly name a sibling alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: it is the entry point for enumerating conversations before reading or polling one. There is no explicit statement of when to prefer it over read_conversation or poll_messages, so the agent must infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_genresGenresARead-only
All genres with their ids and slugs. Includes "later" once the account saved something to Listen later.
| 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 and openWorldHint=true, so safety is covered. The description adds a non-obvious conditional behavior — the synthetic 'later' genre only appears once the account has saved something to Listen later — which an agent could not learn from the schema or annotations and which prevents misreading an apparently missing genre.
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 its fields, with no filler. The quoted 'later' phrasing is slightly cryptic but is the minimal way to flag the conditional genre.
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 no-arg read with no output schema, the description covers what is returned at a field level (ids, slugs) and the one conditional case. It stops short of saying whether results are ordered, complete, or paginated, which leaves a small gap for an agent consuming the list.
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; the baseline for a no-param tool applies. No false or confusing parameter claims are made.
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 ('All genres') and even the payload shape ('their ids and slugs'), which is more than the name alone conveys. It does not explicitly differentiate itself from the nearby get_genre_tracks sibling, but the catalog-vs-tracks distinction is inferable from the wording.
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 call this versus alternatives such as get_genre_tracks, search, or get_home_section. The second sentence is a data caveat, not usage guidance, so the agent must infer the call context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsGroupsBRead-only
Groups of a genre, groups a user owns (user_groups) or groups a user joined (joined; default: this account).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| type | Yes | ||
| count | No | Items per page (max 50) | |
| genre | No | Genre slug for type=genre | |
| user_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description's one behavioral addition is the default scope ('default: this account'), which is real value. It says nothing about pagination behavior, whether private groups appear, or what identity is used for user_groups/joined.
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?
Very short — almost no waste — but the structure is a single telegraphic fragment with a nested parenthetical ('joined; default: this account'), which is harder to parse than two clean sentences would be. Compact but not well-formed.
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 should say something about what a returned group looks like, and it does not. It also omits which fields are needed for each type variant. Adequate to pick the tool, insufficient to call it confidently for all three modes.
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 60% and the enum on `type` has no schema description at all, so the description is doing real work here: it glosses all three enum values and ties `genre` to type=genre. It leaves `user_id` and page/count behavior unaddressed, which keeps it below 5.
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 names the resource (groups) and enumerates what the returned groups are keyed by (genre / user_groups / joined), which is genuinely informative. But it is a sentence fragment with no verb, and it reads as a note about the `type` parameter rather than a statement of 'list groups matching a filter'. An agent can figure out the purpose, but only by inferring.
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 implies when each variant applies and gives the default ('this account'), which is useful selection guidance. It never names an alternative — e.g., get_group for a single group — nor states prerequisites like 'genre slug required when type=genre', so the agent must derive those from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_setsMy setsCRead-only
Sets (playlists) of the account.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| count | No | Items per page (max 50) | |
| exclude_track_id | No | Leave out sets that contain this track |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no statement about ordering, pagination limits, or what a returned set contains, and there is no output schema to fill the 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?
It is short and front-loaded with zero waste, but that brevity is under-specification rather than economy. There is only one fragment, so there is no structure to assess beyond noting it reads like a label rather than a description.
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 only read-only/open-world hints, the description carries most of the burden for a listing tool with pagination and a filter parameter—yet it explains neither the shape of results nor pagination behavior. An agent can guess its purpose from the name but not confirm it from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, count, and exclude_track_id are fully documented in the schema itself. The description contributes nothing about them, which is acceptable under the baseline but leaves no added value—particularly for exclude_track_id, whose filtering intent is already clear from 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 is a noun phrase ('Sets (playlists) of the account.') that essentially restates the name 'list_my_sets' and title 'My sets' without a verb or scope statement. The one genuinely additive element is glossing 'sets' as playlists, but it does not distinguish this tool from siblings like get_set or add_to_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?
There is no when-to-use guidance at all: nothing says when to call this versus get_set, list_groups, or the other listing tools. The agent must infer that this enumerates all of the authenticated account's sets, which the description never states outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_messagesNew messagesARead-only
Incoming messages with an id above since (max 100). Without since only the current cursor comes back. Marks nothing as read.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds meaningful behavior beyond that: a 100-message cap, cursor-only response when 'since' is omitted, and the fact that nothing is marked as read. It does not detail the response shape, but no output schema exists to carry that burden.
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 clauses, front-loaded with the main filtering rule and followed by the key edge case and side-effect note. Every sentence carries useful 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 read-only polling tool with no output schema and a single optional parameter, the description covers the essential semantics: filtering, cap, cursor-only fallback, and non-mutating behavior. The exact response shape remains unspecified, 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 coverage is 0%, so the description must compensate for the single undocumented parameter. It does so by defining 'since' as an id threshold and explaining the different behavior when it is omitted, which goes beyond the bare integer 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-and-resource framing ('Incoming messages with an id above since') and states the core retrieval behavior. It does not explicitly name a sibling like read_conversation to distinguish scope, but the name and description together make the purpose clear.
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 explains the important edge case of omitting 'since' and the max result size, which implies polling usage. However, it gives no explicit guidance on when to use this instead of related tools such as read_conversation or get_feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_commentCommentA
Posts a public comment on a track, optionally at a position in seconds or as a reply to another comment.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ | |
| parent | No | Id of the comment this replies to | |
| comment | Yes | ||
| position | No | Position in the track in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-destructive, open-world write, so the bar is lower. The description usefully adds that the comment is PUBLIC and that position/reply are optional, but omits key behavioral facts: whether the comment can later be edited, whether `author` must be the authenticated user, and any rate limiting on posting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that names the action, the target, and the two optional modes with zero filler. Nothing needs trimming and nothing important is 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 5-parameter write tool with no output schema, the definition should say what comes back (e.g. a comment id) and whether `author` may be any profile or must be the caller's own. Those gaps leave a real risk of a malformed but schema-valid 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?
Schema coverage is 80%, so the baseline is 3. The description reinforces `position` as seconds and `parent` as a reply target, but both are already described in the schema, and it adds nothing for `comment` (which has no schema description) or the ownership semantics of `author`.
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 ("Posts a public comment on a track") plus the two optional variations (position, reply). It is clearly distinguishable from the sibling delete_comment, though it never names that sibling to reinforce the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the context (commenting on a track) and implicitly contrasts reply-vs-top-level via the "parent" option, but gives no explicit when-to-use/when-not guidance and no prerequisites such as needing a track permalink or authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_reactionReactionA
Posts an emoji reaction at a position of a track. Valid reaction ids are in get_track_part part=reactions.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ | |
| position | Yes | Position in the track in seconds | |
| reaction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the safety profile is covered. The description adds that reactions are anchored to a time position and require discovered ids, but says nothing about auth requirements, whether a second reaction at the same position replaces the first, or 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?
Two sentences, zero filler, with the core action front-loaded and the id-discovery pointer immediately after. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-required-parameter write tool with no output schema, the description covers what it does and where the constrained id value comes from, which is the main gap in the schema. Missing only auth expectations and duplicate/replacement behavior, which are secondary for this operation.
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 75%, and the single undocumented parameter is 'reaction' (integer, no enum). The description compensates by directing the agent to get_track_part part=reactions for valid ids, which is the key missing semantic. It does not restate position units, but the schema already 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?
The description uses a specific verb and resource ('Posts an emoji reaction') and scopes it to a position on a track, which cleanly separates it from siblings like toggle_like or post_comment. It stops short of explicitly naming those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete prerequisite — valid reaction ids come from get_track_part part=reactions — which is genuinely useful routing. However, it offers no guidance on when to use this versus related engagement tools (toggle_like, post_comment) or any preconditions such as authentication or track ownership.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_conversationRead conversationA
Messages with one user, oldest first. Leaves them unread unless mark_read=true.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Items per page (max 200) | |
| before | No | Message id - returns the page of older messages | |
| user_id | Yes | ||
| mark_read | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, and the description explains exactly why: reading has the state side effect of marking messages read only when mark_read=true. That is precisely the kind of non-obvious behavior annotations cannot convey, though return format and pagination mechanics are not covered.
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. Ordering comes first, the side-effect caveat second — both front-loaded where they matter.
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-param read tool with no output schema and partial annotation coverage, the description supplies the two things an agent cannot get elsewhere: sort order and the unread/mark_read side effect. Pagination via `before` is left to the schema, which is an acceptable but minor miss.
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 50% (limit and before are documented; user_id and mark_read are not). The description compensates for mark_read by stating its default behavior and side effect, which is the highest-value gap, 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?
The description gives a specific verb+resource: reading messages with a single user, plus the ordering guarantee (oldest first). It clearly reads a single conversation, but it never names siblings like list_conversations or poll_messages to sharpen the distinction.
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?
"Messages with one user" implies the per-conversation read versus the inbox listing, but the agent must infer that from the name plus sibling list. There is no explicit when-to-use, when-not, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_setRemove from setCDestructive
Removes a track from a set of the account.
| Name | Required | Description | Default |
|---|---|---|---|
| set_id | Yes | ||
| track_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the track is merely unlinked from the set (still in the library) or removed entirely, whether the removal is reversible, or what happens when the track is not in the set — the key ambiguity given a sibling named delete_track.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, but it is under-specified rather than efficient — there is nothing front-loaded beyond the bare action, and no second sentence earns its place because none 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?
This is a destructive mutation with no output schema and completely undocumented parameters; the description should at minimum clarify that only the set membership is removed and note error behavior for missing tracks or unauthorized sets. None of that is present.
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% for two required integer parameters (set_id, track_id); neither is described in the schema. The description only echoes the nouns 'track' and 'set' and gives no format, range, or ownership constraints, so it fails to compensate for the coverage gap.
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 verb+resource pair ('Removes a track from a set') is identifiable, but the phrase 'of the account' is vague and the description never distinguishes this from adjacent siblings like delete_track, add_to_set, or delete_set. An agent can guess the purpose but must infer the exact scope (association removal vs. track deletion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of the complementary add_to_set or the contrasting delete_track, and no preconditions such as owning the set or the track already being present. The agent gets no routing signal beyond the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_track_coverRemove track coverCDestructive
Removes the cover of an own track.
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the risk profile is covered structurally. The description contributes the ownership requirement ('own track'), which is real context beyond the annotations, but says nothing about what state results after removal or how a missing cover is handled.
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 verb and scope front-loaded and no filler. It is efficient, though the terseness pushes explanatory burden onto other dimensions rather than being 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?
This is a destructive mutation with no output schema and an undocumented required parameter. The description does not explain the resulting state, idempotency behavior (does a second call error?), or authorization requirements beyond the vague '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 description coverage is 0% and the single parameter track_id is documented only by name. The description does not clarify what identifier this is, where it comes from, or how to obtain it, so it fails to compensate for the undocumented 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 (removes) and resource (the cover of a track), and the word 'own' scopes it to tracks the caller owns. It is distinguishable from the sibling set_track_cover, though the description never names that counterpart 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?
The only usage signal is the implicit ownership constraint in 'own track'. There is no statement of when to use this versus set_track_cover or copy_track_image, and no prerequisites or error expectations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchBRead-only
Search tracks, artists (users) or playlists by text.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page, starting at 1 | |
| type | Yes | ||
| count | No | Items per page (max 50) | |
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and openness are covered. The description adds nothing about result ordering, matching semantics (substring vs. exact), pagination behavior, or the cost of broad queries, which are the traits an agent would need for this 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?
A single front-loaded sentence with zero filler. Nothing is redundant or 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?
With no output schema, the response shape is entirely unknown, and the description does not say that results are paged, what fields are returned, or how many items appear. For a 4-parameter search tool with half its parameters undocumented, this leaves the agent guessing before and after the 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?
Schema coverage is 50%: page and count are documented in the schema, while type and query are not. The description partially compensates by enumerating searchable entity types and clarifying that 'user' means artists, which genuinely helps map the enum value 'user'.
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 (search) plus the resource types searched (tracks, artists/users, playlists), which is more precise than the bare title 'Search'. No sibling is a competing search tool, so no explicit differentiation is needed, but scope (text-based, entity-typed) is clear.
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 text' implicitly contrasts this with id-based lookups like get_track, giving some usage signal. However, there is no statement of when to prefer this tool, no exclusions, and no mention of how to handle empty or ambiguous queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend messageB
Sends a direct message (max 2000 characters) to a user. Only send what the user asked to send.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered externally. The description adds only the character cap (which duplicates schema maxLength) and a content guardrail; it says nothing about delivery semantics, failure modes, or whether the recipient must be a known/followed user.
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 its constraint. Every sentence is relevant, though the character limit duplicates the schema and the guardrail sentence is more policy than tool definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with no output schema, the description covers the core action and one constraint, but leaves out what happens on invalid recipients, whether the message is delivered immediately, and what the response contains. Adequate but with clear gaps for an outward-facing send operation.
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 must carry parameter meaning. It does partially: 'to a user' implies user_id and 'max 2000 characters' restates the message bound, but it gives no indication of what user_id format/identity source is expected (integer ID vs. handle) beyond the schema's type.
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 — 'Sends a direct message ... to a user' — which is unambiguous and distinguishes it from feed/comment siblings like post_comment. It does not explicitly contrast with read_conversation or poll_messages, so sibling differentiation is implied 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 send what the user asked to send' is a safety guardrail, not usage guidance: it never says when to use this tool versus post_comment, post_reaction, or the conversation tools. No prerequisites, no when-not conditions, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_listen_laterListen laterADestructive
Saves a track of someone else to Listen later (on=true), removes it (on=false), or toggles (on omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| on | No | ||
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is carried. The description usefully explains that omitting 'on' triggers a toggle, which is real behavioral context beyond the annotations, but it says nothing about what gets destroyed on removal, permission requirements, or failure behavior for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler that front-loads the action and enumerates the three modes in order. Every clause carries semantic weight, including the scope qualifier 'of someone else'.
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 three-parameter mutation with no output schema, the description covers the core contract but omits the return value and what a failed or repeated call yields. It also doesn't explain the 'of someone else' constraint (e.g., that own tracks are excluded), which an agent may need when the call fails.
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 67%: track and author are documented in the schema, but 'on' has no schema description. The description compensates by fully defining the tri-state semantics of 'on', which is precisely the undocumented gap. It adds little about author/track beyond what the schema already states.
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 (saves/removes a track to/from Listen later) and decomposes the operation into its three states. The mutation framing clearly distinguishes it from the read-only sibling get_listen_later without needing to name it.
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 maps parameter values to behavior ('on=true' add, 'on=false' remove, omitted = toggle), which tells the agent exactly which call form to use for each intent. It stops short of naming the read counterpart get_listen_later as the way to verify state, but the usage conditions themselves are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_track_coverSet track coverADestructive
Sets or replaces the cover of an own track from a local JPG or PNG (max 10 MB).
| Name | Required | Description | Default |
|---|---|---|---|
| track_id | Yes | ||
| image_path | Yes | Absolute path of the image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructive, non-idempotent, and open-world behavior. The description adds valuable operational constraints beyond annotations: it replaces an existing cover, accepts only JPG/PNG, requires a local file, and enforces a 10 MB maximum.
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 action and key constraints are immediately visible.
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 mutation tool with rich annotations and no output schema, the description covers the essential behavior: what it does, ownership scope, source file type, local-file requirement, and size limit. It is nearly complete, though track_id semantics remain implicit.
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 50%, with image_path already described as an absolute path in the schema. The description adds important semantics for image_path, including allowed formats and size limit, but it does not explain track_id beyond the implied ownership in 'own track'.
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: setting or replacing the cover of an own track. It also distinguishes the action from siblings like remove_track_cover and copy_track_image by specifying that the source is a local JPG or PNG file.
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 gives useful context for when this tool applies: only for an own track and only from a local JPG or PNG file. However, it does not explicitly name alternatives such as copy_track_image or remove_track_cover, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streaming_qualityStreaming qualityADestructive
Streaming quality of an own track. Without value: the current state. value=best queues the highest quality of the file type; a number queues that bitrate (999 = original MP3, 1000 = lossless). The change is transcoded in the background.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| value | No | ||
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds real context: the change is transcoded in the background (async), and 999/1000 map to original MP3 and lossless. It doesn't state reversibility or whether the original is preserved, leaving a small 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?
Three tight sentences that lead with the resource and then the value semantics. No filler, though the sentence structure is slightly dense.
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 only loosely describes the return ('the current state'), but it fully covers input semantics and the async transcoding behavior. Adequate for an agent to call it correctly, with a minor gap on return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and `value` has no schema description, but the description explains best, numeric bitrate, 999, and 1000 meanings. `track` and `author` are already documented in the schema, so the description compensates where it matters most.
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 resource (streaming quality of an own track) and describes both the read (no value = current state) and write (value = queue quality) behaviors. No verb heads the sentence, but the dual behavior is clear. No sibling deals with streaming quality, so differentiation isn't needed.
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?
Clearly tells the agent when to omit value (read current state) versus when to supply one (queue a change). No exclusions or alternatives are named, but no sibling overlaps this capability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_followFollow / unfollowADestructive
Follows a user, or unfollows when the account already follows them. User id from get_user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true; the description adds genuine value by explaining WHY the call is not idempotent — a second call reverses the relationship. However it never surfaces the destructive implication flagged in the annotations, i.e. that an accidental call silently removes an existing follow, nor does it mention auth or rate limits. Useful addition, but a material safety gap remains.
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 primary behavior front-loaded and the parameter-sourcing hint appended. Nothing restates the title or the 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 one-parameter toggle with safety annotations already present, the core is covered. But there is no output schema, and the description never says what comes back — an agent cannot tell whether the response reports the resulting follow state or nothing at all, which matters for a state-flipping operation.
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 must compensate for the single user_id parameter. It does identify the value as a user id and points to get_user as the source, which is real added meaning. It does not clarify that no handle/username form is accepted, and the schema's odd allowance of negative integers goes unremarked.
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 the specific resource (a user) and states both branches of the operation: it follows, or unfollows when already following. That toggle semantics distinguishes it clearly from unrelated siblings and makes the verb unambiguous. It stops short of a 5 only because it never contrasts itself with the other toggle_* siblings (toggle_like, toggle_repost), leaving the agent to infer the distinction from the resource 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?
Usage is implied rather than stated: the description establishes that this is the single entry point for both follow and unfollow, and hints that the id should come from get_user. There is no explicit guidance on when to prefer this over alternatives, no prerequisites about knowing the current follow state before calling, and no warning about double-invocation flipping the state back.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_likeLike / unlikeADestructive
Likes a track, or removes the like when it is already liked. The answer says the new state.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=false; the description adds the crucial meaning behind those flags – the operation is a state flip, and unliking destroys an existing like. It also discloses the return signal ("The answer says the new state"), which annotations cannot convey. It stops short of permissions, rate limits, or what happens on an invalid/unliked track.
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, toggle behavior front-loaded, return behavior second. Nothing redundant for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-required-string tool with full annotation coverage, the description covers both what it does and what it returns. Minor gaps remain around auth requirements and failure behavior, but no output schema exists and none of the essentials for calling it are 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%, with both required parameters already documented with permalink examples. The description adds no syntax or scoping information beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Likes a track") plus the exact conditional semantics ("removes the like when it is already liked"). It doesn't explicitly distinguish itself from the similarly-named toggle_repost/toggle_follow siblings, so an agent must infer the resource 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?
There is no explicit when/when-not guidance and no named alternative. The toggle semantics do implicitly warn that a second call undoes the first, which is a useful usage cue, but that is context rather than stated guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_repostRepost / undo repostADestructive
Reposts a track to the account's followers, or takes the repost back when it already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| track | Yes | Track permalink, e.g. "my-mix" from https://hearthis.at/djname/my-mix/ | |
| author | Yes | Profile permalink, e.g. "djname" from https://hearthis.at/djname/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description usefully explains the toggle conditional, which is exactly why the annotations flag idempotentHint=false and destructiveHint=true. However, it stops short of the operational consequence: because there is no read tool to check repost state, a blind second call silently undoes a repost. That hazard, and any permission requirement, goes undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the primary action and appends the conditional reversal. Every clause earns its place with 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, no-output-schema tool with safety annotations, the description covers the core action adequately. What is missing is the state-discovery question a non-idempotent toggle forces on the caller, plus what a successful toggle returns or confirms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented with permalink format examples, so the schema carries the load. The description adds nothing about 'author' or 'track' beyond what is already structured, which is the expected baseline rather than a gap.
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 ('Reposts'), a precise resource ('a track'), and the scope ('to the account's followers'), then clarifies the undo semantics. An agent can distinguish it from get_track or post_comment without opening the schema, though it never explicitly contrasts with the parallel toggle_like/toggle_follow 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?
The 'or takes the repost back when it already exists' clause implies the usage condition, but it is stated as tool behavior rather than as guidance to the caller. There is no instruction on how to determine whether the repost currently exists, nor any exclusion or alternative named among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_trackUpload trackADestructive
Uploads a local audio file (mp3, wav, flac, aac, m4a, ogg, aif/aiff, wma, opus) as a new track of the account, with optional metadata and cover. The track stays private unless private=false - publish only when the user asked for it. Only upload files the user named.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Comma-separated | |
| genre | No | Genre slug or label, e.g. "techno" | |
| title | No | ||
| private | No | false publishes the track at once | |
| comments | No | Allow comments | |
| file_path | Yes | Absolute path of the audio file | |
| tracklist | No | One chapter per line: [HH:MM:SS] Artist - Title | |
| cover_path | No | Absolute path of a JPG or PNG cover, max 10 MB | |
| release_at | No | ISO 8601 with UTC offset, e.g. 2026-07-01T20:00:00+02:00 | |
| description | No | ||
| downloadable | No | ||
| unpublish_at | No | ISO 8601 with UTC offset, e.g. 2026-07-01T20:00:00+02:00 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, destructive=true, openWorld=true, idempotent=false), and the description still adds value by stating the default-private posture and the publish-only-on-request rule. It omits failure modes, size limits for audio, and whether a duplicate upload creates a second track, which would matter given destructive/non-idempotent hints.
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: purpose first, then the privacy default, then the upload-restriction guardrail. Every sentence carries a distinct constraint and nothing is repeated from 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?
For a 12-parameter mutation tool with no output schema, the description covers the essentials an agent needs (formats, privacy default, file scoping) and the schema covers the rest. It does not say what the call returns (track id/URL) nor how large audio files may be, which leaves minor gaps for a non-idempotent upload.
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 75%, so the schema already documents most parameters. The description adds the accepted audio format list, which constrains file_path beyond the schema's terse 'Absolute path of the audio file', and clarifies that metadata and cover are optional. The remaining undocumented parameters (downloadable, description, comments) get no help, but that is a minor gap at this coverage level.
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 ('Uploads') and resource ('a local audio file ... as a new track of the account') and enumerates the supported formats, which no sibling does. The phrase 'as a new track' implicitly separates it from edit_track, set_track_cover, and delete_track 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?
Gives explicit conditional guidance: 'The track stays private unless private=false - publish only when the user asked for it' and 'Only upload files the user named.' These are real behavioral constraints an agent could otherwise violate. It stops short of naming an alternative tool (e.g. edit_track for post-upload changes), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IBRead-only
The hearthis.at account this server acts as: id, permalink, name, counts and Premium state.
| 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 and openWorldHint=true, so the safety profile is covered. The description's useful addition is naming the returned identity fields, which tells the agent what an identity probe yields, but it says nothing about auth requirements or failure behavior when credentials are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with no filler, but its fragmentary grammar ('The hearthis.at account this server acts as: ...') reads awkwardly and costs a little readability for no gain.
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 and no output schema, the description carries the return-value burden and does so by listing the fields returned. It stops short of explaining when this probe is the right call over get_user, which is the only material 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?
The tool takes zero parameters, so the baseline is 4; there is nothing about argument semantics that the description could or should explain.
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 identifies the specific resource: the hearthis.at account this server authenticates as, and enumerates the returned fields (id, permalink, name, counts, Premium state). It's a noun phrase rather than a verb, and it does not distinguish itself from the sibling get_user, which likely retrieves other users' profiles.
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 explicit statement of when to call this tool versus alternatives. The reader must infer from the sibling name get_user that this one is for the server's own account, but that distinction is never asserted.
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.
51 tool updates
v0.1.0- First observed
add_to_set - First observed
badge_settings - First observed
copy_track_image - First observed
create_group - First observed
delete_comment - First observed
delete_conversation - First observed
delete_group - First observed
delete_set - First observed
delete_track - First observed
edit_group - First observed
edit_profile - First observed
edit_set - First observed
edit_track - First observed
get_cast_url - First observed
get_events - First observed
get_fan_subscriptions - First observed
get_feed - First observed
get_genre_tracks - First observed
get_group - First observed
get_home_section - First observed
get_listen_history - First observed
get_listen_later - First observed
get_set - First observed
get_track - First observed
get_track_part - First observed
get_user - First observed
group_approve - First observed
group_block - First observed
group_member_role - First observed
group_track - First observed
join_group - First observed
list_conversations - First observed
list_genres - First observed
list_groups - First observed
list_my_sets - First observed
poll_messages - First observed
post_comment - First observed
post_reaction - First observed
read_conversation - First observed
remove_from_set - First observed
remove_track_cover - First observed
search - First observed
send_message - First observed
set_listen_later - First observed
set_track_cover - First observed
streaming_quality - First observed
toggle_follow - First observed
toggle_like - First observed
toggle_repost - First observed
upload_track - First observed
whoami
TDQS
Scored across 51 tools
Most tools target clearly distinct resources and actions, and descriptions clarify near-neighbors such as get_feed vs get_genre_tracks vs get_home_section, or get_track vs get_track_part. The large group-management surface has several related tools, but their boundaries are still mostly understandable.
The set is predominantly snake_case and many names follow verb_noun, but there are notable deviations like whoami, streaming_quality, badge_settings, group_member_role, group_block, group_approve, and group_track. These remain readable, but the convention is mixed rather than consistently verb_noun.
With 51 tools, the server is far above the typical 3-15 range and is heavy for an agent to navigate, even though the domain is broad. The tools are organized by area, but the count is still excessive for practical tool selection.
Coverage is strong across tracks, sets, groups, direct messages, profiles, discovery, and social actions, with CRUD and moderation workflows largely present. Minor gaps remain, such as notifications, comment editing, and event creation, but core workflows are covered.
Maintenance
Related MCP Connectors
AI music and podcast platform for autonomous agents. SoundCloud for AI bots.
Search the Bitsound music store, manage collection and playlists, edit your releases as an artist.
AI-manageable audio CDN: upload, transcode, normalize, stream & deliver audio, plus grounded docs.
Run your social media from Claude, ChatGPT or any MCP client. Feedlio's MCP server lets your assistant list workspaces and connected accounts, import media from a URL, and create, edit, reschedule and cancel posts on Facebook, Instagram, LinkedIn, YouTube, TikTok, Threads, Bluesky, Mastodon and Dev.to, with per-platform settings for YouTube, TikTok and Dev.to. Sign in with OAuth on Feedlio's own page; MCP access is included on the Standard plan and up, with a 7-day free trial. Support: support@feedlio.io
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides Multi-Agent Conversation Protocol interface for the SoundCloud API, enabling AI agents to interact with SoundCloud's music streaming platform through natural language.1-
- AlicenseBqualityDmaintenanceEnables AI assistants to control Spotify playback, manage playlists, search music, and access listening history. Requires Spotify Premium and uses secure OAuth 2.0 with PKCE authentication.1364 npmMIT
- AlicenseBqualityCmaintenanceEnables uploading and managing SoundCloud tracks via the official API, with support for metadata, artwork, and automated token refresh.728 PyPIMIT
- AlicenseAqualityCmaintenanceEnables MCP clients to search SoundCloud and retrieve tracks, playlists, and users, as well as perform authenticated actions such as likes, reposts, follows, comments, playlist editing, and uploads with multi-account OAuth support.36MIT